[求助]关于XGATE的几个问题,希望大家讨论一下

- UID
- 165497
- 性别
- 男
|
[求助]关于XGATE的几个问题,希望大家讨论一下
首先,我想知道如果想要Xgate处理多个中断时,是否应该这样写:
#define ROUTE_INTERRUPT(vec_adr, cfdata) \
INT_CFADDR= (vec_adr) & 0xF0; \
INT_CFDATA_ARR[((vec_adr) & 0x0F) >> 1]= (cfdata)
#define SOFTWARETRIGGER0_VEC 0x72 /* vector address= 2 * channel id */
#define IRQ_ISR 0xF2
#define PORTH_ISR 0xCC
#define ATD0_ISR 0xD2
#define ATD1_ISR 0xD0
#define MDC_ISR 0xCA
然后SetupXGATE中写:
ROUTE_INTERRUPT(SOFTWARETRIGGER0_VEC, 0x81); /* RQST=1 and PRIO=1 */
ROUTE_INTERRUPT(IRQ_ISR, 0x81);
ROUTE_INTERRUPT(PORTH_ISR, 0x81);
ROUTE_INTERRUPT(ATD0_ISR, 0x81);
ROUTE_INTERRUPT(ATD1_ISR, 0x81);
ROUTE_INTERRUPT(MDC_ISR, 0x81);
另外,_sif()是将中断交给S12X_CPU处理,那么是不是说比如进行SCI中断,那么XGATE 可以处理一部分,用_sif()可以把剩余部分交给CPU中SCI的处理程序继续处理。
能否在CPU处理一部分后,把剩余工作交给XGATE?用什么函数或宏定义来实现。
XGATE中断在处理完中断后,程序是自动转给CPU执行正常操作吗?
好多东西不用不知道,一旦用起来才发现那么多问题,不知道哪位大虾以前做过,希望不吝赐教! |
|
|
|
|
|

- UID
- 165497
- 性别
- 男
|
10.3.1.9 XGATE Software Trigger Register (XGSWT)
该寄存器提供了8个CPU触发XGATE的中断调用
如:XGSWT=0x0101 就是调用XGATE的软件中断0
-------------------------------------------------------------
这个我看到过,可是它不是CPU进入XGATE的软件调用吗?
而且如果在TBDML或其他硬件连接方式下好像不大好用,我只在Full Chip Simulation下才能进入XGATE,难道有什么特殊设置吗? |
|
|
|
|
|

- UID
- 165497
- 性别
- 男
|
谢谢,你给我的程序是完全由XGATE来执行的吧!
SoftwareTrigger1_Handler中的XGSWT=0x0200;是结束执行了吗?为什么要用这条语句?
另外,想请教一下,下面这两条语句当中,0x81和0x84是表示什么意思,我原来以为默认就是0x81,不需要修改呢!
ROUTE_INTERRUPT(0x72,0x81);
//switch software trigger 1 interrupt to XGATE
ROUTE_INTERRUPT(0x70,0x84); |
|
|
|
|
|

- UID
- 165497
- 性别
- 男
|
XGSWT=0x0200清标志后,程序如何跳转呢? |
|
|
|
|
|

- UID
- 165497
- 性别
- 男
|
哦,谢谢!
因为我刚好用的就是XDT256,XD系列只有中断1可以嵌套中断0啊?
那像我这样写
ROUTE_INTERRUPT(IRQ_ISR, 0x81);
ROUTE_INTERRUPT(PORTH_ISR, 0x81);
ROUTE_INTERRUPT(ATD0_ISR, 0x81);
ROUTE_INTERRUPT(ATD1_ISR, 0x81);
ROUTE_INTERRUPT(MDC_ISR, 0x81);
只能是表示大家都是同样优先级喽?没有其他办法了吧? |
|
|
|
|
|

- UID
- 165497
- 性别
- 男
|
哈哈,原来是这样!
原以为现在的XGATE使用起来一样呢!
谢谢TristoneGao了! |
|
|
|
|
|