### TMS320C6X 中断的C语言实现
#### 一、TMS320C6X概述及中断机制
TMS320C6X是德州仪器(TI)公司推出的一款高性能32位数字信号处理器(DSP),主要用于通信领域的复杂计算任务。该系列DSP包括C62x(定点)和C67x(浮点)两种类型,运行频率可达200MHz,拥有8个并行处理单元,能够达到1600MIPS的处理能力。此外,C6X系列集成了64KB的程序存储器和64KB的数据存储器,并配备了4个独立的DMA通道控制器,支持基于C语言的软件开发环境,这极大地便利了开发者的编程工作。
#### 二、TMS320C6X的中断机制详解
##### 2.1 中断源与CPU中断
TMS320C6X提供了丰富的中断源,总计32个。这些中断源涵盖了内部中断(如串行口、并行口、DMA通道、定时器等)和外部中断(EXT-INT4至EXT-INT7)。尽管提供了32个中断源,但实际被CPU处理的中断共有14个,分为三个优先级:最高优先级的RESET中断用于复位操作;次高优先级的NMI(不可屏蔽中断)用于处理严重的硬件错误;最低优先级的INT4至INT15共12个可屏蔽中断,可用于处理来自片内外部设备的中断请求。
用户可以通过配置中断选择寄存器来指定哪些中断源映射到这12个可屏蔽中断上。每个中断源都有一个唯一的中断号,通过将这个号码填入选择寄存器中,就可以将特定的中断源与特定的CPU中断关联起来。
##### 2.2 中断控制寄存器
TMS320C6X包含8个中断相关的控制寄存器,它们分别是:
- **CSR**(Control Status Register):控制状态寄存器,用于全局控制可屏蔽中断。
- **IER**(Interrupt Enable Register):中断使能寄存器,用于单独控制NMI和INT4至INT15的使能状态。
- **IFR**(Interrupt Flag Register):中断标志寄存器,用于显示当前各中断的状态。
- **ISR**(Interrupt Set Register):中断设置寄存器,用于手动设置IFR中的状态位。
- **ICR**(Interrupt Clear Register):中断清除寄存器,用于手动清除IFR中的状态位。
- **ISTP**(Interrupt Vector Table Pointer Register):中断向量表指针寄存器,用于指示中断向量表在内存中的起始地址。
- **NRP**(Non-Returnable Interrupt Return Pointer):非返回型中断返回指针,用于保存NMI中断的程序返回地址。
- **IRP**(Interrupt Return Pointer):中断返回指针,用于保存可屏蔽中断的程序返回地址。
这些寄存器共同协作,确保中断系统的正常运作。
#### 三、中断的C语言实现
##### 3.1 中断设置
对于TMS320C6X,中断设置主要包括以下步骤:
1. **初始化中断向量表指针寄存器**:设置ISTP寄存器,使其指向中断向量表的起始地址。
2. **映射中断源到CPU中断**:将中断源的中断号(isn)映射到内部CPU中断(cpu-intr)。将中断源的中断号填入选择寄存器,然后通过设置寄存器来将中断源映射到内部CPU中断。
3. **配置中断控制寄存器**:根据需要开启或关闭特定中断,调整中断优先级等。
##### 3.2 使用C支持库实现中断
TMS320C6X提供了强大的C支持库,利用这些库中的函数可以轻松地完成中断设置工作,使得程序更加直观和易于理解。例如,可以使用库中的函数来设置中断向量表指针、映射中断源到CPU中断、控制中断的使能状态等。
### 四、总结
TMS320C6X系列DSP以其卓越的性能和丰富的特性,在通信、信号处理等领域得到广泛应用。掌握其中断机制及其C语言实现方法对于高效开发DSP应用程序至关重要。通过对TMS320C6X中断机制的理解以及如何使用C支持库进行中断设置,开发者可以更好地利用这一强大的工具解决实际问题。