打印

转贴: PSOC之中断控制器应用interrupt controller

[复制链接]
4360|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
walnutcy|  楼主 | 2008-5-11 12:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在中断发生的过程中,相关事件发生的顺序如下:
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 文件, 具体原因,,,,    每次重新的编译他都会调用这个文件.

沙发
hotpower| | 2008-5-11 21:51 | 只看该作者

倒塌了~~~俺怎么没想到"转帖"换积分???害得俺灌水坏名分~~~...

使用特权

评论回复
板凳
心中的轨迹| | 2008-5-12 20:57 | 只看该作者

中断好像进不去

那怎么设置某个引脚的中断呢?比如某个引脚按键中断
我设置过了,中断也都开了
但是中断好像就是进不去。。。。。

使用特权

评论回复
地板
QIUMING| | 2008-5-13 00:48 | 只看该作者

是不是没开中断

是不是没开中断,我估计的,贴程序出来自有大侠解答,我也好学习学习。

使用特权

评论回复
5
心中的轨迹| | 2008-5-13 19:37 | 只看该作者

中断开了的

就下面这样
   PRT1IC0|=0x40;
   PRT1IC1&=0xbf;  //下降沿中断
   PRT1IE|=0x40; 
   INT_MSK0|=0x20;
   M8C_EnableGInt;
这样设置应该没问题啊?
但是就是中断进不去。。。
迷茫中

使用特权

评论回复
6
心中的轨迹| | 2008-5-13 20:08 | 只看该作者

谁用过IO口中断啊?

毕业设计。。。。
想优化程序
没办法,就是进不去

使用特权

评论回复
7
辛夷木蓝| | 2008-5-13 22:16 | 只看该作者

恩,谢谢咯1

使用特权

评论回复
8
PSoC_Rock| | 2008-5-19 11:13 | 只看该作者

中断矢量指向那里?

在boot.asm中,你看过中断矢量指向那里吗?

使用特权

评论回复
9
心中的轨迹| | 2008-5-19 15:30 | 只看该作者

boot.asm中,中断矢量都看过,也都没错的

但是,就是中断进不去。。
麻烦谁用过IO口中断的,发个子程序上来作为参考。。
感激不尽啊

使用特权

评论回复
10
PSoC_Rock| | 2008-5-21 09:50 | 只看该作者

请看例子

如果你用C做ISR,要用#pragma声明中断句柄:
#pragma interrupt_handler HALL_ISR_C


void HALL_ISR_C()
{
    flags.bits.HALL = 1;
    time_stamp = Timer16_wReadTimer();    //get the timer value

    Check_HALL();
}


在boot中函数名HALL_ISR_C前面加短横线:_

    org   1Ch                      ;GPIO Interrupt Vector
    ljmp _HALL_ISR_C

使用特权

评论回复
11
rongruosixue| | 2013-9-25 10:25 | 只看该作者
这貌似不是psoc4集成板的中断控制哦

使用特权

评论回复
12
landelixulin| | 2014-7-20 09:01 | 只看该作者
中断怎么清标志位啊?

使用特权

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

本版积分规则

111

主题

1443

帖子

5

粉丝