查看: 6018|回复: 2

[其他] XGATE中INT_CFADDR和INT_CFDATA寄存器的用法??

[复制链接]

该用户从未签到

1

主题

1

帖子

0

新手上路

Rank: 1

积分
22
最后登录
1970-1-1
发表于 2008-12-9 14:29:32 | 显示全部楼层 |阅读模式
我在学习坛子上的XGATE程序时遇到以下的代码,是讲INT_CFADDR和INT_CFDATA寄存器的用法的,我看了手册了,可是不能理解这两个寄存器的用法,请大家给点拨一下吧,谢谢!!
#define SCI0_VEC 0xD6 /* vector address= $xxD6 */

#define ROUTE_INTERRUPT(vec_adr, cfdata) \
INT_CFADDR= (vec_adr) & 0xF0; \
INT_CFDATA_ARR[((vec_adr) & 0x0F) >> 1]= (cfdata);

ROUTE_INTERRUPT(SCI0_VEC, 0x81); /* RQST=1 and PRIO=1 */
我知道答案 目前已有1人回答
回复

使用道具 举报

该用户从未签到

0

主题

18

帖子

0

新手上路

Rank: 1

积分
44
最后登录
1970-1-1
发表于 2008-12-9 14:30:24 | 显示全部楼层

RE:XGATE中INT_CFADDR和INT_CFDATA寄存器的用法??

S12X有两内核CPU和XGATE。这两个核的中断由一个统一的中断控制器来配置。配置的内容包括中断交给哪个核(CPU or XGATE)处理,以及中断的优先
级。您的例子是将SCI0的中断交给XGATE处理, 其优先级为1。
于是每个中断源都要有一个中断配置寄存器。然而这样需要很大的寄存器空间。如S12XEP100有117个中断源,就需要117个中断配置寄存器的空间。为节
省空间,将这些寄存器进行分组,每8个一组。对中断配置寄存器进行寻址时,首先选择相应的组号,然后选择该组中对应的寄存器。INT_CFADDR的高4
位就是组号,低4位常为0;在一组中的8个寄存器用数组INT_CFDATA_ARR[8]来表示。
那么,对于特定中断源的中断配置寄存器,它到底在哪一组中的哪一个呢?规则是:中断向量的高4位就是组号,中断向量的位3到位1(注意不包括位0
)就是在那组中的元素位置。
以您的例子来说明。
step1: SCI0的中断向量为0xD6,所以将其高4位写到INT_CFADDR的高4位:
INT_CFADDR= (vec_adr) & 0xF0;
step2: SCI0中断向量的位3到位1是3=(0xD6&0x0F)>>1,所以选择数组INT_CFDATA_ARR[8]中的第3个元素:
INT_CFDATA_ARR[((vec_adr)&0x0F)>>1]=??;
这样就解决了中断配置寄存器的寻址问题。那么又该写什么内容呢?规则是:
1) 中断配置寄存器的位7表示中断提交给那个核(CPU or XGATE),缺省为0表示所有的中断缺省交给CPU,写1就将该中断指派给XGATE。
2) 中断配置寄存器的位2到位0表示中断的优先级(7~0)。缺省为优先级1。如果写0表示将该中断禁止。
在您的例子中,是希望将SCI0的中断交给XGATE处理, 其优先级为1。所以,接上面的step2: 这里的??就等于0x81。
CodeWarrior中巧妙地定义了一个宏,方便用户对中断的配置。
具体到本例:ROUTE_INTERRUPT(SCI0_VEC, 0x81); 实质上就是:
step1:INT_CFADDR=0xD0;
step2: INT_CFDATA_ARR[3]=0x81;
希望您已经理解了其用法。确实需要很仔细读手册才能明白。

该用户从未签到

0

主题

2

帖子

0

新手上路

Rank: 1

积分
3
最后登录
1970-1-1
发表于 2009-6-3 10:59:38 | 显示全部楼层

RE:XGATE中INT_CFADDR和INT_CFDATA寄存器的用法??

现在把CAN接收的中断用XGATE处理
代码是这样的:
ROUTE_INTERRUPT(CANRxCh0,0x81)
但是如果要用CPU来响应是不是应该写成
ROUTE_INTERRUPT(CANRxCh0,0x80)呢
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-5-10 09:55 , Processed in 0.120024 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表