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

📄 main.c

📁 LM3S系列UART发送FIFO触发中断
💻 C
字号:
#include  "systemInit.h"
#include  <uart.h>


//  UART初始化
void uartInit(void)
{
    SysCtlPeriEnable(SYSCTL_PERIPH_UART2);                  //  使能UART模块
    SysCtlPeriEnable(SYSCTL_PERIPH_GPIOG);                  //  使能RX/TX所在的GPIO端口

    GPIOPinTypeUART(GPIO_PORTG_BASE,                        //  配置RX/TX所在管脚为
                    GPIO_PIN_0 | GPIO_PIN_1);               //  UART收发功能

    UARTConfigSet(UART2_BASE,                               //  配置UART端口
                  9600,                                     //  波特率:9600
                  UART_CONFIG_WLEN_8 |                      //  数据位:8
                  UART_CONFIG_STOP_ONE |                    //  停止位:1
                  UART_CONFIG_PAR_NONE);                    //  校验位:无

    UARTFIFOLevelSet(UART2_BASE,                            //  设置收发FIFO中断触发深度
                     UART_FIFO_TX2_8,                       //  发送FIFO为2/8深度(4B)
                     UART_FIFO_RX6_8);                      //  接收FIFO为6/8深度(12B)

    UARTIntEnable(UART2_BASE, UART_INT_TX);                 //  使能发送中断
    IntEnable(INT_UART2);                                   //  使能UART总中断
    IntMasterEnable();                                      //  使能处理器中断

    UARTEnable(UART2_BASE);                                 //  使能UART端口
}


//  通过UART发送字符串
void uartPuts(const char *s)
{
    while (*s != '\0')
    {
        UARTCharPut(UART2_BASE, *(s++));
    }
}


//  定义发送中断标志,如果出现发送中断,则置位TxIntFlag
volatile tBoolean TxIntFlag = false;


//  主函数(程序入口)
int main(void)
{
    jtagWait();                                             //  防止JTAG失效,重要!
    clockInit();                                            //  时钟初始化:晶振,6MHz
    uartInit();                                             //  UART初始化

    for (;;)
    {
        uartPuts("0123456789ABCDEF");                       //  一次性填满FIFO
        SysCtlDelay(11 * (TheSysClock / 3000));             //  延迟11ms以内不会产生中断
                                                            //  延迟12ms以上就会产生中断

        if (TxIntFlag)
        {
            TxIntFlag = false;                              //  在这里设置观察断点
        }
    }
}


//  UART2中断服务函数
void UART2_ISR(void)
{
    unsigned long ulStatus;

    ulStatus = UARTIntStatus(UART2_BASE, true);             //  读取当前中断状态
    UARTIntClear(UART2_BASE, ulStatus);                     //  清除中断状态

    if (ulStatus & UART_INT_TX)                             //  若是发送中断
    {
        TxIntFlag = true;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -