### TMS320F2812系统中的软件复位方法
#### 一、引言
TMS320F2812(简称2812)是德州仪器(TI)公司推出的高性能数字信号处理器(DSP),适用于多种工业控制应用场景。其强大的运算能力和丰富的片上资源使其成为控制系统开发的优选平台。为了确保系统的稳定运行,通常会集成电压监控或看门狗电路。本文将详细介绍如何在TMS320F2812系统中实现软件复位,并探讨几种不同的实现方法。
#### 二、看门狗复位机制
看门狗电路是一种常用的硬件监控机制,它能够在系统出现异常时强制复位系统。在没有用户界面或复位按钮的情况下,可以通过软件手段来触发看门狗,从而达到复位的目的。2812支持多种看门狗复位方法,包括:
##### 1. 硬件看门狗带喂狗端口
在本方案中,采用了带喂狗端口的看门狗芯片(例如MAX706),并通过不断地向芯片发送脉冲信号来保持看门狗不触发复位。当需要软件复位时,可以通过停止脉冲信号,使看门狗芯片触发系统复位。
**端口初始化程序示例**:
```c
void InitGpio(void){
EALLOW; // 允许访问受保护的寄存器
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0 = 0;
EDIS; // 禁止访问受保护的寄存器
}
```
**喂狗程序示例**:
```c
void KickDog(void){
GpioMuxRegs.GPADIR.bit.GPIOA0 ^= 1; // 反转GPIOA0的状态
}
```
**通信复位命令处理**:
```c
if ((recpack[port].data[0] == 'R') && (recpack[port].data[1] == 'S') && (recpack[port].data[2] == 'T')) {
DINT; // 关闭所有中断
while(1); // 挂起CPU,等待看门狗复位
}
```
##### 2. 看门狗芯片不带喂狗端口
对于不带喂狗端口的看门狗芯片(例如MAX708),可以在系统接收到复位命令后,通过控制2812的某个GPIO引脚输出低电平来触发复位。
**端口初始化程序示例**:
```c
void InitGpio(void){
EALLOW; // 允许访问受保护的寄存器
GpioMuxRegs.GPFMUX.bit.XF_GPIOF14 = 0;
GpioMuxRegs.GPFDIR.bit.GPIOF14 = 1; // 设置GPIOF14为输出
EDIS; // 禁止访问受保护的寄存器
}
```
**通信复位命令处理示例**:
```c
if ((recpack[port].data[0] == 'R') && (recpack[port].data[1] == 'S') && (recpack[port].data[2] == 'T')) {
GpioDataRegs.GPFDAT.bit.GPIOF14 = 0; // 使GPIOF14输出低电平
}
```
##### 3. 软件看门狗复位方式
2812内置了软件看门狗模块,可以通过配置寄存器来启用软件看门狗。软件看门狗有两种工作模式:中断唤醒模式(WDINT)和复位模式(WDRST)。
- **中断唤醒模式**:在此模式下,如果软件看门狗计数器溢出,则会产生一个中断请求,程序可以通过中断服务程序来处理复位操作。
- **复位模式**:在此模式下,如果软件看门狗计数器溢出,则会立即复位整个系统。
**配置软件看门狗**:
```c
void ConfigWatchdog(void){
EALLOW; // 允许访问受保护的寄存器
WatchdogRegs.WDCR.all = 0x5555; // 解锁看门狗寄存器
WatchdogRegs.WDKEY.bit.COUNT = 0x1F; // 设置计数器值
WatchdogRegs.WDKEY.bit.PERIOD = 0x00; // 设置周期
WatchdogRegs.WDCR.bit.RSTMOD = 1; // 选择复位模式
WatchdogRegs.WDCR.bit.WDEN = 1; // 启用看门狗
EDIS; // 禁止访问受保护的寄存器
}
```
#### 三、总结
本文详细介绍了在TMS320F2812系统中实现软件复位的方法,包括使用带喂狗端口的看门狗芯片、不带喂狗端口的看门狗芯片以及利用2812内置的软件看门狗功能。通过这些方法,可以有效地实现远程复位或自动复位功能,提高系统的可靠性和可维护性。