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.

85 lines
2.0 KiB

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