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中断响应问题



我们自己做的6674的板子,具体功能要求为:每20ms用EDMA3从EMIF口搬运数据数据,EDMA3触发事件是GPIO4的上升沿,EDMA3每次搬运完后需要触发HOST中断4,在CIC0中,允许system中断6(EDMA3CC1 GINT),允许host中断4,并且将system中断6通道映射到通道4,并且开全局允许寄存器,GLOBAL_ENABLE_HINT_REG.ENABLE=1,   CSR.GIE=1,        IER.NMIE=1, IER.IE4=1,在寄存器ISTP设置中断矢量表入口映射地址,调试时发现:

1. 用示波器看到GPIO4每个上升沿可以触发EDMA3搬运数据(通过EMIF的CS和R/W信号,并且搬运数据个数也对);

2.通过CIC0的RAW状态寄存器和状态寄存器都能看到EDMA3CC1 GINT(事件6)相应位是1,说明EDMA3CC1 GINT中断已经产生并且被允许,但是就是在IFR中的中断4标志没有被设置,所以进不了中断服务子程序;

3.为了验证中断矢量表入口地址映射正确:手动在中断设置寄存器ISR中设置中断4,发现就可以进入中断服务子程序,说明中断映射都正确;

4.自我感觉有两种可能:一是SYSTEM中断和host中断没有关联起来,二是设置不正确,

还望高手给予回答,谢谢!!!!!所有初始化没有用CSL,个人感觉6674的CSL说明文件没有c64的PDF帮助文件明了。

  • EDMACC的中断事件是作为CIC的输入,所以如果要与中断服务函数挂接,需要按如下方向映射:

    EDMACC_GINT->CIC0_INPUT->CIC0_OUT->INTC_IN->HOST_INT

    需要代码配置:

    1. CIC0输入事件EDMACC_GINT与CIC0输出通道的映射,选择的CIC out 通道请查看C6674 data manual中断一节中CORE INTC的输入;可以调用函数CSL_CPINTC_mapSystemIntrToChannel;

    2. 映射的CIC OUT通道作为core INTC的输入事件,CIC OUT通道与INTC输入事件对应关系参考C6674 data manual中断一节table7-38.

    所以你的代码中缺少上述第一步,即将EDMACC_GINT事件与CIC0 OUT通道的映射,并需要enable system interrupt,可以调用CSL_CPINTC_enableSysInterrupt。

    例如:

    1. 调用CSL_CPINTC_mapSystemIntrToChannel将EDMACC0_GINT事件号6映射到CIC0_OUT 32号事件;

    2. CICO_OUT 32对应INTC的输入事件21,所以需要将21号事件与host中断4映射。

    3. enable system and host interrupt.

  • Andy Yin1:

    我向你致敬,偶像呀!!!!!解决问题了,还是资料看少了,但是感觉,多核资料没有c64资料那么明了,CSL库函数帮助文件也不是很好用,

    谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢了