455 lines
8.6 KiB
C
455 lines
8.6 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];
|
|||
|
|
|||
|
|
|||
|
void HardWare_Init(void)
|
|||
|
{
|
|||
|
//ʱ<><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
R_TAU0_Channel0_Start();
|
|||
|
|
|||
|
//LED<45><44>ʼ<EFBFBD><CABC>
|
|||
|
FanLED_Ctrl(0);
|
|||
|
HeatLED_Ctrl(0);
|
|||
|
AnmoLED_Ctrl(0);
|
|||
|
|
|||
|
//AD <20><>ʼ<EFBFBD><CABC>
|
|||
|
R_ADC_Start();
|
|||
|
R_ADC_Set_OperationOn();
|
|||
|
R_TAU0_Channel1_Start();
|
|||
|
|
|||
|
//UART<52><54>ʼ<EFBFBD><CABC>
|
|||
|
R_UART0_Start();
|
|||
|
R_UART0_Receive(g_rx_buf,1);
|
|||
|
}
|
|||
|
|
|||
|
void Variable_Init(void)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
static uint8_t heat_state=0,fan_state=0,motor_state=0;
|
|||
|
uint8_t g_tx_buf[7] = {0};
|
|||
|
void UART_Tx_Pro(uint8_t keyid)
|
|||
|
{
|
|||
|
uint8_t uart_buf[7] = {0x5a,0xa5,0x04,0x00,0x00,0x00,0x00};
|
|||
|
uint8_t i;
|
|||
|
|
|||
|
switch (keyid)
|
|||
|
{
|
|||
|
case KEY_KB_QIAN:
|
|||
|
uart_buf[5] = 0x12;
|
|||
|
break;
|
|||
|
case KEY_KB_HOU:
|
|||
|
uart_buf[5] = 0x14;
|
|||
|
break;
|
|||
|
case KEY_HG_QIAN:
|
|||
|
uart_buf[5] = 0x16;
|
|||
|
break;
|
|||
|
case KEY_HG_HOU:
|
|||
|
uart_buf[5] = 0x18;
|
|||
|
break;
|
|||
|
case KEY_TT_SHENG:
|
|||
|
uart_buf[5] = 0x22;
|
|||
|
break;
|
|||
|
case KEY_TT_JIANG:
|
|||
|
uart_buf[5] = 0x24;
|
|||
|
break;
|
|||
|
case KEY_AM:
|
|||
|
uart_buf[4] = motor_state?0x0a:0x0b;
|
|||
|
break;
|
|||
|
case KEY_FAN:
|
|||
|
uart_buf[3] = fan_state + 0x03;
|
|||
|
break;
|
|||
|
case KEY_HEAT:
|
|||
|
uart_buf[3] = (heat_state + 0x03) << 4;
|
|||
|
break;
|
|||
|
default:
|
|||
|
return;
|
|||
|
}
|
|||
|
//checksum
|
|||
|
uart_buf[6] = uart_buf[3] + uart_buf[5] + uart_buf[4];
|
|||
|
|
|||
|
for ( i = 0; i < 7; i++)
|
|||
|
{
|
|||
|
g_tx_buf[i] = uart_buf[i];
|
|||
|
}
|
|||
|
|
|||
|
R_UART0_Send(g_tx_buf,7);
|
|||
|
}
|
|||
|
|
|||
|
uint8_t datacount=0;
|
|||
|
uint8_t RxTimeoutCount=0;
|
|||
|
static uint8_t Rxdata[10];
|
|||
|
uint8_t RxFlag=0;
|
|||
|
void UART_Rx_Pro(uint8_t data)
|
|||
|
{
|
|||
|
static uint8_t last_data=0,datalen=0;
|
|||
|
if (last_data == 0x5A && data == 0xA5)
|
|||
|
{
|
|||
|
RxFlag = 1;
|
|||
|
datacount = 0;
|
|||
|
datalen=0;
|
|||
|
g_tx_buf[0] = 1;
|
|||
|
//R_UART0_Send(g_tx_buf,1);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (RxFlag == 1)
|
|||
|
{
|
|||
|
datalen = data;
|
|||
|
RxFlag = 2;
|
|||
|
g_tx_buf[0] = 2;
|
|||
|
//R_UART0_Send(g_tx_buf,1);
|
|||
|
}
|
|||
|
else if (RxFlag == 2)
|
|||
|
{
|
|||
|
Rxdata[datacount++] = data;
|
|||
|
if (datacount >= datalen)
|
|||
|
{
|
|||
|
MsgPro(datalen);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
last_data = data;
|
|||
|
RxTimeoutCount = 0;
|
|||
|
|
|||
|
}
|
|||
|
void MsgPro(uint8_t len)
|
|||
|
{
|
|||
|
uint8_t i;
|
|||
|
#ifdef USE_DAPING
|
|||
|
uint16_t crc,crcRx;
|
|||
|
if (len <= 7)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
crc = crc16_make(Rxdata,len-2);
|
|||
|
crcRx = Rxdata[len-1];
|
|||
|
crcRx <<= 8;
|
|||
|
crcRx |= Rxdata[len-2];
|
|||
|
if (crc == crcRx)
|
|||
|
{
|
|||
|
if (Rxdata[2] == 0x60)//<2F><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
switch (Rxdata[5])
|
|||
|
{
|
|||
|
case 1:
|
|||
|
heat_state = 0;
|
|||
|
fan_state = 0;
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
heat_state = 3;
|
|||
|
fan_state = 0;
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
heat_state = 2;
|
|||
|
fan_state = 0;
|
|||
|
break;
|
|||
|
case 4:
|
|||
|
heat_state = 1;
|
|||
|
fan_state = 0;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
else if(Rxdata[2] == 0x50)//fan
|
|||
|
{
|
|||
|
switch (Rxdata[5])
|
|||
|
{
|
|||
|
case 1:
|
|||
|
fan_state = 0;
|
|||
|
heat_state = 0;
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
fan_state = 3;
|
|||
|
heat_state = 0;
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
fan_state = 2;
|
|||
|
heat_state = 0;
|
|||
|
break;
|
|||
|
case 4:
|
|||
|
fan_state = 1;
|
|||
|
heat_state = 0;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
#else
|
|||
|
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>Э<EFBFBD><D0AD>
|
|||
|
uint8_t crc,crcRx;
|
|||
|
if (len <= 3)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
crc = 0;
|
|||
|
for(i=0;i<3;i++)
|
|||
|
{
|
|||
|
crc += Rxdata[i];
|
|||
|
}
|
|||
|
crcRx = Rxdata[3];
|
|||
|
|
|||
|
if (crc == crcRx)
|
|||
|
{
|
|||
|
|
|||
|
switch (Rxdata[0])
|
|||
|
{
|
|||
|
case 0x10:
|
|||
|
heat_state = 0;
|
|||
|
fan_state = 0;
|
|||
|
break;
|
|||
|
case 0x20:
|
|||
|
heat_state = 1;
|
|||
|
fan_state = 0;
|
|||
|
break;
|
|||
|
case 0x70:
|
|||
|
heat_state = 2;
|
|||
|
fan_state = 0;
|
|||
|
break;
|
|||
|
case 0x80:
|
|||
|
heat_state = 3;
|
|||
|
fan_state = 0;
|
|||
|
break;
|
|||
|
case 0x01:
|
|||
|
fan_state = 0;
|
|||
|
heat_state = 0;
|
|||
|
break;
|
|||
|
case 0x02:
|
|||
|
fan_state = 1;
|
|||
|
heat_state = 0;
|
|||
|
break;
|
|||
|
case 0x07:
|
|||
|
fan_state = 2;
|
|||
|
heat_state = 0;
|
|||
|
break;
|
|||
|
case 0x08:
|
|||
|
fan_state = 3;
|
|||
|
heat_state = 0;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
switch (Rxdata[1])
|
|||
|
{
|
|||
|
case 0x0C:
|
|||
|
motor_state = 1;
|
|||
|
break;
|
|||
|
case 0x0D:
|
|||
|
motor_state = 0;
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RxFlag = 0;
|
|||
|
RxTimeoutCount = 0;
|
|||
|
datacount = 0;
|
|||
|
}
|
|||
|
void keyLogic(uint8_t keyno)
|
|||
|
{
|
|||
|
switch (keyno)
|
|||
|
{
|
|||
|
case KEY_AM:
|
|||
|
if (motor_state == 0)
|
|||
|
{
|
|||
|
motor_state = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
motor_state = 0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case KEY_HEAT:
|
|||
|
heat_state++;
|
|||
|
if (heat_state > 3)
|
|||
|
{
|
|||
|
heat_state = 0;
|
|||
|
}
|
|||
|
fan_state = 0;
|
|||
|
|
|||
|
break;
|
|||
|
case KEY_FAN:
|
|||
|
fan_state++;
|
|||
|
if (fan_state > 3)
|
|||
|
{
|
|||
|
fan_state = 0;
|
|||
|
}
|
|||
|
heat_state = 0;
|
|||
|
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
UART_Tx_Pro(keyno);
|
|||
|
}
|
|||
|
|
|||
|
#define KEY_DELAY_TIME 6
|
|||
|
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;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
else if (keyval == 0)
|
|||
|
{
|
|||
|
keyflag[i] = 0;
|
|||
|
keydelay[i] = 0;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
for (i = 0; i < 6; i++)
|
|||
|
{
|
|||
|
if (keyflag[i] == 1)
|
|||
|
{
|
|||
|
keep_count[i]++;
|
|||
|
if (keep_count[i] > 20)
|
|||
|
{
|
|||
|
keep_count[i] = 0;
|
|||
|
keyLogic(i);
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
keep_count[i] = 0;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void LED_Ctrl(void)
|
|||
|
{
|
|||
|
FanLED_Ctrl(fan_state);
|
|||
|
HeatLED_Ctrl(heat_state);
|
|||
|
AnmoLED_Ctrl(motor_state);
|
|||
|
}
|
|||
|
|
|||
|
void AppTask(void)
|
|||
|
{
|
|||
|
static uint8_t ledno = 1,last = 0;
|
|||
|
if (TimeBase5msFlag == 1)
|
|||
|
{
|
|||
|
TimeBase5msFlag = 0;
|
|||
|
keyScan();
|
|||
|
if (RxFlag)
|
|||
|
{
|
|||
|
RxTimeoutCount++;
|
|||
|
if (RxTimeoutCount > 6)
|
|||
|
{
|
|||
|
RxFlag = 0;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
RxTimeoutCount = 0;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
if (TimeBase10msFlag == 1)
|
|||
|
{
|
|||
|
TimeBase10msFlag = 0;
|
|||
|
LED_Ctrl();
|
|||
|
}
|
|||
|
|
|||
|
if (TimeBase100msFlag == 1)
|
|||
|
{
|
|||
|
TimeBase100msFlag = 0;
|
|||
|
|
|||
|
R_WDT_Restart();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
if (TimeBase1000msFlag == 1)
|
|||
|
{
|
|||
|
TimeBase1000msFlag = 0;
|
|||
|
/*
|
|||
|
LED_Ctrl1LED(ledno,LED_ON);
|
|||
|
LED_Ctrl1LED(last,LED_OFF);
|
|||
|
last = ledno;
|
|||
|
ledno++;
|
|||
|
if (ledno > 9)
|
|||
|
{
|
|||
|
ledno = 1;
|
|||
|
}
|
|||
|
*/
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
#define POLYNOMINAL 0xA001
|
|||
|
#define PRESET_VALUE 0xFFFF
|
|||
|
|
|||
|
unsigned int crc16_make(unsigned char *Buffer, unsigned char size)
|
|||
|
{
|
|||
|
unsigned int Cur_CRC_Value;
|
|||
|
unsigned char i,j;
|
|||
|
|
|||
|
Cur_CRC_Value = PRESET_VALUE;
|
|||
|
|
|||
|
for(i = 0x00; i < size; i++)
|
|||
|
{
|
|||
|
Cur_CRC_Value ^= *Buffer++;
|
|||
|
|
|||
|
for(j = 0x00; j < 8; j++)
|
|||
|
{
|
|||
|
if(Cur_CRC_Value & 0x0001)
|
|||
|
{
|
|||
|
Cur_CRC_Value = (Cur_CRC_Value >> 1) ^ POLYNOMINAL;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Cur_CRC_Value = (Cur_CRC_Value >> 1);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return Cur_CRC_Value;
|
|||
|
|
|||
|
}
|