在中断发生的过程中,相关事件发生的顺序如下: 1:中断发生的条件包括软中断,和硬中断两中,软中断就是 人为的设置中断的标志位,也是软件产生一个POST好像是叫提交; 中断就是中断条件达成导致一个POST,如上图所示,一个中断被POST 只是证明中断条件达到.要想叫他执行 还需要叫他被PEND 挂起; 然后全局中断打开的情况下 这个中断才会被M8C 接受处理. ( 注意每一个中断有一个入口.) 貌似各个标志位 都会自动的被清0 和置位. 2:中断的发生和其他的单片机一样都是要 等 当前的指令结束. 3:一个中断从发生到被执行要经过13个周期. 包括: <1> PUSH <2> CPU_F 被清0 <3> PCH 和PCL 被清0 <4> 读中断向量表 以便找到入口的地质 4:从中断入口进入用户中断的代码. 5: 中断执行,在中断 虽然禁止了全局中断,并不意味着不能打开,呵呵,如果需要的仍然可以打开全局中断, 但是应该注意不要叫堆栈溢出. 6:中断执行结束 就POP , 猪程序可以继续执行,但是如果 有并发的多个PEND 中断 那另当别论. 事实上PSOC 有一个很重要的特点,就是他可以 RE-configure 结构重新配制,例如在程序刚开始你可以使用一个结构,但是在程序执行到了一个条件的时候 你可以 使用另外的一个结构,当然这个结构是你已经配制好了的,他占用系统的FLASH 空间是肯定的. 在这个时候你要特别主义你的中断. 一个已经POST的中断不会因为他所在的模块的功能的改变而 消失. 如果这个时候你正好不想让这个中断发生的话,那就是清除中断,但是请小心,因为你清除了关闭了GIE 或者清除了 PEND的中断 都不会 从根本上清除一个中断, 要清除一个中断的话就要清了 POST,呵呵 .INT_CLRx 这个寄存器才是应该用到的.呵呵 请注意用到 M8C_SETBANKx 也许是个累赘,不过记住它可能是个好的习惯. 说到中断不可能不说到 优先级,在P91 OF TRM ..............(菜工说过 王八排队 ,,大概其) 呵呵, 先是模拟,然后GPIO ,之后是 数字模块....... 还有可能你想更改,中断向量表,想让他跳转到一个不同的地方, 记住要去修改BOOT, 是在你的 PROJECT 文件架下的那个 BOOT 文件, 具体原因,,,, 每次重新的编译他都会调用这个文件.
|