176 lines
3.4 KiB
C
176 lines
3.4 KiB
C
|
|
|||
|
#include "mcu_common.h"
|
|||
|
#include "uart_dev.h"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
uint8_t *mcuUartRxBuffer;
|
|||
|
uint16_t mcuUartRxBufferIndex = 0;
|
|||
|
uint8_t *J0_485RxBuffer;
|
|||
|
uint16_t J0_485RxBufferIndex = 0;
|
|||
|
uint8_t *J1_485RxBuffer;
|
|||
|
uint16_t J1_485RxBufferIndex = 0;
|
|||
|
uint8_t *J2_485RxBuffer;
|
|||
|
uint16_t J2_485RxBufferIndex = 0;
|
|||
|
uint8_t *J3_485RxBuffer;
|
|||
|
uint16_t J3_485RxBufferIndex = 0;
|
|||
|
uint8_t *J4_485RxBuffer;
|
|||
|
uint16_t J4_485RxBufferIndex = 0;
|
|||
|
uint8_t *J5_485RxBuffer;
|
|||
|
uint16_t J5_485RxBufferIndex = 0;
|
|||
|
uint8_t *J6_485RxBuffer;
|
|||
|
uint16_t J6_485RxBufferIndex = 0;
|
|||
|
uint8_t *J7_485RxBuffer;
|
|||
|
uint16_t J7_485RxBufferIndex = 0;
|
|||
|
uint8_t *J8_485RxBuffer;
|
|||
|
uint16_t J8_485RxBufferIndex = 0;
|
|||
|
uint8_t *J9_485RxBuffer;
|
|||
|
uint16_t J9_485RxBufferIndex = 0;
|
|||
|
uint8_t *su806RxBuffer;
|
|||
|
uint16_t su806RxBufferIndex = 0;
|
|||
|
uint8_t *loraRxBuffer;
|
|||
|
uint16_t loraRxBufferIndex = 0;
|
|||
|
|
|||
|
/* <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡<D2BB><D6A1><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD> */
|
|||
|
uint32_t mcuUartRxTime = 0;
|
|||
|
uint32_t su806UartRxTime = 0;
|
|||
|
|
|||
|
/* ״̬<D7B4><CCAC>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
uartStateMachine state = wait;
|
|||
|
|
|||
|
/* ֡<><D6A1><EFBFBD><EFBFBD> */
|
|||
|
uint16_t frameLength = 0;
|
|||
|
|
|||
|
#define hostMcuUartBufferLen 280
|
|||
|
#define slaveMcuUartBufferLen 1100
|
|||
|
#define su806BufferLen 1100
|
|||
|
#define rs485BufferLen 280
|
|||
|
#define loraBufferLen 280
|
|||
|
|
|||
|
uint8_t applyDataBuffer(void)
|
|||
|
{
|
|||
|
/* <20><>mcu */
|
|||
|
if (getMCU()) {
|
|||
|
mcuUartRxBuffer = pvPortMalloc(slaveMcuUartBufferLen);
|
|||
|
J1_485RxBuffer = pvPortMalloc(rs485BufferLen);
|
|||
|
J3_485RxBuffer = pvPortMalloc(rs485BufferLen);
|
|||
|
J5_485RxBuffer = pvPortMalloc(rs485BufferLen);
|
|||
|
J7_485RxBuffer = pvPortMalloc(rs485BufferLen);
|
|||
|
J8_485RxBuffer = pvPortMalloc(rs485BufferLen);
|
|||
|
J9_485RxBuffer = pvPortMalloc(rs485BufferLen);
|
|||
|
|
|||
|
}
|
|||
|
/* <20><>mcu */
|
|||
|
else {
|
|||
|
mcuUartRxBuffer = pvPortMalloc(hostMcuUartBufferLen);
|
|||
|
su806RxBuffer = pvPortMalloc(su806BufferLen);
|
|||
|
J0_485RxBuffer = pvPortMalloc(rs485BufferLen);
|
|||
|
J2_485RxBuffer = pvPortMalloc(rs485BufferLen);
|
|||
|
J4_485RxBuffer = pvPortMalloc(rs485BufferLen);
|
|||
|
J6_485RxBuffer = pvPortMalloc(rs485BufferLen);
|
|||
|
loraRxBuffer = pvPortMalloc(loraBufferLen);
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ĵIJ<EFBFBD>ֵ
|
|||
|
* @param lastTick <EFBFBD>ϴλ<EFBFBD>ȡ<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
* @retval
|
|||
|
*/
|
|||
|
uint32_t getTickDiff(uint32_t lastTick)
|
|||
|
{
|
|||
|
int64_t temp;
|
|||
|
temp = xTaskGetTickCount() - lastTick;
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD> */
|
|||
|
if (temp < 0) {
|
|||
|
temp = portMAX_DELAY - lastTick + xTaskGetTickCount();
|
|||
|
}
|
|||
|
|
|||
|
return temp;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ֵ
|
|||
|
* @param
|
|||
|
* @retval
|
|||
|
*/
|
|||
|
int baudConversionConfig(int baud)
|
|||
|
{
|
|||
|
if (baud == 4800) {
|
|||
|
return 0x0001;
|
|||
|
}
|
|||
|
else if (baud == 9600) {
|
|||
|
return 0x0002;
|
|||
|
}
|
|||
|
else if (baud == 19200) {
|
|||
|
return 0x0003;
|
|||
|
}
|
|||
|
else if (baud == 38400) {
|
|||
|
return 0x0004;
|
|||
|
}
|
|||
|
else if (baud == 57600) {
|
|||
|
return 0x0005;
|
|||
|
}
|
|||
|
else if (baud == 115200) {
|
|||
|
return 0x0006;
|
|||
|
}
|
|||
|
return 0x0002;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ݵ<EFBFBD>ֵת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param
|
|||
|
* @retval
|
|||
|
*/
|
|||
|
int configConversionBaud(int config)
|
|||
|
{
|
|||
|
if (config == 0x0001) {
|
|||
|
return 4800;
|
|||
|
}
|
|||
|
else if (config == 0x0002) {
|
|||
|
return 9600;
|
|||
|
}
|
|||
|
else if (config == 0x0003) {
|
|||
|
return 19200;
|
|||
|
}
|
|||
|
else if (config == 0x0004) {
|
|||
|
return 38400;
|
|||
|
}
|
|||
|
else if (config == 0x0005) {
|
|||
|
return 57600;
|
|||
|
}
|
|||
|
else if (config == 0x0006) {
|
|||
|
return 115200;
|
|||
|
}
|
|||
|
return 9600;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>modebus16crcУ<EFBFBD><EFBFBD>
|
|||
|
* @param
|
|||
|
* @retval
|
|||
|
*/
|
|||
|
uint16_t modebusCrc(uint8_t *arr_buff, uint8_t len)
|
|||
|
{
|
|||
|
unsigned short crc = 0xFFFF;
|
|||
|
unsigned char i, j;
|
|||
|
for ( j = 0; j < len; j++){
|
|||
|
crc=crc ^ *arr_buff++;
|
|||
|
for (i=0; i<8; i++){
|
|||
|
if((crc&0x0001) >0){
|
|||
|
crc=crc>>1;
|
|||
|
crc=crc^ 0xa001;
|
|||
|
}else{
|
|||
|
crc=crc>>1;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return crc;
|
|||
|
}
|
|||
|
|