⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 小区巡检系统,MSPF437,里面主要参考的内容为TI单片机的低功耗处理,仅供参考,不能用于商业.
💻 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 + -