注册 登录
查看: 518|回复: 23

[K60] 关于中断的问题?

[复制链接]
发表于 2014-3-29 21:06:58 | 显示全部楼层 |阅读模式
本帖最后由 a1129584 于 2014-3-29 22:10 编辑

请看下面两段代码
一、port_init(PTA27,ALT1 | PULLUP | IRQ_FALLING);
       port_init(PTD8,ALT1 | PULLDOWN | IRQ_RISING);
       set_vector_handler(PORTA_VECTORn,portd27_handler);
       set_vector_handler(PORTD_VECTORn,portd8_handler);
       enable_irq(PORTA_IRQn);
       enable_irq(PORTD_IRQn);
       后面清除中断,用户函数都正常
       但是就是不能工作   会卡在第一个中断使能
下面我换了一种方法
二、DisableInterrupts;
      port_init(PTA27,ALT1 | PULLUP | IRQ_FALLING);
            port_init(PTD8,ALT1 | PULLDOWN | IRQ_RISING);
      set_vector_handler(PORTA_VECTORn,portd27_handler);
      set_vector_handler(PORTD_VECTORn,portd8_handler);
      EnableInterrupts;
虽然它不会卡在初始化   但是中断不能正常工作   中断不发生   请问这是为什么   请指点谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-3-29 21:08:20 | 显示全部楼层
方法二没有使能中断,所以肯定进不了中断

方法一,卡在中断里,把调用栈截图来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 21:10:07 | 显示全部楼层
本帖最后由 a1129584 于 2014-3-29 21:16 编辑

山外メ雲ジ 发表于 2014-3-29 21:08
方法二没有使能中断,所以肯定进不了中断

方法一,卡在中断里,把调用栈截图来看看

EnableInterrupts   不能使能全部中断么  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-3-29 21:14:09 | 显示全部楼层
a1129584 发表于 2014-3-29 21:10
EnableInterrupts   不能使能全部中断么

是使能总中断,而不是使能全部中断。

家里有总开关,每个电器都有各自开关,你开了总开关,并不说明你就全部电器都打开了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 21:17:38 | 显示全部楼层
哦   明白你的意思了    使能了总中断   还要分别使能
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 21:18:05 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 21:14
是使能总中断,而不是使能全部中断。

家里有总开关,每个电器都有各自开关,你开了总开关,并不说明你 ...

哦   明白你的意思了    使能了总中断   还要分别使能
回复 支持 反对

使用道具 举报

发表于 2014-3-29 21:18:54 | 显示全部楼层
a1129584 发表于 2014-3-29 21:17
哦   明白你的意思了    使能了总中断   还要分别使能

是的,如果总使能关了,那么哪怕你开了各自的中断,也不会触发中断。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 21:20:09 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 21:18
是的,如果总使能关了,那么哪怕你开了各自的中断,也不会触发中断。

哦   请你帮我看看上面我单独使能每个中断为什么就是不能使用两个外部中断了
回复 支持 反对

使用道具 举报

发表于 2014-3-29 21:43:58 | 显示全部楼层
a1129584 发表于 2014-3-29 21:20
哦   请你帮我看看上面我单独使能每个中断为什么就是不能使用两个外部中断了

断言失败,你根据我们提供的IAR视频,调出 调用栈, 在调用栈里看看是哪个代码导致断言失败,或者 串口里看看那行代码导致的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 21:45:19 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 21:43
断言失败,你根据我们提供的IAR视频,调出 调用栈, 在调用栈里看看是哪个代码导致断言失败,或者 串口里 ...

Assertion failed in C:\Users\Administrator\Desktop\飞思卡尔\Program of smartcar(SSC)\Chip\src\MK60_gpio.c at line 123
回复 支持 反对

使用道具 举报

发表于 2014-3-29 21:46:45 | 显示全部楼层
a1129584 发表于 2014-3-29 21:45
Assertion failed in C:\Users\Administrator\Desktop\飞思卡尔\Program of smartcar(SSC)\Chip\src\MK60 ...

MK60_gpio.c 的第 123 行,你看看是什么代码,在那个地方设断点看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 21:53:08 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 21:46
MK60_gpio.c 的第 123 行,你看看是什么代码,在那个地方设断点看看

请问 KEIL 里要显示  每一行是第多少行   IAR里怎么看哪一行是第多少行?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:10:45 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 21:46
MK60_gpio.c 的第 123 行,你看看是什么代码,在那个地方设断点看看

请看看吧   我单步调试的时候卡在执行这条语句时
回复 支持 反对

使用道具 举报

发表于 2014-3-29 22:14:39 | 显示全部楼层
a1129584 发表于 2014-3-29 21:53
请问 KEIL 里要显示  每一行是第多少行   IAR里怎么看哪一行是第多少行?

我们的IAR视频有讲的,Tools——Options ——editor —— 勾上show line num
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:15:14 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 21:46
MK60_gpio.c 的第 123 行,你看看是什么代码,在那个地方设断点看看

这是调用栈   看见的结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-3-29 22:16:10 | 显示全部楼层
a1129584 发表于 2014-3-29 22:15
这是调用栈   看见的结果

这里的调用栈,并不是你卡死的那个代码啊。都没看到进入断言失败的函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:18:53 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 22:16
这里的调用栈,并不是你卡死的那个代码啊。都没看到进入断言失败的函数

大哥  你来试试?     不知道怎么打开它卡死在那里
回复 支持 反对

使用道具 举报

发表于 2014-3-29 22:20:05 | 显示全部楼层
a1129584 发表于 2014-3-29 22:18
大哥  你来试试?     不知道怎么打开它卡死在那里

你刚才不是看到他进入断言失败吗?全速运行一段时间,然后按个暂停,看看是不是又进入断言失败
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:22:24 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 22:14
我们的IAR视频有讲的,Tools——Options ——editor —— 勾上show line num

这个是你说的调用栈么

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:24:16 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 22:20
你刚才不是看到他进入断言失败吗?全速运行一段时间,然后按个暂停,看看是不是又进入断言失败

就是又卡在那里了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:27:21 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 22:20
你刚才不是看到他进入断言失败吗?全速运行一段时间,然后按个暂停,看看是不是又进入断言失败

ASSERT( BIT_GET( GPIO_PDDR_REG(GPIOX_BASE(ptxn)) , PTn(ptxn)) == GPO ); // 断言,检测 输出方向是否为输出     貌似卡在这里了   
回复 支持 反对

使用道具 举报

发表于 2014-3-29 22:28:29 | 显示全部楼层
a1129584 发表于 2014-3-29 22:22
这个是你说的调用栈么

左边你没截图的那个就是调用栈(图中没截出来)
你这里调用了 gpio 反转,而你没有初始化gpio,或者gpio设置为输入
回复 支持 反对

使用道具 举报

发表于 2014-3-29 22:29:11 | 显示全部楼层
a1129584 发表于 2014-3-29 22:22
这个是你说的调用栈么

还有一种可能是你超频太高导致的。

请自己根据我说的这些情况,一个个排除,一般都能解决的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:30:54 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-29 22:29
还有一种可能是你超频太高导致的。

请自己根据我说的这些情况,一个个排除,一般都能解决的

我设置了gpio_init(PTA27,GPO,0)     也就是说不存在没设置为输出    大概是超频太高吧
回复 支持 反对

使用道具 举报

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

本版积分规则

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