1. C66X中断机制基础解析
第一次接触C66X DSP中断系统时,我被它独特的两级映射架构吸引了。这就像邮局的分拣系统:原始事件(Primary Event)相当于从各地寄来的信件,而CIC(Chip Interrupt Controller)则像分拣中心,负责将信件分类后投递到正确的邮箱(CPU中断)。6678芯片上的98个Primary Event和CIC的二级映射机制,构成了灵活高效的中断处理体系。
具体来说,每个C66x CorePac支持124个中断事件映射,但实际可配置的中断输入只有16个(4-15号)。这就好比你家有16个收件箱,但要处理来自98个不同发件人的邮件。CIC的作用就是智能地将不同发件人的邮件合并归类,再放入指定收件箱。在裸机开发时,我们需要手动完成这个"分拣规则"的配置,而SysBIOS环境下则提供了更高级的封装。
提示:6678手册中的"Table 7-11. Interrupt Inputs"和"Table 7-12. Event Input Map"是中断配置的圣经,建议打印出来放在手边。
2. 事件映射的硬件实现细节
2.1 Primary Event直连配置
在CSL库中配置直连事件时,最关键的三个参数是Event ID、Vector ID和中断服务函数。举个例子,当我们需要将EDMA传输完成事件(假设是Event ID 21)映射到中断4时,代码骨架是这样的:
CSL_IntcObj intcObj;
CSL_IntcHandle hIntc;
CSL_IntcParam vectId = CSL_INTC_VECTID_4; // 目标中断号
Int16 eventId = 21; // 事件编号
hIntc = CSL_intcOpen(&intcObj, eventId, &vectId, NULL);
这里容易踩的坑是忘记调用CSL_intcHwControl来启用事件。我就曾花了半天时间调试一个"不触发"的中断,最后发现


396

被折叠的 条评论
为什么被折叠?



