You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

98 lines
2.7 KiB

#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 = NULL;
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();
// }