转载:2410中断中SRCPND和INTPND清零的疑问

2410中断中SRCPND和INTPND清零的疑问
SRCPND是中断源引脚寄存器,某个位被置1表示相应的中断被触发,但我们知道在同一时刻内系统可以触发若干个中断,只要中断被触发了,SRCPND的相应位便被置1,也就是说SRCPND在同一时刻可以有若干位同时被置1,然而INTPND则不同,他在某一时刻只能有1个位被置1,INTPND 某个位被置1(该位对应的中断在所有已触发的中断里具有最高优先级且该中断没有被屏蔽),则表示CPU即将或已经在对该位相应的中断进行处理,于是我们可以有一个总结:SRCPND说明了有什么中断被触发了,INTPND说明了CPU即将或已经在对某一个中断进行处理,特别注意:每当某一个中断被处理完之后,我们必须手动地把SRCPND/SUBSRCPND,INTPND三个寄存器中与该中断相应的位由1设置为0,刚才说INTPND的操作很特别,它的特别之处就在于对当我们要把该寄存器中某个值为1的位设置为0时,我们不是往该位置0,而是往该位置1, 假设SRCPND=0x00000003,INTPND=0x00000001,该值说明当前0号中断和1号中断被触发,但当前正在被处理的是0号中断, 处理完毕后我们应该这样设置INTPND和SRCPND:
SRCPND=0x00000002 //位0被置为0
INTPND=0x00000001 //位0被置为0(方法是往该位写入1)
但是在一些测试程序中出现的清0程序似乎与上述有出路,如下:
程序一:
__inline void ClearPending(int bit)
{
register i;
rSRCPND = bit;
rINTPND = bit;
i = rINTPND;
}

程序二:
#define ClearPending(bit) {\
rSRCPND = bit;\
rINTPND = bit;\
rINTPND;\
}
个人认为应该改写为:
程序三
__inline void ClearPending(int bit)
{
rSRCPND &= ~(bit);
rINTPND = bit;
}
现在有以下几点疑问:
(1)程序一中的i = rINTPND;是什么意思?
(2)程序二种的rINTPND;\是什么意思?
(3)上述两条语句是否可以删除?
(4)考虑到程序一和程序二被广泛引用,但这两个程序中的语句rSRCPND = bit;和rSRCPND = bit;\的作用是将相应中断源请求置1,同时把其他中断源置0,似乎是错误的。
请高手不吝赐教!!:)
panxiaoku 2008-8-6 18:57
我没看过2410,我的想法是呀
i = xxx,是不是读一遍寄存器,保证数据被写进去了呢??这个是猜的,只是有可能!
最后一个问题,你说要改,我想不是吧,那个rSRCPND应该也是写1清0的吧。。。
CPLAN_GIT 2008-8-7 10:22
INTPND清零写1是比较确定的了,但是SRCPND清零应该写1还是写0确实有两种说法,根据2410的说明我觉得SRCPND清0应该写0才对啊
panxiaoku 2008-8-7 10:36
the service
routine must clear the pending condition by writing a 1 to the corresponding bit in the SRCPND register first and
then clear the pending condition in the INTPND registers by using the same method.
上面是官方手册中的一句话,可见两个都是写1清0的。
CPLAN_GIT 2008-8-7 13:57
再看了下说明,你说得对,我一开始对下面这句话理解错了,原文是:
You can clear a specific bit of the SRCPND register by writing a data to this register. It clears only the bit positions of the SRCPND corresponding to those set to one in the data. The bit positions corresponding to those that are set to 0 in the data remains as they are.
谢谢啊,呵呵!

时间: 2024-07-30 00:56:47

转载:2410中断中SRCPND和INTPND清零的疑问的相关文章

随想录(中断中真的不能上下文切换吗)

[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 记得在读书的时候,操作系统的老师就告诉我们,在cpu处理中断的时候,是不能进行上下文切换的.至于原因是什么,就说是影响中断啦.影响性能什么的.再往下深层次一点,就没有了.当然了,对老师的话,我们当然是深信不疑的. 等到后来自己port ucos2实时系统的时候发现,原来在中断返回的时候是可以进行中断上下文切换的.为什么呢?因为cpu刚刚处理了中断,而原来某个高优先级的任务可能刚刚在中断里面被唤

【转载】串口中怎样接收一个完整数据包的解析

这里以串口作为传输媒介,介绍下怎样来发送接收一个完整的数据包.过程涉及到封包与解包.设计一个良好的包传输机制很有利于数据传输的稳定性以及正确性.串口只是一种传输媒介,这种包机制同时也可以用于SPI,I2C的总线下的数据传输.在单片机通信系统(多机通信以及PC与单片机通信)中,是很常见的问题. 一.根据帧头帧尾或者帧长检测一个数据帧 1.帧头+数据+校验+帧尾 这是一个典型的方案,但是对帧头与帧尾在设计的时候都要注意,也就是说帧头.帧尾不能在所传输的数据域中出现,一旦出现可能就被误判.如果用中断来

【转载】C++中替代sprintf的std::ostringstream输出流详解

一.简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓冲区,替代sprintf. 派生关系图: 二.ostringstream的基本使用 ostringstream的构造函数形式:explicit ostringstream ( openmode which = ios_base::out ); explicit ostringstream ( con

将矩阵中0元素所对应的行列都清零

编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行与列清零. void setZeros(int **matrix, int lrow, int lcol) { bool *row = new bool[lrow]; bool *column = new bool[lcol]; //记录值为0的元素所在的行索引和列索引 for (int i = 0; i < lrow; i++) { for (int j = 0; j < lcol; j++) { if (matrix[i][j] ==

中断中需要面对的问题(二)

中断中有些问题需要面对. 隔离变化 不知道您有没有意识到,中断处理前面这部分的设计是何等的简单优美.人是高度智能化的,能够对遇到的各种意外情况做有针对性的处理,计算机相比就差距甚远了,它只能根据预定的程序进行操作.对于计算机来说,硬件支持的,只能是中断这种电信号传播的方式和CPU对这种信号的接收方法,而具体如何处理这个中断,必须得靠操作系统实现.操作系统支持所有事先能够预料到的中断信号,理论上都不存在太大的挑战,但在操作系统安装到计算机设备上以后,肯定会时常有新的外围设备被加入系统,这可能会带来

转载:C#中事件的由来

原文地址 http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx 感谢博主分享! 我们继续思考转载:C# 中的委托中的例子程序:上面的三个方法都定义在Programe类中,这样做是为了理解的方便,实际应用中,通常都是 GreetPeople 在一个类中,ChineseGreeting和 EnglishGreeting 在另外的类中.现在你已经对委托有了初步了解,是时候对上面的例子做个改进了.假

【转载】lucene中Field.Index,Field.Store详解

lucene在doc.add(new Field("content",curArt.getContent(),Field.Store.NO,Field.Index.TOKENIZED)); Field有两个属性可选:存储和索引. 通过存储属性你可以控制是否对这个Field进行存储: 通过索引属性你可以控制是否对该Field进行索引. 事实上对这两个属性的正确组合很重要. Field.Index Field.Store 说明 TOKENIZED(分词) YES 被分词索引且存储 TOKE

转载《设计中的设计》读后感

<设计中的设计>读后感 当我拿到这本书时第一想法就是把他认真仔细的看一遍,去和大师握手,一起去感悟设计的博大,一起倾听世界.    这本书是日本设计大师'原研哉'的著作,他为我们写了本相当于是大众的读物,让每个人都能看,都能了解设计这个门路怎么去走,怎么去走好着条设计之路?大师还邀请了一些对设计感兴趣的设计师一起观望设计世界.    在这本书里我明白了一个道理,"只要脚踏实地,就能走好设计这条路".原研哉曾说过这样一句话'当你因为读完这本观念设计书而感到越来越不懂设计时,这

【转载】Spring中的applicationContext.xml与SpringMVC的xxx-servlet.xml的区别

一直搞不明白两者的区别. 如果使用了SpringMVC,事实上,bean的配置完全可以在xxx-servlet.xml中进行配置.为什么需要applicationContext.xml?一定必须? 一. 因为直接使用了SpringMVC,所以之前一直不明白xxx-servlet.xml和applicationContext.xml是如何区别的,其实如果直接使用SpringMVC是可以不添加applicationContext.xml文件的. 使用applicationContext.xml文件时