stm8 iar中,为什么进入中断,就修改一次中断级别

[复制链接]
6923|24
 楼主| solo777 发表于 2012-1-9 18:25 | 显示全部楼层 |阅读模式
132          INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
    133          {
   \                     EXTI_PORTC_IRQHandler:
   \                     _interrupt_7:

\   000000 8A                    PUSH      CC
   \   000001 84                    POP       A
   \   000002 A4BF                  AND       A, #0xbf
   \   000004 88                    PUSH      A
   \   000005 86                    POP       CC
   \   000006 8D000000              CALLF     L:?push_l0
   \   00000A 8D000000              CALLF     L:?push_l1


中断函数是
INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
{
u32 ii= add(323,424);}

没有设置优先级呀
香水城 发表于 2012-1-9 18:51 | 显示全部楼层
这个问题比较奇怪。请把完整的项目打包发上来研究一下,包括编译产生的.lst文件,谢谢。
hsbjb 发表于 2012-1-9 22:12 | 显示全部楼层
需要一些详细的资料
 楼主| solo777 发表于 2012-1-10 11:39 | 显示全部楼层
完全打包了
Project.rar (1.44 MB, 下载次数: 35)
 楼主| solo777 发表于 2012-1-10 11:52 | 显示全部楼层
就是stm的原厂模板,加上自己定义的一个加函数。

在中断中调用这个加函数。

虽然我没有定义中断级别,但是绝对,中断服务函数,不能进入就修改中断级别呀!
 楼主| solo777 发表于 2012-1-10 11:52 | 显示全部楼层
绝对应该是觉得
 楼主| solo777 发表于 2012-1-10 12:01 | 显示全部楼层
难道因为我没有设置优先级,iar编译器自动帮我设置了优先级???

看说明书,厂家默认,cpu启动后,中断优先级,都是设置为11,也就是第三级

这样修改就是第2级了。
1.jpg
2.jpg
香水城 发表于 2012-1-10 12:11 | 显示全部楼层
还没有看LZ的代码,但有一点可以肯定,CC寄存器的第6位与中断优先级无关。

与中断优先级有关的是第3、5位。
STM8_Core_Reg.GIF

评分

参与人数 1威望 +1 收起 理由
solo777 + 1

查看全部评分

 楼主| solo777 发表于 2012-1-10 13:57 | 显示全部楼层
关于这个寄存器,我这里有两个版本,这个是stm8 编程手册的15页 iar program.jpg


这个是iar reference manul 99页
CPU condition code register interrupt bits (CCR)
r3.jpg
 楼主| solo777 发表于 2012-1-10 14:00 | 显示全部楼层
应该是上面的那个有些位给省略了
 楼主| solo777 发表于 2012-1-10 14:04 | 显示全部楼层
谢谢香水!我自己一个人,怎么都想不明白自己错那了。
 楼主| solo777 发表于 2012-1-10 14:05 | 显示全部楼层
顺便问一下,把这个没有用的位,清零,干嘛?
香水城 发表于 2012-1-10 14:57 | 显示全部楼层
顺便问一下,把这个没有用的位,清零,干嘛?
solo777 发表于 2012-1-10 14:05


这正是我在2楼感觉奇怪的地方。
香水城 发表于 2012-1-10 15:24 | 显示全部楼层
 楼主| solo777 发表于 2012-1-10 15:50 | 显示全部楼层
我一直以为勘误手册是给修正datasheet上的tyoe 错误而产生的。

绝对没有想到是讲硅片上的bug,所以从来没有下载。

从这个手册上,我看到了,我以前一直疑惑的问题,无法关闭hsi

我一直以为是我的问题,我不会用而已。

今天从勘误手册上明白,那就是硅片bug!

真是晕呀!!!!

以后测试每个功能的时候,还是先去看看硅片勘误再说。
 楼主| solo777 发表于 2012-1-10 15:52 | 显示全部楼层
英文不太好,看这篇10分钟,大概明白,就是如果调用的函数中,有除法,编译器添加这个指令。

就这一句,看了不知道多少遍,也没有明白是什么意思。

If an ISR or a function called by this routine contains a division operation,

就是那个  this routine然后又是by。

这个看不懂。看了10分钟,也不明确到底是那个程序
 楼主| solo777 发表于 2012-1-10 15:54 | 显示全部楼层
我现在终于体会有些人说的stm上太多bug了。我写代码不多,都能遇到!
 楼主| solo777 发表于 2012-1-10 15:55 | 显示全部楼层
上面那句话,关键疑惑的地方,就是this

那个this到底是指那个!!!!!

我怎么看都不明白。
最后不看了,我怕我会疯掉!
 楼主| solo777 发表于 2012-1-10 15:58 | 显示全部楼层
香水,问你一下

这个错误上面的
Stack pointer address incompatibility across family devices

这个是什么意思,

Stack pointer address incompatibility across family devices
Description
Stack pointer address compatibility across STM8S105xx family devices is not currently possible due to the present RAM mapping.
香水城 发表于 2012-1-10 16:25 | 显示全部楼层
我现在终于体会有些人说的stm上太多bug了。我写代码不多,都能遇到!
solo777 发表于 2012-1-10 15:54


其实DIV/DIVW这个问题已经被编译器解决了,如果你不研究编译产生的代码,你是看不见的;所以说你并没有遇到Bug,是你钻研太深了,:lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则

83

主题

375

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部