TI中文支持网
TI专业的中文技术问题搜集分享网站

C6748的EDMA3传输完成中断问题

目前 EDMA3 传输完成中断已经使能,IER寄存器已经是0x00000004,中断初始化已经打开,在相同条件下定时器中断可以进行,EDMA3中断已经映射到INT4,添加到事件,当程序运行时EDMA3的IPR寄存器已经置位0x00000004,但是就是不能进入中断服务函数,求大神帮忙了,具体的配置如下:

int main(void)
 {
// 外设使能配置
PSCInit();
// Set_Core_456MHz();           //调试ADC、DAC时将CPU始终屏蔽,因为仿真器仿真始终会出现错误
//  Set_DDR_156MHz();
GPIOBankPinMuxSet();    // GPIO 管脚复用配置
GPIOBankPinInit();     // GPIO 管脚初始化
DEVICE_DDR_Init();
InterruptInit();
EventCombineInterruptInit();
McBSP0Init();      //CLKX0:4.8 MHZ      FSX0:96KHZ
McBSP1Init();      //CLKX1:6.0 MHZ      FSX1:80KHZ
MCBSP0_ReceiveData(tccNum, chNum, AUDIO_DATA0);

GPIOPinWrite(SOC_GPIO_0_REGS, LED1_ADC_Sample, GPIO_PIN_HIGH);
GPIOPinWrite(SOC_GPIO_0_REGS, DAC_LDAC, GPIO_PIN_HIGH);
GPIOPinWrite(SOC_GPIO_0_REGS, OPA334_ENABLE, GPIO_PIN_HIGH);
while(1);
}

void InterruptInit(void)
{
 // 初始化 DSP 中断控制器
 IntDSPINTCInit();

 // 使能 DSP 全局中断
 IntGlobalEnable();
}

void EventCombineInterruptInit(void)
{
// EDMA3DisableEvtIntr(SOC_EDMA30CC_0_REGS,chNum);       //OK
     EDMA3EnableEvtIntr(SOC_EDMA30CC_0_REGS,chNum);    //OK
    // 传输完成中断
  IntEventCombineInit(C674X_MASK_INT4, C674X_MASK_INT15, ECM2_UNUSED, ECM3_UNUSED); //OK
  // 注册中断服务函数
     IntEventCombineRegister(SYS_INT_EDMA3_0_CC0_INT1,EDMA3_CHANNEL0_ISR);
  IntEventCombineAdd(SYS_INT_EDMA3_0_CC0_INT1);
  // 使能 定时器 / 计数器 中断
  TimerIntEnable(SOC_TMR_1_REGS, TMR_INT_TMR34_NON_CAPT_MODE);
  IntEventCombineRegister(SYS_INT_T64P1_TINT34, TimerIsr);
  IntEventCombineAdd(SYS_INT_T64P1_TINT34);
}
void EDMA3_CHANNEL0_ISR()
{

 EDMA3ClrIntr(SOC_EDMA30CC_0_REGS, chNum);
// IntEventClear(SYS_INT_EDMA3_0_CC0_INT1);
 GPIOPinWrite(SOC_GPIO_0_REGS, LED1_ADC_Sample, GPIO_PIN_LOW);
// MCBSP0_ReceiveData(tccNum, chNum, AUDIO_DATA1);
}

void MCBSP0_ReceiveData(unsigned int tccNum, unsigned int chNum, unsigned long *dest_buffer)
{
    EDMA3CCPaRAMEntry paramSet;
    unsigned int acnt = 4;     // 一维                                    DRR 4:32位数据                2:16位数据
    unsigned int bcnt = AMOUNT_DATA_FRAME;  // 二维  AMOUNT_DATA_FRAME=24552                    采样 点的个数
    unsigned int ccnt = 1;  // 三维
    // 申请 EDMA3 通道
    EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, chType, chNum, tccNum, evtQ);
 // 配置参数 RAM
//    paramSet.srcAddr = (unsigned int)src_buffer;            //          SOC_MCBSP_0_CTRL_REGS+0;
    paramSet.srcAddr = SOC_MCBSP_0_CTRL_REGS+0;
 paramSet.destAddr = (unsigned int)dest_buffer;
 paramSet.aCnt = (unsigned short)acnt;
 paramSet.bCnt = (unsigned short)bcnt;
 paramSet.cCnt = (unsigned short)ccnt;
 // 设置 SRC / DES 索引
 paramSet.srcBIdx = (short)0u;                    // DRR不动
 paramSet.destBIdx = (short)4u;                   //4:  4个字节=1个long
 // A Sync 传输模式(一维传输模式)
 paramSet.srcCIdx = (short)0u;
 paramSet.destCIdx = (short)0u;    //待定AMOUNT_DATA_FRAME
 paramSet.linkAddr = (unsigned short)0xFFFFu;          //链接到当前Param集
 paramSet.bCntReload = (unsigned short)0u;
 paramSet.opt = 0u;
 // Src 及 Dest 使用自增(INCR)模式
 paramSet.opt &= 0xFFFFFFFCu;
 // 配置 TCC
 paramSet.opt |= ((tccNum << EDMA3CC_OPT_TCC_SHIFT)|EDMA3CC_OPT_ITCINTEN|EDMA3CC_OPT_TCINTEN);
 // 写参数 RAM
 EDMA3SetPaRAM(SOC_EDMA30CC_0_REGS, chNum, &paramSet);
 // 使能传输
 EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, chNum, trigMode);
}

Tony Tang:

检查一下EDMA的region的配置。

HUI PEI:

请问您的问题解决了吗?是在哪里没设置好么,我现在遇到差不多同样的问题

Tong xie:

回复 Tony Tang:

请问有关于region 配置的详细问题吗,我也遇到了相似的问题。中断函数进不去,但是IPR相关位却置1

Tony Tang:

回复 Tong xie:

Tong xie中断函数进不去,但是IPR相关位却置1

这就是region的配置不对。请阅读TRM里的EDMA章节。

Tong xie:

回复 Tony Tang:

请问 region的配置是怎么回事。我也遇到了一样的问题,IPR置位,但是中断函数进不去。IPR置位是不是说明中断发生了

Tong xie:

请问您的问题怎么解决的。我也遇到了一样的问题

Tony Tang:

回复 Tong xie:

先看datasheet4的Table 6-6, C6748  DSP interrupts这个事件表, 8号和91号都是EDMA的中断事件。说明里写的是shadow Region1的完成中断,意思是说要在shadow region配置这个EDMA才能产生这个中断事件,从global region产生的中断是没有中断事件号的。

如果要产生中断,必须是shadow region的IPR置位才会产生下面8或91号中断事件。

8     EDMA3_0_CC0_INT1             EDMA3_0 Channel Controller 0 Shadow Region 1 Transfer Completion Interrupt

91    EDMA3_1_CC0_INT1            EDMA3_1 Channel Controller 0 Shadow Region 1 Transfer Completion Interrupt

再看TRM手册的EDMA章节16,寄存器分为Global channel Register和Shadow Region Channel,寄存器名都是一样的。下图是截取了一部分示意。

至于Shadow region是什么意思,先看看16.2.7.1和16.2.7.2,有具体的疑问再讨论。

Tong xie:

回复 Tony Tang:

datasheet4,C6748  DSP interrupts事件表。没找到这个文档,求下载链接

Tony Tang:

回复 Tong xie:

你在用C6748,没有看过C6748的手册?

实在不知道怎么找TI的文档资料的话就上www.ti.com,搜索相应的芯片型号,比如C6748.

Tony Tang:

回复 Tong xie:

然后选择相应的器件进入产品网页,所有与该芯片相关的资料都在这了:

赞(0)
未经允许不得转载:TI中文支持网 » C6748的EDMA3传输完成中断问题
分享到: 更多 (0)