查看: 5180|回复: 6

[求助] i.mx RT1061 PIT的Channel1打开后无法进入中断

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

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    15

    帖子

    0

    注册会员

    Rank: 2

    积分
    177
    最后登录
    2020-4-7
    发表于 2019-10-8 16:36:42 | 显示全部楼层 |阅读模式
    RT1061的PIT定时器模块有4个独立的通道(ch0,ch1,ch2,ch3),可作为独立的4个定时器来使用。但我在同时使用4个定时器时,发现通道1(ch1)和其他通道一样打开后并不能进入中断。

    //中断回调函数
    void PIT_LED_HANDLER(void)
    {
        if(PIT_GetStatusFlags(PIT, kPIT_Chnl_0) == kPIT_TimerFlag)
        {
            PIT_ClearStatusFlags(PIT, kPIT_Chnl_0, kPIT_TimerFlag);
            pitIsrFlag0 = true;
        }
        if(PIT_GetStatusFlags(PIT, kPIT_Chnl_1) == kPIT_TimerFlag)

        {
            PIT_ClearStatusFlags(PIT, kPIT_Chnl_1, kPIT_TimerFlag);
            pitIsrFlag1 = true;
        }
        if(PIT_GetStatusFlags(PIT, kPIT_Chnl_2) == kPIT_TimerFlag)
        {
            PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, kPIT_TimerFlag);
            pitIsrFlag2 = true;
        }
        if(PIT_GetStatusFlags(PIT, kPIT_Chnl_3) == kPIT_TimerFlag)
        {
            PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, kPIT_TimerFlag);
            pitIsrFlag3 = true;
        }
    }


    //定时器的配置是在官方pit的例子中改的,定时器周期为1s
    //主函数
    int main(void)
    {
        /* Structure of initialize PIT */
        pit_config_t pitConfig;
        /* Board pin, clock, debug console init */
        BOARD_ConfigMPU();
        BOARD_InitPins();
        BOARD_BootClockRUN();
        BOARD_InitDebugConsole();
        /* Set PERCLK_CLK source to OSC_CLK*/
        CLOCK_SetMux(kCLOCK_PerclkMux, 1U);
        /* Set PERCLK_CLK divider to 1 */
        CLOCK_SetDiv(kCLOCK_PerclkDiv, 0U);
        /*
         * pitConfig.enableRunInDebug = false;
         */
        PIT_GetDefaultConfig(&pitConfig);
        /* Init pit module */
        PIT_Init(PIT, &pitConfig);
        /* Set timer period for channel 0,1,2,3 */
        PIT_SetTimerPeriod(PIT, kPIT_Chnl_0, USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK));
        PIT_SetTimerPeriod(PIT, kPIT_Chnl_1, USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK));
        PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK));
        PIT_SetTimerPeriod(PIT, kPIT_Chnl_3, USEC_TO_COUNT(1000000U, PIT_SOURCE_CLOCK));

        /* Enable timer interrupts for channel 0,1,2,3 */
        PIT_EnableInterrupts(PIT, kPIT_Chnl_0, kPIT_TimerInterruptEnable);
        PIT_EnableInterrupts(PIT, kPIT_Chnl_1, kPIT_TimerInterruptEnable);
        PIT_EnableInterrupts(PIT, kPIT_Chnl_2, kPIT_TimerInterruptEnable);
        PIT_EnableInterrupts(PIT, kPIT_Chnl_3, kPIT_TimerInterruptEnable);

        /* Enable at the NVIC */
        EnableIRQ(PIT_IRQ_ID);
        /* Start channel 0,1,2,3 */
        PRINTF("\r\nStarting Timer...");
        PIT_StartTimer(PIT, kPIT_Chnl_0);
        PIT_StartTimer(PIT, kPIT_Chnl_1);
        PIT_StartTimer(PIT, kPIT_Chnl_2);
        PIT_StartTimer(PIT, kPIT_Chnl_3);
        while (true)
        {
            if (true == pitIsrFlag0)
            {
                PRINTF("\r\n Channel No.0 interrupt is occurred !");
                pitIsrFlag0 = false;
            }
            if (true == pitIsrFlag1)
            {
                PRINTF("\r\n Channel No.1 interrupt is occurred !");
                pitIsrFlag1 = false;
            }
            if (true == pitIsrFlag2)
            {
                PRINTF("\r\n Channel No.2 interrupt is occurred !");
                pitIsrFlag2 = false;
            }
            if (true == pitIsrFlag3)
            {
                PRINTF("\r\n Channel No.3 interrupt is occurred !");
                pitIsrFlag3 = false;
            }
        }
    }



    运行后现象如下:
    1.png
    只有通道0、通道2和通道3能顺利计时并进入中断
    在中断函数中添加断点后也不能进入通道1。

    使用的环境是MCUXpresso IDE(移植在IAR后也是有这个问题)。
    在不开启其他通道,只开启通道1时(只对通道1进行配置和开启)也是无法启动进入中断。
    不知是否还存在其他原因导致定时器未开启。
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    15

    帖子

    0

    注册会员

    Rank: 2

    积分
    177
    最后登录
    2020-4-7
     楼主| 发表于 2019-10-15 17:36:59 | 显示全部楼层
    小恩GG 发表于 2019-10-15 13:48
    感谢两位的问题讨论!
    楼主,那么你现在去掉内联,是否可以准确工作了,还有其他问题吗? ...

    谢谢,没有问题了,去掉内联就能够正常工作了!
    该会员没有填写今日想说内容.
    回复 支持 1 反对 0

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24863
    最后登录
    2025-7-18
    发表于 2019-10-10 19:06:05 | 显示全部楼层
    楼主你好,你有没有单独的测试你不能打开的PIT通道?
    是否能够进入中断?
    如果能进入,加上其他的通道中断就不能进入,是否是没有设置优先级?被其他中断给抢占了?你时间都设计差距大点,看看是否能够进入?
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    15

    帖子

    0

    注册会员

    Rank: 2

    积分
    177
    最后登录
    2020-4-7
     楼主| 发表于 2019-10-11 10:50:11 | 显示全部楼层
    小恩GG 发表于 2019-10-10 19:06
    楼主你好,你有没有单独的测试你不能打开的PIT通道?
    是否能够进入中断?
    如果能进入,加上其他的通道中断 ...

    我试过只打开那一个PIT通道,也不能进入中断。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-5-7 15:34
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    4

    主题

    115

    帖子

    1

    高级会员

    Rank: 4

    积分
    726
    最后登录
    2025-1-9
    发表于 2019-10-12 15:22:35 | 显示全部楼层
    小恩GG 发表于 2019-10-10 19:06
    楼主你好,你有没有单独的测试你不能打开的PIT通道?
    是否能够进入中断?
    如果能进入,加上其他的通道中断 ...

    RT1064也有这个问题
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24863
    最后登录
    2025-7-18
    发表于 2019-10-15 13:48:32 | 显示全部楼层
    感谢两位的问题讨论!
    楼主,那么你现在去掉内联,是否可以准确工作了,还有其他问题吗?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 01:26 , Processed in 0.094150 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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