最新dsp原理与应用-第四章时钟,中断,看门狗
- 格式:ppt
- 大小:2.83 MB
- 文档页数:50
dsp 看门狗定时器的作用解析
一、DSP 看门狗定时器介绍
看门狗在外围监控DSP 中软件的运行以及硬件的操作,当CPU 出现故障时,看门狗将执行系统复位。
如果软件进入了一个不正确的循环或者CPU 出现暂时的混乱,看门狗定时器将出现溢出来使系统复位。
在大多数情况下,DSP 短暂的混乱以及CPU 不正确的操作都可以被看门狗所清除并重新进行设置。
由于看门狗稳定的性能,其增加了CPU 的可靠性,以确保系统的完整。
在看门狗中这个外围设备中,所有的寄存器都是8 位的,连接到16 位CPU 的低8 位外围数据总线上。
240XA 看门狗定时器和C240 看门狗定时器唯一的区别就是其缺乏实时的中断能力。
看门狗定时器将通过对从CPU 出来的CLKOUT 进行分频而得到自己所需的时钟
二、看门狗定时器工作原理
使用时,WDT 将递增,直到溢出,或称超时。
除非处于休眠或空闲模式,WDT 超时会强制器件复位。
为避免WDT 超时复位,用户必须定期用。
DSP之时钟学习先说软件设置:时钟倍频Initpll在DSP280X_SysCtrl.c文件中的系统初始化函数InitSysCtrl();中设置。
void InitSysCtrl(void){//Disable the watchdogDisableDog();//首先应该关看门狗//Initialize the PLL control:PLLCR and CLKINDIV//DSP28_PLLCR and DSP28_CLKINDIV are defined in DSP280x_Examples.hInitPll(DSP28_PLLCR,DSP28_CLKINDIV);//PLL时钟设置InitPeripheralClocks();//外设时钟启动}//注:DSP28_PLLCR,DSP28_CLKINDIV这两个变量就是指定PLL倍频的数据,在DSP280x_Examples.h头文件中宏定义的,但是可以在此头文件中去修改这两个数值。
如下就是宏定义的原型。
#define DSP28_CLKINDIV0//Enable/2for SYSCLKOUT//#define DSP28_CLKINDIV1//Disable/2for SYSCKOUT//#define DSP28_PLLCR10//#define DSP28_PLLCR9//#define DSP28_PLLCR8//#define DSP28_PLLCR7#define DSP28_PLLCR6//#define DSP28_PLLCR5//#define DSP28_PLLCR4//#define DSP28_PLLCR3//#define DSP28_PLLCR2//#define DSP28_PLLCR1//#define DSP28_PLLCR0//PLL is bypassed in this mode//Initialize the peripheral clocks进出CPU时钟CLKIN可以是PLL关闭可以是PLL旁路,还可以是PLL使能注:·晶振操作:此模式允许使用外部为器件提供时基。
// Step 5、用户特定函数,重新分配向量(可选择),使能中断: // 重新为WAKEINT 分配 PIE 向量,并指向相应的中断服务程序 EALLOW; PieVectTable.WAKEINT = &wakeint_isr; EDIS; // 使能WAKEINT 的中断INT1 IER |= M_INT1; // 使能 PieCtrlRegs.PIEIER1.bit.INTx8 = 1; // 对程序状态寄存器进行操作,避免清除WDOVERRIDE 标识位 EALLOW; SysCtrlRegs.SCSR.all = BIT1; EDIS; // 计数器清零 WakeCount = 0; // 中断计数 LoopCount = 0; // 循环计数 BP106 36// 使能全局中断,并配置为real-time debug 模式 EINT; // 使能全局中断INTM ERTM; // 使能全局 realtime 中断DBGM // Step 6、主循环 for(;; { LoopCount++; //用KickDog 操作看门狗Key 寄存器,避免产生WAKEINT 中断 // 通常情况下,需要在主循环或定时中断中对Key 进行操作 KickDog(; } } WAKEINT:位于PIE 的组1 的第8 中断 BP106 37// Step 7、中断服务程序 interrupt void wakeint_isr(void { WakeCount++; // 响应中断 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; } //--------------------------------------------------------------------------// KickDog: 此函数复位看门狗定时器 voidKickDog(void { EALLOW; SysCtrlRegs.WDKEY = 0x0055; SysCtrlRegs.WDKEY = 0x00AA; EDIS; } BP107 38void InitSysCtrl(void // 系统初始化 { Uint16 i; EALLOW; // 禁止看门狗模块 // SysCtrlRegs.WDCR= 0x0068; // 本例中不使用 //初始化锁相环 SysCtrlRegs.PLLCR = 0xA; // 等待锁相环稳定 for(i= 0; i< 5000; i++{} // HISPCP/LOSPCP 预定标寄存器设置 SysCtrlRegs.HISPCP.all = 0x0001; SysCtrlRegs.LOSPCP.all = 0x0002; // 使能选择的外设时钟 // 对于不用的时钟,一般情况下需要禁止相应的中断SysCtrlRegs.PCLKCR.bit.EVAENCLK=1; SysCtrlRegs.PCLKCR.bit.EVBENCLK=1; SysCtrlRegs.PCLKCR.bit.SCIENCLKA=1; //SysCtrlRegs.PCLKCR.bit.SCIENCLKB=1; EDIS; BP107 } 39。