一个问题很纠结,希望专家和各位同事看下指点一下,不胜感激:
环境为:Windows操作系统下 CCS5.2
通过GPIO0引脚接收方波,然后配置下降沿触发IRQ中断,触发后相应的中断状态寄存器显示中断已经发发生,但是没有发生任何的跳转(包括中断向量表的跳转),请问是什么原因呢?
在三个月前遇到过这个问题,但是后来使能GPIO1中断后,中断发生了跳转,但是三个月后在代码和处理器板子等都没有改变的情况下,却产生不了中断了!希望贵公司给予指点,谢谢!
Shine:
用的是哪颗芯片? 板子还能进GPIO1中断么? 查一下中断使能位有没有置1?
jams lebulang:
回复 Shine:
TMS320C6A8168芯片,确定GPIO可以产生中断,而且我之前都调通了的,只是过了几个月 后又调不通了,换了硬件也不行
Shine:
回复 jams lebulang:
如果中断标志位能置起来的话, 感觉还是软件的问题, 你用的是DSP interrupt还是ARM interrrupt?
jams lebulang:
回复 Shine:
arm中断,如果是代码的问题的话,最可能是哪里的问题呢?
基本的过程为:我首首先通过CPSR使能IRQ中断,然后使能系统中断,再使能GPIO中断,在设置完触发条件(下降沿)后各个中断状态寄存器就显示有中断了。
Shine:
回复 jams lebulang:
AINTC只支持电平触发(level senstive)的中断, 将GPIO中断设成电平触发.
jams lebulang:
回复 Shine:
水平触发也一样,不跳转,之前也试过,我代码如下,您有时间的话帮忙分析一下那里出错了吧, 谢谢
;屏蔽所有中断 ldr r0, INTCPS_MIR_SET0 mov r1, #0xff orr r1, r1, #0xff00 orr r1, r1, #0xff0000 orr r1, r1, #0xff000000 str r1, [r0],#0x20 str r1, [r0],#0x20 str r1, [r0],#0x20 str r1, [r0]
;中断状态清除 ldr r0, INTCPS_ISR_CLEAR0 str r1, [r0],#0x20 str r1, [r0],#0x20 str r1, [r0],#0x20 str r1, [r0]
ldr r0, GPIO_IRQSTATUS_CLR_0 str r1, [r0],#0x20 str r1, [r0],#0x20 str r1, [r0],#0x20 str r1, [r0]
;GPIO To FPGA reset(gp1) ldr r0,GPIO_OE ldr r1,[r0] bic r1,r1,#0x2 ;GAI 00-99 str r1,[r0]
ldr r0, GPIO_DATAOUT ldr r2, [r0] orr r2, r2,#0x2 bic r3, r2,#0x2
str r2, [r0] str r3, [r0] str r2, [r0]
;与FPGA通信的引脚(gp0)配置为输入(接收方波) ldr r0, GPIO_OE ldr r1, [r0] orr r1, r1, #0x1 str r1, [r0]
ldr r0, INTCPS_ILR0 ; 96号GPIO中断 IRQ,优先级0 mov r1, #0x0 mov r2, #0x4 str r1, [r0,#0x180]
;GPIO模块使能中断 ldr r0, GPIO_IRQSTATUS_SET_0 ldr r1, [r0] orr r1, r1, #0x1 str r1, [r0] str r1, [r0,#4]
;trigger condition level ldr r0, GPIO_LEVELDETECT1 ;高电平触发
ldr r1, [r0] orr r1, r1,#0x1 str r1, [r0]
;解除中断屏蔽 ldr r0, INTCPS_MIR0 mov r1,#0 ldr r1, [r0,#0x60] bic r1, r1,#0x1 str r1, [r0,#0x60]
LDR R0, INTCPS_ISR_SET0 mov r1, #0xff orr r1, r1, #0xff00 orr r1, r1, #0xff0000 orr r1, r1, #0xff000000 str r1, [r0],#0x20 str r1, [r0],#0x20 str r1, [r0],#0x20 str r1, [r0]
;enable IRQ interrupt mrs r0, CPSR bic r0,r0, #0x80 msr CPSR_cxsf,r0