This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
编写程序如下:功能是定时器触发EDMA传输,传输完成进EDMA中断,可问题是EDMA传输完成后进不了中断
void main()
{
unsigned int j=0;
config_chip();
config_edma();
for(j=0;j<2048;j++)
*(unsigned volatile int*)(data+4*j)= j*2;
CSR=0x0100; //Little endian
IER=0x0001;
ICR=0xFFFF;
enableGlobalINT();
enableNMI();
config_Interrupt_Selector(4, EDMA_INT); //edma interrupt
enableSpecificINT(4);
config_Interrupt_Selector(8, TINT0); //using Timer0 interrupt INT4
enableSpecificINT(8);
*(unsigned volatile int *)TIMER0_CTRL=0x00000215; //用内部时钟源:CPU/8=75MHz
*(unsigned volatile int *)TIMER0_PRD =0x00000001;
*(unsigned volatile int *)TIMER0_COUNT=0x00000000;
*(unsigned volatile int *)TIMER0_CTRL=0x00008bd7; //下一个时钟开始计时
void config_edma(void)
{
*(unsigned volatile int *)(EVENT1_PARAMS+OPT)=0x49710001;//0100 1001 0111 0001 0000 0000 0000 0001,EDMA中断 SPEU234_P234
*(unsigned volatile int *)(EVENT1_PARAMS+SRC)=data;
*(unsigned volatile int *)(EVENT1_PARAMS+CNT)=0x03990008;
*(unsigned volatile int *)(EVENT1_PARAMS+DST)=EMA_CE0_0;//SDRAM
*(unsigned volatile int *)(EVENT1_PARAMS+IDX)=0x00100002;
*(unsigned volatile int *)(EVENT1_PARAMS+LNK)=0x00000000;
*(unsigned volatile int *)CIERH=0x00000000; //通道中断使能寄存器
*(unsigned volatile int *)CIERL=0x00000002; // 使能传输完成中断
*(unsigned volatile int *)EERH =0x00000000; //edma事件使能寄存器
*(unsigned volatile int *)EERL =0x00000002; // 使能edma事件1
*(unsigned volatile int *)ECRH =0x00000000; //edma事件清除寄存器
*(unsigned volatile int *)ECRL =0x00000000;
}
interrupt void c_int4()
{
unsigned int volatile k=0;
disableSpecificINT(8);
CIPRLvalue.reg=*(unsigned volatile int *)CIPRL;
if(CIPRLvalue.exp.CIPRL1==1)
{
*(unsigned volatile int *)CIPRL|=0x00000002;
}
for(k=0;k<1024;k++)
// recv[k]=*(unsigned volatile int *)(EMA_CE0_0+4*k);
recv[k]=1;
if(k==1024)
k=0;
disableSpecificINT(4);
}
interrupt void c_int8()//Timer0 interrupt
{
asm("nop");
}