本帖最后由 一只耳朵怪 于 2018-6-22 10:46 编辑
大家好,
我使用dm3730运行dvsdk, 在c6accel的dsp端增加了通过GPMC读写
FPGA的功能,这个已经完成,我想使用sdma,但没调通,改成fpga通过gpio 65向dsp发gpio中断,dsp收到后在ISR里通过信号量控制从GPMC读数。
我的ISR程序应该是正确的,我使用irq14的
timer触发,ISR可以工作,使用gpio65由fpga触发中断,isr不运行。
代码如下:
static inline void __raw_writel(unsigned int b, int addr)
[
*(volatile unsigned int *) addr = b;
]
__raw_writel((1<<18) | (1<<24),0x480020d0); //scm Pin muxing mode 4 (gpio 65), inputenable
__raw_writel((1<<1),0x49052034); //OE
__raw_writel((1<<1),0x4905204C); //falling detect
__raw_writel((1<<1),0x4905202C); //gpio module 3 irqenable2
C64_disableIER(1<<6);
HWI_eventMap(6, 75); //gpio 65 in GPIO module 3, so event id is 75
HWI_dispatchPlug(6, (Fxn)dspTimerThread, -1, NULL);
HWI_enable();
C64_enableIER(1<<6);
读gpio3 data in(0x49052038)这个寄存器的值,会随着我的fpga信号从0和2来回变,证明gpio已经读到数据了,读gpio3 irq status2(0x49052028)这个寄存器,值一直是2,这是对的,证明gpio65已经收到中断信号。
但我的ISR程序没有触发,读intx status(0x01800180) 或者 ic event flag 3(0x01800000 +0x4 * 2),这两个寄存器一直是0,似乎是gpio中断没有送到iva里去?请问我少做了什么工作?为什么不能触发ISR,这个问题已经困扰我好几天了。