打印

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

[复制链接]
5852|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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)

使用特权

评论回复
5
solo777|  楼主 | 2012-1-10 11:52 | 只看该作者
就是stm的原厂模板,加上自己定义的一个加函数。

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

虽然我没有定义中断级别,但是绝对,中断服务函数,不能进入就修改中断级别呀!

使用特权

评论回复
6
solo777|  楼主 | 2012-1-10 11:52 | 只看该作者
绝对应该是觉得

使用特权

评论回复
7
solo777|  楼主 | 2012-1-10 12:01 | 只看该作者
难道因为我没有设置优先级,iar编译器自动帮我设置了优先级???

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

这样修改就是第2级了。

使用特权

评论回复
8
香水城| | 2012-1-10 12:11 | 只看该作者
还没有看LZ的代码,但有一点可以肯定,CC寄存器的第6位与中断优先级无关。

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

STM8_Core_Reg.GIF (10.81 KB )

STM8_Core_Reg.GIF

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
solo777 + 1
9
solo777|  楼主 | 2012-1-10 13:57 | 只看该作者
关于这个寄存器,我这里有两个版本,这个是stm8 编程手册的15页


这个是iar reference manul 99页
CPU condition code register interrupt bits (CCR)

使用特权

评论回复
10
solo777|  楼主 | 2012-1-10 14:00 | 只看该作者
应该是上面的那个有些位给省略了

使用特权

评论回复
11
solo777|  楼主 | 2012-1-10 14:04 | 只看该作者
谢谢香水!我自己一个人,怎么都想不明白自己错那了。

使用特权

评论回复
12
solo777|  楼主 | 2012-1-10 14:05 | 只看该作者
顺便问一下,把这个没有用的位,清零,干嘛?

使用特权

评论回复
13
香水城| | 2012-1-10 14:57 | 只看该作者
顺便问一下,把这个没有用的位,清零,干嘛?
solo777 发表于 2012-1-10 14:05


这正是我在2楼感觉奇怪的地方。

使用特权

评论回复
14
香水城| | 2012-1-10 15:24 | 只看该作者
请看勘误手册:http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00270741.pdf

下面是有关这个问题的相关截图:

STM8S105_Erratasheet_Partial.GIF (44.62 KB )

STM8S105_Erratasheet_Partial.GIF

使用特权

评论回复
15
solo777|  楼主 | 2012-1-10 15:50 | 只看该作者
我一直以为勘误手册是给修正datasheet上的tyoe 错误而产生的。

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

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

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

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

真是晕呀!!!!

以后测试每个功能的时候,还是先去看看硅片勘误再说。

使用特权

评论回复
16
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分钟,也不明确到底是那个程序

使用特权

评论回复
17
solo777|  楼主 | 2012-1-10 15:54 | 只看该作者
我现在终于体会有些人说的stm上太多bug了。我写代码不多,都能遇到!

使用特权

评论回复
18
solo777|  楼主 | 2012-1-10 15:55 | 只看该作者
上面那句话,关键疑惑的地方,就是this

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

我怎么看都不明白。
最后不看了,我怕我会疯掉!

使用特权

评论回复
19
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.

使用特权

评论回复
20
香水城| | 2012-1-10 16:25 | 只看该作者
我现在终于体会有些人说的stm上太多bug了。我写代码不多,都能遇到!
solo777 发表于 2012-1-10 15:54


其实DIV/DIVW这个问题已经被编译器解决了,如果你不研究编译产生的代码,你是看不见的;所以说你并没有遇到Bug,是你钻研太深了,:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

83

主题

375

帖子

2

粉丝