其实ti的C6000系列的dsp设计基本上差不多,就是不同的cpu片上的资源不一样而已,大家可以以前看过我前面的文章《DSP(TMS320C6713)入门之旅(三、中断的理解和使用)》这个讲了dsp中断的一些概念和基本的使用方法。在此我也不想把前面的内容copy过来了,我这儿只说重点注意和实现的源代码。 OMAP-L138是TI公司的一款嵌入式微处理器,集成了TMS320C6748 DSP核。在本篇文章中,我们主要关注的是C6000系列DSP中的中断处理机制,特别是中断控制器(INTC)在OMAP-L138上的应用。中断是实时系统中不可或缺的一部分,它允许处理器在执行正常任务的同时响应外部事件。 C6748 DSP的中断控制模块提供四种类型的中断信号: 1. 一个可屏蔽的硬件异常(EXCEP) 2. 十二个可屏蔽硬件中断(INT4到INT15) 3. 一个非屏蔽信号,可以用作中断或异常(NMI) 4. 一个复位信号(RESET) OMAP-L138虽然具有0到127个中断,但CPU仅处理INT4到INT15这12个可标识的硬件中断。为了充分利用这些中断,我们需要进行中断映射,将外部设备的中断请求映射到这些可用的中断线上,以便于服务不同外设的需求。 在实际编程中,中断初始化通常包括以下步骤: 1. 关闭全局中断(IRQ_globalDisable) 2. 清除中断事件(例如,CSL_FINST用于清除INTC_EVTCLR_EC4) 3. 设置中断多路复用器(例如,CSL_FINS用于设置INTMUX3的INTSEL12,将定时器0的中断映射到INT4~INT15中的某个位置) 4. 设置中断向量表地址(IRQ_setVecs) 5. 清除所有中断状态(IRQ_disable) 6. 启用特定的中断(例如,启用非屏蔽中断12和NMIE) 7. 开启全局中断(IRQ_globalEnable) 给出的`InitDspIntc()`函数就展示了这样的初始化过程。同时,`initTimer()`函数配置了一个定时器(timer0)作为中断源,并设置了中断处理函数`_irqTIMER0(void)`。 在中断处理过程中,需要注意: - 中断服务程序应该尽可能快地执行,以减少中断延迟并避免其他高优先级中断被阻塞。 - 使用中断屏蔽机制可以防止不必要的中断打扰当前正在处理的中断。 - 在中断服务程序中,应确保正确更新中断标志,以便中断控制器知道中断已被处理。 此外,`main()`函数中的循环是为了模拟应用程序的执行,LED灯的翻转表示程序的运行状态。当定时器0的中断发生时,`_irqTIMER0()`函数会被调用,处理中断事件。 中断是嵌入式系统中实现异步通信和实时响应的关键机制。通过理解OMAP-L138上的中断控制器以及如何配置和管理中断,我们可以更有效地设计和优化基于C6748 DSP的应用。
- zhaojiangboo2014-10-13好不容易才找到,还不错,挺有帮助的。
- flt11192014-02-13谢谢,很好的入门教程
- 粉丝: 6
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言-leetcode题解之70-climbing-stairs.c
- C语言-leetcode题解之68-text-justification.c
- C语言-leetcode题解之66-plus-one.c
- C语言-leetcode题解之64-minimum-path-sum.c
- C语言-leetcode题解之63-unique-paths-ii.c
- C语言-leetcode题解之62-unique-paths.c
- C语言-leetcode题解之61-rotate-list.c
- C语言-leetcode题解之59-spiral-matrix-ii.c
- C语言-leetcode题解之58-length-of-last-word.c
- 计算机编程课程设计基础教程