/** * @file appTask.c * @author sunbeam * @brief * @version 0.1 * @date 2023-11-14 * * @copyright Copyright (c) 2023 * */ #include "appTask.h" #include "iodefine.h" #include "r_cg_adc.h" #include "PINdef.h" #include "hwCtrl.h" #include "MotorCtrl.h" #include "RLIN_driver.h" #include "r_cg_wdt.h" #include "r_cg_timer.h" static uint8_t EEL_BUF[50]; unsigned char IGN_Voltage_error_flag, IGN_Voltage_error_count; unsigned char Timer_1ms_flag; unsigned char Timer_5ms_flag; unsigned char Timer_10ms_flag; unsigned char Timer_20ms_flag; unsigned char Timer_50ms_flag; unsigned char Timer_1000ms_flag; /***************************************************/ static unsigned int EEL_SAVE_CNT_DOWN_TIMER; static uint8_t EEL_SAVE_ENABLE; MotorStateEE_Type MotorStateEE; MotorStateEE_Type *pEE; void MotorCtrl(void); void HallDetecte(void); void LIN_Task(void); void TfJr_CtrlTask(void); void JrTask(void); void Lock_Ctrl(void); extern uint8_t OC1flag,OC2flag,OC3flag; uint8_t TfState,JrState; unsigned char keybyte1,keybyte2,keybyte3; void Apply_task(void) { //static uint8_t temp; if (Timer_1ms_flag == 1) { Timer_1ms_flag = 0; KeyScan(); HallDetecte(); CurrentDetecte(); JrTask(); if (EEL_SAVE_CNT_DOWN_TIMER > 0) { EEL_SAVE_CNT_DOWN_TIMER--; } } if (Timer_5ms_flag == 1) { Timer_5ms_flag = 0; KeyPro(); } if (Timer_10ms_flag == 1) { Timer_10ms_flag = 0; MotorCtrl(); LIN_Task(); } if (Timer_20ms_flag == 1) { Timer_20ms_flag = 0; //R_WDT_Restart(); } if (Timer_50ms_flag == 1) { Timer_50ms_flag = 0; TfJr_CtrlTask(); Lock_Ctrl(); } if (Timer_1000ms_flag == 1) { Timer_1000ms_flag = 0; //temp = !temp; //MOTOR1Ctrl(temp); } } extern uint16_t MotorHallLoc[6],MotorHardStop1[6],MotorHardStop2[6]; extern uint8_t Master_TxData1[]; extern uint16_t current1,current2,current3; void LIN_Task(void) { static uint8_t lin_sch_count=0; switch (lin_sch_count) { case 0: Master_TxData1[0] = (JrState<<4)|(TfState<<6); Master_TxData1[1] = keybyte3; Master_TxData1[3] = current1; Master_TxData1[4] = current2; Master_TxData1[5] = current3; //Master_TxData1[6] = MotorHallLoc[2]>>8; //Master_TxData1[7] = MotorHallLoc[2]; RLIN_Master_HeaderTransmit(0x80); break; case 1: RLIN_Master_HeaderTransmit(0x99); break; case 2: RLIN_Master_HeaderTransmit(0x61); break; case 3: break; default: lin_sch_count = 0; break; } lin_sch_count++; if (lin_sch_count > 2) { lin_sch_count = 0; } } void LIN_Rx_Handle(uint8_t pid,uint8_t *data) { uint8_t id = pid & 0x3f; switch (id) { case 0x21: keybyte3 = data[4]; break; case 0x19: //MOTOR1Ctrl(1); keybyte1 = data[0]; keybyte2 = data[1]; break; default: break; } } void KeyPressLogic(uint8_t keyid) { switch (keyid) { case KEYID_MOTOR1_XQ: setMotorState(MOTOR1,ACT_XQ); break; case KEYID_MOTOR1_XH: setMotorState(MOTOR1,ACT_XH); break; case KEYID_MOTOR2_XQ: setMotorState(MOTOR2,ACT_XQ); break; case KEYID_MOTOR2_XH: setMotorState(MOTOR2,ACT_XH); break; case KEYID_MOTOR3_XQ: setMotorState(MOTOR3,ACT_XQ); break; case KEYID_MOTOR3_XH: setMotorState(MOTOR3,ACT_XH); break; case KEYID_MOTOR4_XQ: setMotorState(MOTOR4,ACT_XQ); break; case KEYID_MOTOR4_XH: setMotorState(MOTOR4,ACT_XH); break; case KEYID_MOTOR5_XQ: setMotorState(MOTOR5,ACT_XQ); break; case KEYID_MOTOR5_XH: setMotorState(MOTOR5,ACT_XH); break; case KEYID_MOTOR6_XQ: setMotorState(MOTOR6,ACT_XQ); break; case KEYID_MOTOR6_XH: setMotorState(MOTOR6,ACT_XH); break; case KEYID_MM: MotorMemoryKeyMMPress(); break; case KEYID_M1: break; case KEYID_M2: break; case KEYID_M3: break; case KEYID_K4: JrState++; TfState = 0; if (JrState > 3) { JrState = 0; } break; case KEYID_K3: TfState++; JrState = 0; if (TfState > 3) { TfState = 0; } break; case KEYID_K2: break; case KEYID_K1: break; default: break; } } void KeyReleaseLogic(uint8_t keyid) { switch (keyid) { case KEYID_MOTOR1_XQ: setMotorState(MOTOR1,ACT_NOACT); break; case KEYID_MOTOR1_XH: setMotorState(MOTOR1,ACT_NOACT); break; case KEYID_MOTOR2_XQ: setMotorState(MOTOR2,ACT_NOACT); break; case KEYID_MOTOR2_XH: setMotorState(MOTOR2,ACT_NOACT); break; case KEYID_MOTOR3_XQ: setMotorState(MOTOR3,ACT_NOACT); break; case KEYID_MOTOR3_XH: setMotorState(MOTOR3,ACT_NOACT); break; case KEYID_MOTOR4_XQ: setMotorState(MOTOR4,ACT_NOACT); break; case KEYID_MOTOR4_XH: setMotorState(MOTOR4,ACT_NOACT); break; case KEYID_MOTOR5_XQ: setMotorState(MOTOR5,ACT_NOACT); break; case KEYID_MOTOR5_XH: setMotorState(MOTOR5,ACT_NOACT); break; case KEYID_MOTOR6_XQ: setMotorState(MOTOR6,ACT_NOACT); break; case KEYID_MOTOR6_XH: setMotorState(MOTOR6,ACT_NOACT); break; case KEYID_MM: MotorMemoryKeyMMRelease(); break; case KEYID_M1: MotorMemoryKeyM1Release(); break; case KEYID_M2: MotorMemoryKeyM2Release(); break; case KEYID_M3: MotorMemoryKeyM3Release(); break; default: break; } } void KeyPro(void) { uint8_t keyid; for (keyid = 0; keyid < KEY_NUM; keyid++) { if (getKeyPressFlag(keyid)) { KeyPressLogic(keyid+1); StopAutoCal(); } if (getKeyReleaseFlag(keyid)) { KeyReleaseLogic(keyid+1); } } } void EEL_READ(void) { uint16_t checksum; uint8_t *src,*des,i; //ReadFlashData(EEL_BUF, 0x000F1000, sizeof(MotorStateEE)); pEE = (MotorStateEE_Type *)EEL_BUF; checksum = pEE->kbsoft1 + pEE->kbsoft2 + pEE->kbnow + pEE->zysoft1 + pEE->zysoft2 + pEE->zynow; if (pEE ->start == 0x55AA && pEE->stop == 0xAA55 && checksum == pEE->checksum) { des = &MotorStateEE; src = EEL_BUF; for (i = 0; i < sizeof(MotorStateEE); i++) { des[i] = src[i]; } } } uint16_t SupplyVoltage; void IGN_Voltage_Detect(void) { uint32_t adval; adval = getAdval(ADCH_BAT); SupplyVoltage = (adval*57*5)>>10; if (adval <= 305 ) { IGN_Voltage_error_count++; if (IGN_Voltage_error_count >= 250) { IGN_Voltage_error_count = 0; IGN_Voltage_error_flag = 1; } } else if (adval >= 592 )//16.5 { IGN_Voltage_error_count++; if (IGN_Voltage_error_count >= 250) { IGN_Voltage_error_count = 0; IGN_Voltage_error_flag = 2; } } else if (adval >= 323 && adval <= 574) { IGN_Voltage_error_count = 0; IGN_Voltage_error_flag = 0; } if (IGN_Voltage_error_flag != 0) { // TAU0_Channel1_ChangeDuty(0); } } void value_init(void) { R_TAU0_Channel0_Start(); R_TAU0_Channel2_Start(); R_ADC_Start(); R_ADC_Set_OperationOn(); R_TMR_RJ0_Start(); OUT_LINEN = 1; RLIN_Master_Init(); MotorValueInit(); } void Timer_Pro(void) { static unsigned int Timer_1ms_tick_count; Timer_1ms_tick_count++; Timer_1ms_flag=1; if(Timer_1ms_tick_count%5==0) { Timer_5ms_flag=1; } if(Timer_1ms_tick_count%10==0) { Timer_10ms_flag=1; } if(Timer_1ms_tick_count%20==0) { Timer_20ms_flag=1; } if(Timer_1ms_tick_count%50==0) { Timer_50ms_flag=1; } if(Timer_1ms_tick_count%1000==0) { Timer_1000ms_flag = 1; } if(Timer_1ms_tick_count>=5000) { Timer_1ms_tick_count=0; } } const uint8_t TfDutyTable[4] = {0,100,80,50};//{0,100,80,50}; const uint8_t JrDutyTable[4] = {0,100,80,50};//{0,100,80,50}; void TfJr_CtrlTask(void) { if (JrState < 4) { SetJrDuty(JrDutyTable[JrState]); } if (TfState < 4) { SetTfDuty(TfDutyTable[TfState]); } } void JrTask(void) { static uint16_t count; uint16_t duty; if (JrState == 0) { OUT_JR1 = 0; OUT_JR2 = 0; count = 0; } else { duty = TfDutyTable[JrState] * 10; } count++; if (count >= 1000) { count = 0; } if (count >= duty) { OUT_JR1 = 0; OUT_JR2 = 0; } else { OUT_JR1 = 1; OUT_JR2 = 1; } } #define LOCK_OUT_TIME 80 void Lock_Ctrl(void)//50ms { uint8_t key1,key2; static uint8_t count; key1 = GetKeyState(KEYID_K2); key2 = GetKeyState(KEYID_K1); if (key1 == 1 && key2 == 0) { if (count < LOCK_OUT_TIME) { count++; OUT_LOCK1 = 1; OUT_LOCK2 = 0; } else { OUT_LOCK1 = 0; OUT_LOCK2 = 0; } } else if (key1 == 0 && key2 == 1) { if (count < LOCK_OUT_TIME) { count++; OUT_LOCK1 = 0; OUT_LOCK2 = 1; } else { OUT_LOCK1 = 0; OUT_LOCK2 = 0; } } else { OUT_LOCK1 = 0; OUT_LOCK2 = 0; count = 0; } }