我想使用edma拷贝一些数据,数据拷贝完成进入外部中断4对应的中断处理函数,EDMA_copy数据拷贝功能是完成了,但总是进不了中断4,请帮我看看是什么原因。
代码如下。
void edma_isr_init(void)
{
EDMA_init();
/* Disable Global host interrupts. */
gpCIC0_regs->GLOBAL_ENABLE_HINT_REG= 0;
/*map SPI Interrupt events (54 for SPIINT0) to CIC0 INTC0 out*/
KeyStone_CIC_event_map(gpCIC0_regs, 36, 64);
/* Enable Global host interrupts. */
gpCIC0_regs->GLOBAL_ENABLE_HINT_REG= 1;
gpCGEM_regs->INTMUX1 = 0;
gpCGEM_regs->INTMUX1 = (22<<CSL_CGEM_INTMUX1_INTSEL4_SHIFT);
gpCGEM_regs->INTMUX2 = 0;
//map local timer interrupt to INT14
// gpCGEM_regs->INTMUX3 = 22<<CSL_CGEM_INTMUX3_INTSEL14_SHIFT;
/*Clear all DSP core events*/
gpCGEM_regs->EVTCLR[0]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[1]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[2]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[3]= 0xFFFFFFFF;
//clear DSP core interrupt flag
ICR= IFR;
//enable INT14
IER = IER|(1<<14)|(1<<4);
/*Interrupt Service Table Pointer to begining of LL2 memory*/
ISTP= 0x800000;
//enable GIE
TSR = TSR|1;
}
void edma_test()
{
KeyStone_Exception_cfg();
edma_isr_init();
// KeyStone_test_config();
memset(buffer, 0, sizeof(buffer));
memset(edma_buf, 0x5a, sizeof(edma_buf));
EDMA_copy((unsigned int)GLOBAL_ADDR(edma_buf), GLOBAL_ADDR(buffer), DMA_BUF_SIZE, 0, DMA_NO_WAIT);
while(1);
return;
}
Andy Yin1:
你已经配置了CIC路由,确认EDMA初始化中有配置IER、IERH寄存器对channel使能中断。
Jianyong Wei:
回复 Andy Yin1:
我在EDMA_copy中有对ESR进行使能,我是用的cifae_KI_STK_Deyi这个库改写的。如果方便的话,能不能给我一个可以实现这个功能的例程。谢谢
Jianyong Wei:
回复 Andy Yin1:
按照你说的方法已经解决了,谢谢
yi si:
回复 Jianyong Wei:
你好,我想问下,pCGEM_regs 这个是什么啊【DSP大白,啥都不懂,原谅我这白痴的问题】 感觉这类名词应该是手册还是某个地方已经定义好了吧,请问在哪找呢,这类的定义我都不知道是什么意思啊