#include "r_cg_macrodriver.h" #include "appTask.h" #include "event.h" #include "r_cg_port.h" #include "r_cg_timer.h" #include "r_cg_wdt.h" #include "hwCtrl.h" #include "r_cg_adc.h" #include "r_cg_serial.h" #include "PINdef.h" #include "MotorCtrl.h" extern uint16_t g_AdVal[3]; uint8_t txbuf[10]; void TxTask(void); void HardWare_Init(void) { //时基初始化 R_TAU0_Channel0_Start(); //UART初始化 R_UART0_Start(); //AD 初始化 R_ADC_Start(); R_ADC_Set_OperationOn(); R_TAU0_Channel1_Start(); //电机初始化 MotorValueInit(); MOTOR1Ctrl(ACT_NOACT); } void Variable_Init(void) { txbuf[0] = 0xaa; txbuf[1] = 0x55; } #define KEY1 0 #define KEY2 1 void keyLogic(uint8_t keyno) { switch (keyno) { case KEY1: setMotorState(0,ACT_XQ); break; case KEY2: setMotorState(0,ACT_XH); break; default: break; } } void keyLogicRelease(uint8_t keyno) { switch (keyno) { case KEY1: setMotorState(0,ACT_NOACT); break; case KEY2: setMotorState(0,ACT_NOACT); break; default: break; } } #define KEY_DELAY_TIME_30ms 10 #define KEY_DELAY_TIME_200ms 60 void keyScan(void)//5ms { static uint16_t keydelay[9]={0,0,0,0,0,0,0,0,0}; static uint8_t keyflag[9]={0,0,0,0,0,0,0,0,0}; static uint8_t keep_count[9]={0,0,0,0,0,0,0,0,0}; uint8_t keyval,i; //向后 keyval = GetIOState(SIGID_KEY1); if (keyval == 1 )//&& keyflag[KEY1] == 0 { keydelay[KEY1]++; if (keydelay[KEY1] > KEY_DELAY_TIME_30ms)//30ms { keyflag[KEY1] = 1; } if (keydelay[KEY1] > KEY_DELAY_TIME_200ms)//200ms { keyflag[KEY1] = 1; keydelay[KEY1] = KEY_DELAY_TIME_200ms; setMotorState(0,ACT_XQ); } } else if (keyval == 0) { if (keyflag[KEY1] == 1 && keydelay[KEY1] < KEY_DELAY_TIME_200ms) { //自动 setMotorAutoXH(); } if (keyflag[KEY1] == 1 && keydelay[KEY1] >= KEY_DELAY_TIME_200ms) { setMotorState(0,ACT_NOACT); } keyflag[KEY1] = 0; keydelay[KEY1] = 0; } //向前 keyval = GetIOState(SIGID_KEY2); if (keyval == 1 )//&& keyflag[KEY2] == 0 { keydelay[KEY2]++; if (keydelay[KEY2] > KEY_DELAY_TIME_30ms)//30ms { keyflag[KEY2] = 1; } if (keydelay[KEY2] > KEY_DELAY_TIME_200ms)//200ms { keyflag[KEY2] = 1; keydelay[KEY2] = KEY_DELAY_TIME_200ms; setMotorState(0,ACT_XH); } } else if (keyval == 0) { if (keyflag[KEY2] == 1 && keydelay[KEY2] < KEY_DELAY_TIME_200ms) { //自动 setMotorAutoXQ(); } if (keyflag[KEY2] == 1 && keydelay[KEY2] >= KEY_DELAY_TIME_200ms) { setMotorState(0,ACT_NOACT); } keyflag[KEY2] = 0; keydelay[KEY2] = 0; } } void AppTask(void) { static uint8_t ledno = 1,last = 0; if (TimeBase1msFlag == 1) { TimeBase1msFlag = 0; HallDetecte(); CurrentDetecte(); } if (TimeBase5msFlag == 1) { TimeBase5msFlag = 0; keyScan(); } if (TimeBase10msFlag == 1) { TimeBase10msFlag = 0; MotorCtrl(); } if (TimeBase100msFlag == 1) { TimeBase100msFlag = 0; TxTask(); R_WDT_Restart(); } if (TimeBase1000msFlag == 1) { TimeBase1000msFlag = 0; } } void TxTask(void) { uint16_t temp; //txbuf[2] = GetIOState(SIGID_KEY1); //txbuf[3] = GetIOState(SIGID_KEY2); temp = getMotorLoc(); txbuf[2] = temp>>8; txbuf[3] = temp&0xff; txbuf[4] = GetIOState(SIGID_HALL1); R_UART0_Send(txbuf,5); }