📄 uart.c
字号:
#include "uart.h"
#include "hal.h"
#include "sys_event.h"
#include "pub_func.h"
#include "protocol.h"
// 数据桢指针
unsigned char _frm_ptr=0;
// 数据桢buffer
_t_frm _frm_buf;
// wait time
unsigned char _wait_time=0;
void uart_start_to_rx(void)
{
UART_TX_EN_OUT&=~UART_TX_EN;
// Init Uart rx
UCTL0=SWRST;
UCTL0|=(CHAR+PENA+PEV);
UTCTL0=SSEL0;
U0BR0=0x03;
U0BR1=0x0;
UMCTL0=0x29;
ME2=URXE0;
UCTL0&=~SWRST;
IE2|=URXIE0;
}
void uart_start_to_tx(void)
{
UART_TX_EN_OUT|=UART_TX_EN;
// Init Uart rx
UCTL0=SWRST;
UCTL0|=(CHAR+PENA+PEV);
UTCTL0=SSEL0;
U0BR0=0x03;
U0BR1=0x0;
UMCTL0=0x29;
ME2=UTXE0;
UCTL0&=~SWRST;
IE2|=UTXIE0;
UTCTL0&=~TXEPT;
TXBUF0=_frm_buf.buffer[0];
while(_frm_ptr<=_frm_buf.len)
{
if(!(IE2&(URXIE0+UTXIE0)))
{
break;
}
//_clr_wdt();
}
}
#pragma vector=UART0RX_VECTOR
__interrupt void Uart0Rx (void)
{
_frm_buf.buffer[_frm_ptr++]=U0RXBUF;
_wait_time=2;
if(_frm_ptr==1)
{
_frm_buf.proc_id=find_item(_slvs_cmd,_frm_buf.buffer[0]);
if(_frm_buf.proc_id!=ERROR)
{
_frm_buf.len=_slvs_req_frm_len[_frm_buf.proc_id];
}
else
{
_frm_ptr=0;
}
}
else
{
if(_frm_ptr>=_frm_buf.len)
{
if(sys_do_checksum((unsigned char *)&_frm_buf.buffer[0],_frm_buf.len-1)==_frm_buf.buffer[_frm_buf.len-1])
{
_wait_time=0;
SYS_EVT_ADD(SYS_EVT_COMM);
_BIC_SR_IRQ(LPM3_bits);
return;
}
else
{
_frm_ptr=0;
}
}
}
}
#pragma vector=UART0TX_VECTOR
__interrupt void Uart0Tx(void)
{
while(!(UTCTL0&TXEPT));
UTCTL0&=~TXEPT;
if(_frm_ptr>=_frm_buf.len)
{
IE2&=~(URXIE0+UTXIE0);
}
else
{
TXBUF0=_frm_buf.buffer[_frm_ptr++];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -