#include "uart2.h" #include "uartx.h" //TS_Handle_PH3 s_uart2_tcp_rec; void L0_uart2_init(void) { #if (MainFre_11M == D_sys_MainFre) // 115200bps@11.0592MHz S2CON = 0x50; AUXR |= 0x04; T2L = 0xE8; T2H = 0xFF; AUXR |= 0x10; #elif (MainFre_22M == D_sys_MainFre) //115200bps@22.1184MHz S2CON = 0x50; //8???,????? AUXR |= 0x04; //?????1T?? T2L = 0xD0; //??????? T2H = 0xFF; //??????? AUXR |= 0x10; //???2???? #endif } void L0_uart2_buf_init(void) { //定义发送缓冲区 ts_uart[uNum2].s.buf = ts_send_buf.s2; ts_uart[uNum2].s.bufmax = D_send2_max; ts_uart[uNum2].s.max = ts_uart[uNum2].s.now = 0; ts_uart[uNum2].s.ok = D_ready; //定义接收缓冲区 ts_uart[uNum2].r.buf = ts_recv_buf.r2; ts_uart[uNum2].r.bufmax = D_recv2_max; ts_uart[uNum2].r.head = 0; ts_uart[uNum2].r.ok = 0; ts_uart[uNum2].r.idle = 1; ts_uart[uNum2].r.overtime_t = 0; //定义接收处理协议 ts_uart[uNum2].tp_handler = L0_uartN_overtime_callback; ts_uart[uNum2].uartx = uNum2; //串口初始化 L0_uart2_init(); //打开串口中断 D_uart2_ES_INT(1); //默认处于接收状态 // D_UART2_485_RX() } /************************************************* UART 中断 *************************************************/ #define D_SERVE_uart2 interrupt 8 void INTERRUPT_uart2(void) D_SERVE_uart2 // using 2 { NOP();NOP();NOP(); if (L0_uart2_IntRI()) //如果是U2接收中断 { L0_uart2_IntRIClear(); //清除接收中断标志 ts_uart[uNum2].r.reg = S2BUF; //获取当前数据 L0_uartN_s2b(uNum2); //接收数据至缓冲区 } if (L0_uart2_IntTI()) //如果是U0发送中断 { L0_uart2_IntTIClear(); //清除发送中断标� �� if (ts_uart[uNum2].s.max != ts_uart[uNum2].s.now) { S2BUF = ts_uart[uNum2].s.p[ts_uart[uNum2].s.now]; ts_uart[uNum2].s.now++; } else { ts_uart[uNum2].s.ok = D_ready; ts_uart[uNum2].s.max = 0; ts_uart[uNum2].s.now = 0; //可以发送下一个数据 // D_UART2_485_RX() //切换到接收状态 } } NOP();NOP();NOP(); }