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.
79 lines
2.0 KiB
79 lines
2.0 KiB
4 months ago
|
|
||
|
#include "uart0.h"
|
||
|
#include "uartx.h"
|
||
|
|
||
|
|
||
|
void L0_uart0_init(void)
|
||
|
{
|
||
|
U16 val = D_BRT_COUNT(12, D_sys_MainFre, D_uart0_BRT);
|
||
|
SCON = 0x50; // 8位数据,可变波特率
|
||
|
AUXR &= 0xBF; //定时器时钟12T模式
|
||
|
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
|
||
|
TMOD &= 0x0F; //设置定时器模式
|
||
|
TL1 = val; //设置定时初始值
|
||
|
TH1 = val >> 8; //设置定时初始值
|
||
|
ET1 = 0; //禁止定时器中断
|
||
|
TR1 = 1; //定时器1开始计时
|
||
|
}
|
||
|
|
||
|
void L0_uart0_buf_init(void)
|
||
|
{
|
||
|
//定义发送缓冲区
|
||
|
ts_uart[uNum0].s.buf = ts_send_buf.s1;
|
||
|
ts_uart[uNum0].s.bufmax = D_send1_max;
|
||
|
ts_uart[uNum0].s.max = ts_uart[uNum0].s.now = 0;
|
||
|
ts_uart[uNum0].s.ok = D_ready;
|
||
|
|
||
|
//定义接收缓冲区
|
||
|
ts_uart[uNum0].r.buf = ts_recv_buf.r1;
|
||
|
ts_uart[uNum0].r.bufmax = D_recv1_max;
|
||
|
ts_uart[uNum0].r.head = 0;
|
||
|
ts_uart[uNum0].r.ok = 0;
|
||
|
ts_uart[uNum0].r.idle = 1;
|
||
|
ts_uart[uNum0].r.overtime_t = 0;
|
||
|
|
||
|
//定义接收处理协议
|
||
|
ts_uart[uNum0].tp_handler = L0_uartN_overtime_callback;
|
||
|
ts_uart[uNum0].uartx = uNum0;
|
||
|
|
||
|
//串口初始化
|
||
|
L0_uart0_init();
|
||
|
|
||
|
//打开串口中断
|
||
|
D_uart0_ES_INT(1);
|
||
|
|
||
|
//默认处于接收状态
|
||
|
D_UART0_485_RX()
|
||
|
}
|
||
|
|
||
|
/*************************************************
|
||
|
UART 中断
|
||
|
*************************************************/
|
||
|
void INTERRUPT_UART(void) D_SERVE_UART
|
||
|
{
|
||
|
// NOP(); NOP(); NOP();
|
||
|
if (L0_uart0_IntRI()) //如果是U0接收中断
|
||
|
{
|
||
|
L0_uart0_IntRIClear(); //清除接收中断标志
|
||
|
ts_uart[uNum0].r.reg = SBUF; //获取当前数据
|
||
|
L0_uartN_s2b(uNum0); //接收数据至缓冲区
|
||
|
}
|
||
|
if (L0_uart0_IntTI()) //如果是U0发送中断
|
||
|
{
|
||
|
L0_uart0_IntTIClear(); //清除发送中断标志
|
||
|
if (ts_uart[uNum0].s.max > ts_uart[uNum0].s.now)
|
||
|
{
|
||
|
SBUF = ts_uart[uNum0].s.p[ts_uart[uNum0].s.now];
|
||
|
ts_uart[uNum0].s.now++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ts_uart[uNum0].s.ok = D_ready;
|
||
|
ts_uart[uNum0].s.max = 0;
|
||
|
ts_uart[uNum0].s.now = 0; //可以发送下一个数据
|
||
|
// D_UART0_485_RX() //切换到接收状态
|
||
|
}
|
||
|
}
|
||
|
// NOP(); NOP(); NOP();
|
||
|
}
|