查看: 7124|回复: 4

[求助] RT1052 发送中断异常

[复制链接]

该用户从未签到

1

主题

1

帖子

0

新手上路

Rank: 1

积分
8
最后登录
2019-9-11
发表于 2019-9-11 11:13:37 | 显示全部楼层 |阅读模式
RT1052 发送中断打开后,就一直停留在发送中断里,别的程序跟本不运行,搞了两天了,一直没解决,请指点,谢谢
接收中断很正常
程序跑的是 UCOS 3

//初始化 bound:波特率
void LPUART5_Init(u32 bound)
{       
        u32 freq=0;                                                        //串口的时钟源频率
       
        CLOCK_EnableClock(kCLOCK_Lpuart5);        //使能LPUART5时钟
       
        CLOCK_SetMux(kCLOCK_UartMux,0);         //设置UART时钟源为PLL3 80Mhz,PLL3/6=480/6=80MHz
    CLOCK_SetDiv(kCLOCK_UartDiv,0);         //设置UART时钟1分频,即UART时钟为80Mhz
       
        //LPUART5所使用的IO功能配置,即:从ALT0~ALT7选择合适的功能。
        IOMUXC_SetPinMux(IOMUXC_GPIO_B1_12_LPUART5_TX,0U);        //GPIO_AD_B0_12设置为LPUART5_TX
        IOMUXC_SetPinMux(IOMUXC_GPIO_B1_13_LPUART5_RX,0U);        //GPIO_AD_B0_13设置为LPUART5_RX

        //配置IO引脚GPIO_AD_B0_12和GPIO_AD_B0_13的功能
        //低转换速度,驱动能力为R0/6,速度为100Mhz,关闭开路功能,使能pull/keepr
        //选择keeper功能,下拉100K Ohm,关闭Hyst
        IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_12_LPUART5_TX,0x10B0u);
        IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_13_LPUART5_RX,0x10B0u);

        freq=LPUART_SrcFreqGet();       
       
        LPUART_GetDefaultConfig(&lpuart5_config);                                 //先设置为默认配置,后面在根据实际情况配置
       
        //初始化NXP官方提供的debug console,此函数会重新初始化LPUART5,但是我们后面会
        //重新显示的初始化一次LPUART5,DbgConsole_Init()主要是给那些想要使用NXP官方
        //调试功能的开发者使用的,不需要使用的话就可以将下面代码注释掉
        DbgConsole_Init(BOARD_DEBUG_UART_BASEADDR,bound,BOARD_DEBUG_UART_TYPE,freq);
       
        lpuart5_config.baudRate_Bps=bound;                                                //波特率
        lpuart5_config.dataBitsCount=kLPUART_EightDataBits;                //8位
        lpuart5_config.stopBitCount=kLPUART_OneStopBit;                        //1位停止位
        lpuart5_config.parityMode=kLPUART_ParityDisabled;                //无奇偶校验
        lpuart5_config.enableRx=true;                                                        //使能接收
        lpuart5_config.enableTx=true;                                                        //使能发送
       
        LPUART_Init(LPUART5,&lpuart5_config,freq);                                //初始化LPUART5


        //LPUART中断设置
        LPUART_EnableInterrupts(LPUART5,
          kLPUART_RxDataRegFullInterruptEnable|kLPUART_TransmissionCompleteInterruptEnable
          ); //使能接收与发送中断
          RT1052_NVIC_SetPriority(LPUART5_IRQn,5,0);                                //抢占优先级5,子优先级0
          EnableIRQ(LPUART5_IRQn);                                    //使能LPUART5中断
}       

//中断入口
void LPUART5_IRQHandler(void)
{
        u8 res=0;
       
        OSIntEnter();
        if((LPUART5->STAT)&kLPUART_RxDataRegFullFlag) //接收中断
        {
                LPUART_ClearStatusFlags(LPUART5,kLPUART_RxDataRegFullFlag);                               
                rxd_fun(LPUART5->DATA);//读取数据
        }
        if((LPUART5->STAT)&kLPUART_TransmissionCompleteFlag) //发送中断
        {
                LPUART_ClearStatusFlags(LPUART5,kLPUART_TransmissionCompleteFlag);
                //LPUART5->DATA;                                        //读取数据
                //txd_fun();
        }
        OSIntExit();
        __DSB();                                //数据同步屏蔽指令
}

回复

使用道具 举报

  • TA的每日心情

    2021-1-22 17:33
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    30

    主题

    85

    帖子

    0

    高级会员

    Rank: 4

    积分
    645
    最后登录
    2025-6-10
    发表于 2019-9-12 09:04:08 | 显示全部楼层
    我之前弄modbus时也遇到这个问题,怎么都清除不了发送空闲中断,顶
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    723

    主题

    6382

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25466
    最后登录
    2025-9-4
    发表于 2019-9-16 17:28:52 | 显示全部楼层
    你的意思是 LPUART_ClearStatusFlags(LPUART5,kLPUART_TransmissionCompleteFlag);无法清除中断标志位吗?
    建议可以现在没有RTOS的情况下调试,减少RTOS的干扰
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    25
    最后登录
    2024-4-23
    发表于 2023-12-10 14:36:07 | 显示全部楼层
    我也遇到这个问题打开发送中断后,kLPUART_TransmissionCompleteInterruptEnable后
    一直进中断,无奈只能发送时打开中断,发送完毕关闭中断
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    注册会员

    Rank: 2

    积分
    123
    最后登录
    2023-12-27
    发表于 2023-12-27 14:19:46 | 显示全部楼层
    eefocus_3722659 发表于 2023-12-10 14:36
    我也遇到这个问题打开发送中断后,kLPUART_TransmissionCompleteInterruptEnable后
    一直进中断,无奈只能发送 ...

    我在 freeModbus 需要做這樣的操作

    void vMBPortSerialEnable(BOOL xRxEnable, BOOL xTxEnable)
    {
    ...
            if (xTxEnable) {
                    LPUART_EnableTx(RS485_LPUART, true);
                    LPUART_EnableInterrupts(RS485_LPUART, kLPUART_TransmissionCompleteInterruptEnable);
                    //DBG_MSG("Tx: Enable!\n");
            }
            else {
                    LPUART_DisableInterrupts(RS485_LPUART, kLPUART_TransmissionCompleteInterruptEnable);
                    LPUART_EnableTx(RS485_LPUART, false);
                    //DBG_MSG("Rx: enable!\n");
            }
       ...
    }
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-8 13:36 , Processed in 0.088180 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表