完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 2018-6-25 11:01 编辑
关于EDMA3的代码在附件,问题是EDMA3无法进入completion code function。 这个问题会不会与CIC0、CIC1、CIC2有关? 我只设置了CIC1片级中断事件,没有CIC0系统中断事件。 |
|
相关推荐
3个回答
|
|
您好,
关于EDMA产生中断,首先需要确认EDMA channel产生了时间,通过IPR寄存器可以确认,相应的IPR如果都没有置位,请对照EDMA3 user guide手册中的编程指南确认EDMA3的配置正确。 如果IPR已经置位,说明产生了中断事件,此时如果要相应中断服务函数,则需要配置相应的CIC,对于C667x来说,EDMA的global 中断事件是挂接输入到CIC0,所以需要配置CIC0将输入事件与CIC0的输出channel相对应;然后还需配置相应core的INTC,将CIC0输出到INTC的时间与相应的vecID相对应,最后再相应的vecID上挂接中断服务函数。 下面给出使用CSL函数进行INCT及CIC配置的简单代码,相关的CSL函数请参考cls库,下面需要跟应用修改相关的CIC编号、CIC输入输出、INTC输入、及vecID编号、中断函数等。 1. CIC0的配置:将EDMA3的中断事件与out channel映射作为INTC的输入,具体参考Chip interrupt controller user guide。 CSL_CPINTC_RegsOvly glbCpintcHnd[3]; CSL_CPINTC_Handle hnd; /* open CPINTC0 to map the EDMA completetion ISR event to the host interrupt */ hnd = CSL_CPINTC_open(0); if (hnd == 0) [ printf ("Error: Unable to open CPINTC-1n"); return; ] glbCpintcHnd[0] = (CSL_CPINTC_RegsOvly)hnd; //需要根据应用修改EDMA产生的时间编号及CPINTC输出channel号 CSL_CPINTC_mapSystemIntrToChannel (hnd, CSL_INTC0_CPU_3_2_EDMACC_GINT, 8); CSL_CPINTC_enableSysInterrupt (hnd, CSL_INTC0_CPU_3_2_EDMACC_GINT); CSL_CPINTC_enableHostInterrupt (hnd, 8); CSL_CPINTC_enableAllHostInterrupt(hnd); 2. INTC的配置:即将INTC输入事件与vecID及ISR挂接。 /* Intc variable declarartion */ CSL_IntcObj glbIntcObj; CSL_IntcHandle glbHIntc; CSL_IntcEventHandlerRecord glbEventHandler[8]; CSL_IntcGlobalEnableState glbIntcState; interrupt void ISR_func(); void IntcConfig(void) [ CSL_IntcParam vectId; CSL_IntcContext context; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// //! GEM0 Intc Configuration !// //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// /* Setup the global Interrupt */ context.numEvtEntries = 8; context.eventhandlerRecord = glbEventHandler; CSL_intcInit(&context); /* Enable NMIs */ CSL_intcGlobalNmiEnable(); /* Enable Global Interrupts */ CSL_intcGlobalEnable(&glbIntcState); /* VectorID for the Global Edma Event */ vectId = CSL_INTC_VECTID_4; /* Opening a handle for the ISR->EDMA Interrupt Event */ glbHIntc = CSL_intcOpen(&glbIntcObj, CSL_GEM_INTC0_OUT_8_PLUS_16_MUL_N, &vectId, NULL); /* Hook the ISRs */ CSL_intcHookIsr(vectId, &ISR_func); /* Clear the Interrupt */ CSL_intcHwControl(glbHIntc, CSL_INTC_CMD_EVTCLEAR, NULL); /* Enable the Event & the interrupt */ CSL_intcHwControl(glbHIntc, CSL_INTC_CMD_EVTENABLE, NULL); return; ] |
|
|
|
zbb9612 发表于 2018-6-25 00:59 我可不可以这样理解: 首先由中断事件触发输入到CIC0,CIC0再映射到相应的channel进行EDMA的传输; EDMA的传输完成后产生事件,映射到VecID,VecID再挂接completion code function。 1、那CSL_INTC0_CPU_3_2_EDMACC_GINT就是触发EDMA的中断事件,也即EDMA的synchronization event,也即CIC0的输入事件? 2、那CSL_INTC0_CPU_3_2_EDMACC_GINT具体是一个事件?Global interrupt的简称? 3、EDMA3_CC individual completion interrupt是在什么情况下用的? 4、CIC0输出到INTC的事件与channel有没有特定的关系? 5、channel可以在一定的范围内任意选择吗? 6、CSL_GEM_INTC0_OUT_8_PLUS_16_MUL_N就是CIC0输出到INTC的事件? 7、EDMA唯一的VecID是CSL_INTC_VECTID_4,VecID与completion code function挂接,那不同的EDMA传输要与多个completion code function挂接怎么办? 另外 // 将触发EDMA的中断事件挂接completion code function EdmaEventHook(CSL_EDMA3_CHA_UTXEVT, UartEDMASendUppcCompleted_INT); void HandleGPIO4RecUppc_INT( void *arg ) [ //使能相应EDMA通道传输,即触发EDMA CSL_edma3HwChannelControl( hChannel_uart_send,CSL_EDMA3_CMD_CHANNEL_SET,NULL); ] 8、这两个函数还要不要调用? |
|
|
|
fdhsfagd 发表于 2018-6-25 01:04 与CIC0的输入映射的channel不是EDMA channel,是CIC0中的channel,建议你先看看中断控制器手册:http://www.ti.com/general/docs/lit/getliterature.tsp?literatureNumber=sprugw4a&fileType=pdf 1. CSL_INTC0_CPU_3_2_EDMACC_GINT是EDMA完成中断事件,不是触发EDMA的中断事件,它是路由到CIC0,作为CIC0的输入; 2. CIC0的输入与输出原则上是可以任意映射的,但是考虑到需要将CIC0的输出与INTC 的输入映射起来,所以需要根据应用选择,不能随意; 3. CSL_GEM_INTC0_OUT_8_PLUS_16_MUL_N是CIC0输出到INTC的事件,即CIC0的输出事件8作为INTC的输入; 4. 中断事件可与vecID4~15任意挂接,对于多个channel时需要根据IPR区分对应产生中断的channel号,请阅读EDMA手册中关于中断的处理; 5. 你说的函数不需要调用,只需要按照我上述给出的方式配置CIC及INTC即可。 关于CIC的输入与输出,及INTC的输入事件编号及映射关系,请阅读相应的器件手册中的中断一节。 |
|
|
|
只有小组成员才能发言,加入小组>>
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
577 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1028 浏览 1 评论
677 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
500 浏览 1 评论
1024 浏览 0 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
130浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
102浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
111浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
109浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
137浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 16:16 , Processed in 0.881951 second(s), Total 82, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号