查看: 4304|回复: 16

[已解决] kl46 中断嵌套/中断优先级【已解决】

[复制链接]
  • TA的每日心情
    郁闷
    2017-1-16 22:47
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    5

    主题

    49

    帖子

    0

    注册会员

    Rank: 2

    积分
    189
    最后登录
    2023-3-30
    发表于 2015-6-3 00:11:34 | 显示全部楼层 |阅读模式
    本帖最后由 x316639495 于 2016-10-10 15:21 编辑

    在用kl46做项目,需要精确测量一脉冲高电平时间,脉冲触发外部中断后用PIT1来计时实现。为了精确测量,需要把外部中断的优先级设为最高,形成中断嵌套。参考了官方的例程修改优先级

    void set_irq_priority (int irq, int prio)
    {   
        /*irq priority pointer*/
        uint8 *prio_reg;
        uint8 err = 0;
        uint8 div = 0;
       
        /* Make sure that the IRQ is an allowable number. Right now up to 32 is
         * used.
         *
         * NOTE: If you are using the interrupt definitions from the header
         * file, you MUST SUBTRACT 16!!!
         */
        if (irq > 32)
        {
            printf("\nERR! Invalid IRQ value passed to priority irq function!\n");
            err = 1;
        }
        if (prio > 3)
        {
            printf("\nERR! Invalid priority value passed to priority irq function!\n");
            err = 1;
        }
       
        if (err != 1)
        {
            /* Determine which of the NVICIPx corresponds to the irq */
            div = irq / 4;
            prio_reg = (uint8 *)((uint32)&NVIC_IP(div));
            /* Assign priority to IRQ */
            *prio_reg = ( (prio&0x3) << (8 - ARM_INTERRUPT_LEVEL_BITS) );            
        }
    }

    我现在把PORTD的中断优先级设为最高。但现在PORTD中断还是无法中断其它的中断形成中断嵌套,也无法精确测量脉冲高电平的时间。其它中断源还有PIT0,UART0,TPM。请问该如何处理。谢谢
    if(PORTC_ISFR & (1<<8))
      {
        PORTC_ISFR |=(1<<8);   
        if(gpio_get(PORTC,9) )
        {
          if(gpio_get(PORTC,8) )
          {     
             
              PIT_TCTRL1 =  !PIT_TCTRL_TEN_MASK | !PIT_TCTRL_TIE_MASK | !PIT_TCTRL_CHN_MASK; //关闭定时器
              PIT_LDVAL1 =  0xFFFFFFFF;// 最大值
              PIT_TFLG1  =  PIT_TFLG_TIF_MASK; // 清除标志
              PIT_TCTRL1 |= PIT_TCTRL_TIE_MASK | PIT_TCTRL_TEN_MASK;


          }
          else
          {
             time = (0xFFFFFFFF - PIT_CVAL1)/(Bus_Fre/1000);//Bus_Fre总线时钟,计算时间,单位是微秒
             PIT_TCTRL1 =  !PIT_TCTRL_TEN_MASK | !PIT_TCTRL_TIE_MASK | !PIT_TCTRL_CHN_MASK; //关闭定时器
          }
        }


    我知道答案 目前已有16人回答
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-1-16 22:47
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    5

    主题

    49

    帖子

    0

    注册会员

    Rank: 2

    积分
    189
    最后登录
    2023-3-30
     楼主| 发表于 2015-6-3 08:27:41 | 显示全部楼层
    自己顶一发
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-6-3 10:52:19 | 显示全部楼层
    本帖最后由 FSL_TICS_ZJJ 于 2015-6-3 12:55 编辑

    楼主你好,请先看下我的经验分享:
    [经验分享]关于Kinetis L系列中断优先级设置问题的解决方案
    你中断优先级代码要修改下,官网的那个优先级设置有点问题。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-1-16 22:47
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    5

    主题

    49

    帖子

    0

    注册会员

    Rank: 2

    积分
    189
    最后登录
    2023-3-30
     楼主| 发表于 2015-6-3 16:06:13 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2015-6-3 10:52
    楼主你好,请先看下我的经验分享:
    [经验分享]关于Kinetis L系列中断优先级设置问题的解决方案
    你中断优先 ...

    版主你好,我试了一下,还是不行。只开外部中断能测出准确的时间,开了其它中断以后就测不出准确的时间了。单独测试的时候,外部中断无法中断串口中断形成中断嵌套。
    我用的是IAR6.6,芯片MKL46Z256VLL4,在IAR里找不到NVIC这个寄存器,不知道哪一个是

    1.jpg
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    198

    帖子

    0

    高级会员

    Rank: 4

    积分
    503
    最后登录
    1970-1-1
    发表于 2015-6-3 16:07:19 | 显示全部楼层
    庆祝金币300  顶楼主
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-1-16 22:47
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    5

    主题

    49

    帖子

    0

    注册会员

    Rank: 2

    积分
    189
    最后登录
    2023-3-30
     楼主| 发表于 2015-6-3 22:44:46 | 显示全部楼层
    继续顶。
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2015-6-4 08:45:50 | 显示全部楼层
    楼主的意思是要打断当前的中断,去执行优先级高的,执行完以后继续执行当前中断吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-1-16 22:47
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    5

    主题

    49

    帖子

    0

    注册会员

    Rank: 2

    积分
    189
    最后登录
    2023-3-30
     楼主| 发表于 2015-6-4 13:49:55 | 显示全部楼层
    安 发表于 2015-6-4 08:45
    楼主的意思是要打断当前的中断,去执行优先级高的,执行完以后继续执行当前中断吗? ...

    是的。我是这么想的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2015-6-4 14:00:25 | 显示全部楼层
    用脉冲捕获不能实现吗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2015-6-4 14:38:27 | 显示全部楼层
    这个是中断的机制,应该是和内核有关系,需要进行设置。楼主可以查找一些关于内核的资料看看。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-27 12:56 , Processed in 0.112142 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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