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传输,传输完成进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");
}

  • 哪款芯片呢?在这个论坛里我总假设是C6748,如果是C6748,那么注意一下,EDMA的中断要从相应的region配置,不是从global配置。

x 出现错误。请重试或与管理员联系。