#include "uart4.h" //#define FOSC 11059200L //系统频率 //#define BAUD4 115200 //串口波特率 void L0_uart4_init(void)//115200bps@11.0592MHz { #if(MainFre_11M == D_sys_MainFre) #if 0 S4CON = 0x50; //8位可变波特率 T4L = (65536 - (FOSC/4/BAUD4)); //设置波特率重装值 T4H = (65536 - (FOSC/4/BAUD4))>>8; T4T3M |= 0x20; //定时器4为1T模式 T4T3M |= 0x80; //定时器4开始计时 #else S4CON = 0x10; //8位数据,可变波特率 S4CON |= 0x40; //串口4选择定时器4为波特率发生器 T4T3M |= 0x20; //定时器4时钟为Fosc,即1T T4L = 0xE8; //设定定时初值 T4H = 0xFF; //设定定时初值 T4T3M |= 0x80; //启动定时器4 #endif #elif (MainFre_22M == D_sys_MainFre) //115200bps@22.1184MHz S4CON = 0x10; //8位数据,可变波特率 S4CON |= 0x40; //串口4选择定时器4为波特率发生器 T4T3M |= 0x20; //定时器4时钟为Fosc,即1T T4L = 0xD0; //设定定时初值 T4H = 0xFF; //设定定时初值 T4T3M |= 0x80; //启动定时器4 #endif } void L0_uart4_buf_init(void) { //定义发送缓冲区 ts_uart[uNum4].s.buf = ts_send_buf.s4; ts_uart[uNum4].s.bufmax = D_send4_max; ts_uart[uNum4].s.max = ts_uart[uNum4].s.now = 0; ts_uart[uNum4].s.ok = D_ready; //定义接收缓冲区 ts_uart[uNum4].r.buf = ts_recv_buf.r4; ts_uart[uNum4].r.bufmax = D_recv4_max; ts_uart[uNum4].r.head = 0; ts_uart[uNum4].r.ok = 0; ts_uart[uNum4].r.idle = 1; ts_uart[uNum4].r.overtime_t = 0; //串口协议解析专用字段 ts_uart[uNum4].tp_handler = L0_uartN_overtime_callback; ts_uart[uNum4].uartx = uNum4; //串口初始化 L0_uart4_init(); //打开串口中断 D_uart4_ES_INT(1); //默认处于接收状态 //D_UART4_485_RX() } /************************************************* UART 中断 *************************************************/ // #define D_SERVE_uart4 interrupt 18 // void INTERRUPT_uart4(void) D_SERVE_uart4// using 2 // { // //NOP(); NOP(); NOP(); // if(L0_uart4_IntRI()) //如果是U0接收中断 // { // L0_uart4_IntRIClear(); //清除接收中断标志 // ts_uart[uNum4].r.reg = S4BUF; //获取当前数据 // L0_uartN_s2b(uNum4); //接收数据至缓冲区 // } // if(L0_uart4_IntTI()) //如果是U0发送中断 // { // L0_uart4_IntTIClear(); //清除发送中断标志 // if(ts_uart[uNum4].s.max != ts_uart[uNum4].s.now) // { // S4BUF = ts_uart[uNum4].s.p[ts_uart[uNum4].s.now]; // ts_uart[uNum4].s.now ++; // } // else // { // ts_uart[uNum4].s.ok = D_ready; // ts_uart[uNum4].s.max = 0; // ts_uart[uNum4].s.now = 0;//可以发送下一个数据 // D_UART4_485_RX() //切换到接收状态 // } // } // //NOP(); NOP(); NOP(); // }