M12-04P/appTask.c
2023-06-02 09:45:10 +08:00

238 lines
4.4 KiB
C

#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"
uint8_t g_rx_buf[3];
extern uint16_t g_AdVal[3];
uint8_t flagMotorStart;
uint8_t MotorState;
uint16_t MotorCounter;
uint8_t MotorDir;
void HardWare_Init(void)
{
//时基初始化
R_TAU0_Channel0_Start();
//LED初始化
//AD 初始化
R_ADC_Start();
R_ADC_Set_OperationOn();
R_TAU0_Channel1_Start();
//UART初始化
MotorCtrl(MOTOR_NOACT);
}
void Variable_Init(void)
{
MotorState = 0;
MotorDir = MOTOR_ZZ;
}
void keyLogic(uint8_t keyno)
{
switch (keyno)
{
case KEY_RESET:
MotorStart();
break;
default:
break;
}
}
void keyLogicRelease(uint8_t keyno)
{
switch (keyno)
{
case KEY_RESET:
if (MotorState != 0)
{
MotorStart();
}
break;
default:
break;
}
}
#define KEY_DELAY_TIME 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;
for (i = 0; i < KEY_NUM; i++)
{
keyval = GetKeyState(i);
if (keyval == 1 && keyflag[i] == 0)
{
keydelay[i]++;
if (keydelay[i] > KEY_DELAY_TIME)//30ms
{
keyflag[i] = 1;
keydelay[i] = KEY_DELAY_TIME;
//keyLogic(i);
keep_count[i] = 0;
MotorCtrl(MotorDir);
}
}
else if (keyval == 0)
{
MotorCtrl(MOTOR_NOACT);
if (keyflag[i] == 1)
{
if (MotorDir == MOTOR_FZ)
{
MotorDir = MOTOR_ZZ;
}
else
{
MotorDir = MOTOR_FZ;
}
}
keyflag[i] = 0;
keydelay[i] = 0;
}
}
}
void AppTask(void)
{
static uint8_t ledno = 1,last = 0;
if (TimeBase5msFlag == 1)
{
TimeBase5msFlag = 0;
keyScan();
}
if (TimeBase10msFlag == 1)
{
TimeBase10msFlag = 0;
//MotorTask();
}
if (TimeBase100msFlag == 1)
{
TimeBase100msFlag = 0;
R_WDT_Restart();
}
if (TimeBase1000msFlag == 1)
{
TimeBase1000msFlag = 0;
}
}
#define MOTOR_IDLE 0
#define MOTOR_START 1
#define MOTOR_STEP1 2
#define MOTOR_STEP2 3
#define MOTOR_STEP3 4
#define MOTOR_STOP 5
void MotorStart(void)
{
flagMotorStart = 1;
}
const uint16_t MotorTimeArr[3] = {3000,3000,3000};
#define MOTOR_TASK_TIMEBASE 10
void MotorTask(void)//10ms
{
switch (MotorState)
{
case MOTOR_IDLE:
if (flagMotorStart == 1)
{
flagMotorStart = 0;
MotorState = MOTOR_START;
}
break;
case MOTOR_START:
MotorCounter = 0;
MotorState = MOTOR_STEP1;
break;
case MOTOR_STEP1:
MotorCounter++;
if (MotorCounter*MOTOR_TASK_TIMEBASE > MotorTimeArr[0])
{
MotorCounter = 0;
MotorState++;
}
MotorCtrl(MOTOR_ZZ);
if (flagMotorStart == 1)
{
flagMotorStart = 0;
MotorState = MOTOR_STEP3;
}
break;
case MOTOR_STEP2:
MotorCounter++;
if (MotorCounter*MOTOR_TASK_TIMEBASE > MotorTimeArr[1])
{
MotorCounter = 0;
MotorState++;
}
MotorCtrl(MOTOR_NOACT);
if (flagMotorStart == 1)
{
flagMotorStart = 0;
MotorState = MOTOR_STEP3;
}
break;
case MOTOR_STEP3:
MotorCounter++;
if (MotorCounter*MOTOR_TASK_TIMEBASE > MotorTimeArr[2])
{
MotorCounter = 0;
MotorState++;
}
MotorCtrl(MOTOR_FZ);
/*
if (flagMotorStart == 1)
{
flagMotorStart = 0;
MotorState = MOTOR_STOP;
}
*/
break;
case MOTOR_STOP:
MotorCtrl(MOTOR_NOACT);
MotorState = MOTOR_IDLE;
flagMotorStart = 0;
break;
default:
MotorState = MOTOR_STOP;
break;
}
}