查看: 3328|回复: 3

[已解决] K60 UART IDLE中断每发一个字节进一次

[复制链接]
  • TA的每日心情
    慵懒
    2019-1-10 10:41
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    2

    主题

    22

    帖子

    0

    注册会员

    Rank: 2

    积分
    97
    最后登录
    2020-3-4
    发表于 2018-7-25 13:41:11 | 显示全部楼层 |阅读模式

    宏定义
    #define BOARD_RADIO_UART_BASEADDR                UART4
    #define BOARD_RADIO_UART_BAUDRATE                38400
    #define BOARD_RADIO_UART_CLKSRC                        kCLOCK_CoreSysClk//kCLOCK_BusClk
    #define BOARD_RADIO_UART_CLK_FREQ                CLOCK_GetBusClkFreq()
    #define BOARD_RADIO_UART_IRQ                        UART4_RX_TX_IRQn
    #define BOARD_RADIO_UART_IRQ_HANDLER        UART4_RX_TX_IRQHandler


    引脚配置:
    void BOARD_InitPins(void)
    {
            CLOCK_EnableClock(kCLOCK_PortB);                                                //PORTB 时钟使能
            CLOCK_EnableClock(kCLOCK_PortC);
            /*Set Uart0 Pin Mux*/
            PORT_SetPinMux(PORTB, UART0_PIN_TX, kPORT_MuxAlt3);
            PORT_SetPinMux(PORTB, UART0_PIN_RX, kPORT_MuxAlt3);
            /*Set Uart4 Pin Mux*/
            PORT_SetPinMux(PORTC, UART4_PIN_TX, kPORT_MuxAlt3);
            PORT_SetPinMux(PORTC, UART4_PIN_RX, kPORT_MuxAlt3);
    }


    串口初始化:void BOARD_InitRadioUart4(void){
            uart_config_t uartconfig;
            UART_GetDefaultConfig(&uartconfig);                                                                                        //获取默认配置
            uartconfig.baudRate_Bps=BOARD_RADIO_UART_BAUDRATE;
            uartconfig.enableRx=true;
            uartconfig.enableTx=true;
            UART_Init(BOARD_RADIO_UART_BASEADDR,&uartconfig, BOARD_RADIO_UART_CLK_FREQ);
            BOARD_RADIO_UART_BASEADDR->C1|=UART_C1_ILT_MASK;                                //空闲状态计数设置
            UART_EnableInterrupts(BOARD_RADIO_UART_BASEADDR, kUART_RxDataRegFullInterruptEnable|kUART_RxOverrunInterruptEnable|kUART_IdleLineInterruptEnable);                                //使能UART4接收中断
            EnableIRQ(BOARD_RADIO_UART_IRQ);                                                                                                                                                                                                        //使能UART4的中断处理函数
    }


    中断处理函数
    void BOARD_RADIO_UART_IRQ_HANDLER(void)                                                                        //电台的通信波特率为38400
    {
             uint8_t tempdata;
             if(UART_GetStatusFlags(BOARD_RADIO_UART_BASEADDR)&kUART_IdleLineFlag)
             {

                     Get_GPS_Cache_FinishedFlag=true;                                                                                                //接受电台数据完成
                     GPS_Cache_RxByteCounte_temp=GPS_Cache_RxByteCounte;
                     GPS_Cache_RxByteCounte=0u;
                     if(UART_ClearStatusFlags(BOARD_RADIO_UART_BASEADDR,kUART_IdleLineFlag)==kStatus_Success)                //清中断标志位
                     {
                             PUTCHAR('a');
                     }
             }

             /*Receive data*/
             if(UART_GetStatusFlags(BOARD_RADIO_UART_BASEADDR)&(kUART_RxDataRegFullFlag|kUART_RxOverrunFlag))
             {
                     tempdata=UART_ReadByte(BOARD_RADIO_UART_BASEADDR);
                     PUTCHAR(tempdata);
                     if(Get_GPS_Cache_FinishedFlag==false)
                     {
                             PUTCHAR(tempdata);
                             GPS_Cache[GPS_Cache_RxByteCounte]=tempdata;
                             GPS_Cache_RxByteCounte++;
                     }
                     UART_ClearStatusFlags(BOARD_RADIO_UART_BASEADDR,kUART_RxOverrunFlag );
             }
    }


    实际测试过程中,通过电台发送过去的数据被k60串口4接收到之后总是每个字节产生一个空闲中断,并通过调试端口串口0输出a;
    怎么样才能实现每一帧结束才触发一次空闲中断呢?

    最佳答案

    执剑丶写春秋 发表于 2018-7-25 18:37 在K60 SDK2.0基础上修改的,实际测试环境一台发射电台通过串口转USB模块接PC,接收电台接K60串口4并通过串 ... 你先介绍一下代码修改的地方,以及测试的步骤,方便我这边可以复 ...
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24884
    最后登录
    2025-7-20
    发表于 2018-7-25 17:56:21 | 显示全部楼层
    首先分享一下逻辑分析仪或其他工具下抓取的测试过程中的数据量,还有请问你的代码是来自官方代码吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-1-10 10:41
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    2

    主题

    22

    帖子

    0

    注册会员

    Rank: 2

    积分
    97
    最后登录
    2020-3-4
     楼主| 发表于 2018-7-25 18:37:43 | 显示全部楼层
    在K60 SDK2.0基础上修改的,实际测试环境一台发射电台通过串口转USB模块接PC,接收电台接K60串口4并通过串口1打印输出信息;发射电台通过串口发送数据,Putty显示接受电台的调试信息;
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24884
    最后登录
    2025-7-20
    发表于 2018-8-2 14:00:17 | 显示全部楼层
    执剑丶写春秋 发表于 2018-7-25 18:37
    在K60 SDK2.0基础上修改的,实际测试环境一台发射电台通过串口转USB模块接PC,接收电台接K60串口4并通过串 ...

    你先介绍一下代码修改的地方,以及测试的步骤,方便我这边可以复现一下问题
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 04:00 , Processed in 0.092406 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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