|
|
@ -55,13 +55,15 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面 |
|
|
|
----------------------------------------------------------------------------------------- |
|
|
|
********************************************************************************/ |
|
|
|
#include "uart2.h" |
|
|
|
#include "../app/common.h" |
|
|
|
#include "../tpc/debug.h" |
|
|
|
|
|
|
|
//发送缓冲区
|
|
|
|
static volatile Ts_uart_send_buf idata ts_uart_send_buf; |
|
|
|
//接收缓冲区最多存放16个字符,这个值尽量小,但要大于实际处理协议的缓冲区大小
|
|
|
|
static U8 uart2_recv_buf[16]; |
|
|
|
#define RECV_BUF_SIZE 16 |
|
|
|
static U8 uart2_recv_buf[RECV_BUF_SIZE]; |
|
|
|
Ts_uart_recv_buf ts_uart2_recv_buf; |
|
|
|
int g_uart2_recv_num = 0; |
|
|
|
|
|
|
|
void L0_uart2_init(void) |
|
|
|
{ |
|
|
@ -72,29 +74,38 @@ void L0_uart2_init(void) |
|
|
|
T2H = 0xFF; //设定定时初值
|
|
|
|
AUXR |= 0x10; //启动定时器2
|
|
|
|
|
|
|
|
#elif (MainFre_22M == D_sys_MainFre) //115200bps@22.1184MHz
|
|
|
|
#elif (MainFre_22M == D_sys_MainFre) //9600bps@22.1184MHz
|
|
|
|
S2CON = 0x50; //8位数据,可变波特率
|
|
|
|
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
|
|
|
|
T2L = 0xD0; //设定定时初值
|
|
|
|
T2H = 0xFF; //设定定时初值
|
|
|
|
AUXR |= 0x10; //启动定时器2
|
|
|
|
AUXR &= 0xFB; //定时器时钟12T模式
|
|
|
|
T2L = 0xD0; //设置定时初始值
|
|
|
|
T2H = 0xFF; //设置定时初始值
|
|
|
|
AUXR |= 0x10; //定时器2开始计时
|
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
void L0_uart2_buf_init(void) |
|
|
|
{ |
|
|
|
//初始化协议发送缓冲区
|
|
|
|
ts_uart[uNum2].p = &ts_uart_send_buf; |
|
|
|
ts_uart[uNum2].p->now = 0; |
|
|
|
ts_uart[uNum2].p->ok = D_ready; |
|
|
|
ts_uart[uNum2].t = &ts_uart_recv_buf; |
|
|
|
|
|
|
|
//初始化协议接收缓冲区
|
|
|
|
ts_uart[uNum2].t = &ts_uart2_recv_buf; |
|
|
|
ts_uart[uNum2].t->buf = uart2_recv_buf; |
|
|
|
ts_uart[uNum2].t->head_0 = D_CMD_Filter1_ff; |
|
|
|
ts_uart[uNum2].t->head_1 = D_CMD_Filter2_fe; |
|
|
|
ts_uart[uNum2].t->head = 0; |
|
|
|
ts_uart[uNum2].t->ok = 0; |
|
|
|
ts_uart[uNum2].tp_handler = L1_s2b_PH3; |
|
|
|
|
|
|
|
//串口协议解析专用字段
|
|
|
|
ts_uart[uNum2].t->head_0 = 0x60; |
|
|
|
ts_uart[uNum2].t->maxnum = RECV_BUF_SIZE; |
|
|
|
ts_uart[uNum2].tp_handler = L1_s2b_nfc; |
|
|
|
|
|
|
|
//串口初始化
|
|
|
|
L0_uart2_init(); |
|
|
|
D_uart2_ES_INT(1); //打开串口中断
|
|
|
|
|
|
|
|
//打开串口中断
|
|
|
|
D_uart2_ES_INT(1); |
|
|
|
|
|
|
|
#if (D_UART2_485_TYPE != TYPE_485_NONE) |
|
|
|
D_UART2_485_RX() //默认处于接收状态
|
|
|
@ -115,12 +126,14 @@ UART 中断 |
|
|
|
#define D_SERVE_uart2 interrupt 8 |
|
|
|
void INTERRUPT_uart2(void) D_SERVE_uart2// using 2
|
|
|
|
{ |
|
|
|
//NOP(); NOP(); NOP();
|
|
|
|
NOP(); NOP(); NOP(); |
|
|
|
if(L0_uart2_IntRI()) //如果是U2接收中断
|
|
|
|
{ |
|
|
|
L0_uart2_IntRIClear(); //清除接收中断标志
|
|
|
|
ts_uart[uNum2].t->reg = L0_uartN_get(uNum2); |
|
|
|
ts_uart[uNum2].tp_handler(ts_uart[uNum2].t)); |
|
|
|
if(ts_uart[uNum2].tp_handler != NULL){ |
|
|
|
ts_uart[uNum2].tp_handler(ts_uart[uNum2].t); |
|
|
|
} |
|
|
|
} |
|
|
|
if(L0_uart2_IntTI()) //如果是U0发送中断
|
|
|
|
{ |
|
|
@ -138,10 +151,9 @@ void INTERRUPT_uart2(void) D_SERVE_uart2// using 2 |
|
|
|
#if (D_UART2_485_TYPE != TYPE_485_NONE) |
|
|
|
D_UART2_485_RX() //切换到接收状态
|
|
|
|
#endif |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
//NOP(); NOP(); NOP();
|
|
|
|
NOP(); NOP(); NOP(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|