Cypress技术william hill官网
直播中

王静

7年用户 684经验值
私信 关注
[问答]

使用ReadStatusRegister怎么知道触发了哪个中断?

嗨,我正在开发一个使用计时器的项目,当我接收计时器的捕获输入,或者当计时器的计数器值等于零(TC中断)时,我想设置一个中断。
问题是,如果我检查两个中断(“TC”和“on Cop-[1-4]”),在主体C中,我不知道哪个中断被触发。
在API中,RealStaseRealSub返回带有寄存器值的UIT8,但我不知道用哪个值来比较它,以知道已经触发了哪种中断。
β-β
CysISR(TreSeSyAn中断){
如果(timeReRealStaseRealStaseSuffes)= = ValueSyth.TythReSeaTcCy中断){
/TC中断
}否则{
//捕获中断
}
}

回帖(5)

王琳

2019-9-19 08:22:10
您不十分清楚使用哪一个定时器组件。
对于TCPWM,您必须使用GETBASTIOSSORCEL()函数。对于计时器(V 2.70)打开数据表,转到TimeReRealStaseRebug Stor(),然后单击“状态寄存器”链接,它将带您到TC和捕获的位定义。请记住,在读时,这些位被清除,即TimeReStasuSurtC和TimeReStasuSuTC(在定时器中定义的“h”)。
鲍勃
举报

王静

2019-9-19 08:35:52
引用: ncmza 发表于 2019-9-19 08:22
您不十分清楚使用哪一个定时器组件。
对于TCPWM,您必须使用GETBASTIOSSORCEL()函数。对于计时器(V 2.70)打开数据表,转到TimeReRealStaseRebug Stor(),然后单击“状态寄存器”链接,它将带您到TC和捕获的位定义。请记住,在读时,这些位被清除,即TimeReStasuSurtC和TimeReStasuSuTC(在定时器中定义的“h”)。
鲍 ...

谢谢你,鲍伯,我正在使用计时器(V 2.70),你是对的,我应该检查TimeR.StasuSuTC和TimeRistStasuSL俘获。
我的疑问是我应该用什么值来比较TimeRealStaseRealSub()。我的意思是,如果位“TimeRestStutsU.TC”位于状态寄存器中的位置0,我想检查中断是否是由TC中断引起的,我必须使用这样的东西吗?
如果(TimeReRealStaseRebug Stor()= 0000000 1){
/TC中断
}
或者,正如TimeReRealStaseRebug Stor()返回一个UIT8,我只可以比较返回值为:
当状态寄存器中设置了TC位时,它看起来像是这个万亿,所以我必须检查IfTimeReRealStaseRealSub()=1,当CASTORITLE设置在状态寄存器中时,它看起来像这000000个10,所以我必须检查IFTimeReRealStaseRealSub()==2。
举报

杨军

2019-9-19 08:43:57
更像这样——
如果(timer_readstatusregister() &;0000000 1)//如果点是使用面具上七位真正的美德
问候,Dana。
举报

王琳

2019-9-19 08:49:09
在优化编译器之前,C语言被设计成尽可能短的写这个请求。
逻辑“假”在C中定义为零(0,NULL),逻辑“true”则是布尔相反的WHICH!=零。
要质疑你上面的标志,你不应该做一个比较,等于你想测试的位,因为可能还有另一个位集。最好是——正如Dana建议的那样——执行逻辑,并将结果与非零进行比较。考虑到上面的内容,你可以写
如果(TimeRealRealStaseRebug Stor)和TimeReStasuStTC)
对于两个标志都可能是活动的情况,您应该记住,标记是由READSTATUS RealSub()重新设置的,并且您必须保存第二次查询的值。
鲍勃
举报

更多回帖

发帖
×
20
完善资料,
赚取积分