如果喂狗一切都挺好,但是如果不喂狗,为什么没有出现-复位cpu,程序重新开始运行,而是整个ccs卡了
如果我运行的是c6748的程序的话,就是能重新开始的,好奇怪。是哪里有问题?程序如下:
/*
* main.c
*/
#include "C6747.h"
#include "C6747_gpio.h"
#include "stdio.h"
void TimerInit(void)
{
TIMER1_TGCR = 0x0000001B; // 启用新特性;64Bit看门狗模式;定时器12,34退出复位
TIMER1_TIM12 = 0;
TIMER1_TIM34 = 0; // 计数寄存器timer counter register0
TIMER1_PRD12 = 0x0fff; // 设定的周期值timer period register
TIMER1_PRD34 = 0;
TIMER1_WDTCR = (TIMER1_WDTCR & ( 0x0000ffff ) | ( 0xA5C60000 ));
TIMER1_WDTCR = (TIMER1_WDTCR & ( 0x0000ffff ) | ( 0xDA7E0000 ));
TIMER1_WDTCR = 0x0000C000; // 使能看门狗定时器
// 清除看门狗标识位
}
void TimerWatchReactivate(void)
{
TIMER1_WDTCR = (TIMER1_WDTCR & ( 0x0000ffff ) | ( 0xA5C60000 ));
TIMER1_WDTCR = (TIMER1_WDTCR & ( 0x0000ffff ) | ( 0xDA7E0000 ));
}
int main(void)
{
/*初始化C6747核*/
C6747_init();//此处仅初始化EMIFA,GPIO
GPIO_DIR23=0;//设置IO为输出
/*配置定时器*/
TimerInit();
printf("%d\n",1);
for(;;)
{
GPIO_OUT_DATA23 = 0x0800;
printf("%d\n",2);
TimerWatchReactivate();
}
}
zhang yuexin:
回复 Shine:
额。。可是为什么c6748的可以呢,我把c6748的starterware里的看门狗例程烧到了c6747里,然后用ccs观察,它能不断重新运行,因为设了断点,可以看到定时器过一会就初始化了
程序如下,串口部分我什么也没做:
/****************************************************************************/
/**/
/*看门狗定时器测试*/
/**/
/*2014年06月03日*/
/**/
/****************************************************************************/
// 注意:I2C0, Timer64P0/P1, RTC, USB2.0 PHY, McASP0 serial clock 这些外设
//包括看门狗定时器(定时器 / 计数器 1)的时钟来源于 PLL 旁路时钟
//即 晶体振荡器的时钟 24MHz#include "TL6748.h"// 创龙 DSP6748 开发板相关声明
#include "hw_types.h"// 宏命令
#include "hw_syscfg0_C6748.h"// 系统配置模块寄存器
#include "soc_C6748.h"// DSP C6748 外设寄存器
#include "psc.h"// 电源与睡眠控制宏及设备抽象层函数声明
#include "gpio.h"// 通用输入输出口宏及设备抽象层函数声明
#include "timer.h"// 定时器 / 计数器宏及设备抽象层函数声明
#include "interrupt.h"// DSP C6748 中断相关应用程序接口函数声明及系统事件号定义#include "uartStdio.h"// 串口标准输入输出终端函数声明
/****************************************************************************/
/**/
/*宏定义*/
/**/
/****************************************************************************/
// 软件断点
#define SW_BREAKPOINTasm(" SWBP 0 ");// 看门狗定时器周期
// 定时时间 5秒
// 低32位
#define TMR_PERIOD_LSB32(0x07270E00)
// 高32位
#define TMR_PERIOD_MSB32(0x0)/****************************************************************************/
/**/
/*全局变量*/
/**/
/****************************************************************************//****************************************************************************/
/**/
/*函数声明*/
/**/
/****************************************************************************/
// 定时器 / 计数器初始化
void TimerWatchDogInit(void);/****************************************************************************/
/**/
/*主函数*/
/**/
/****************************************************************************/
int main(void)
{// 初始化串口终端 使用串口2UARTStdioInit();
// 定时器 / 计数器初始化TimerWatchDogInit();
// 打印串口终端信息UARTPuts("\r\n\r\nTronlong WatchDog Application……\r\n\r\n", -2);UARTPuts("System is Reset!\r\n\r\n", -2);UARTPuts("If not any character inputs in every 5 seconds, I will reset……\r\n", -2);
// 主循环for(;;){// 等待输入字符UARTPutc(UARTGetc());
// 复位看门狗定时器 “喂狗”TimerWatchdogReactivate(SOC_TMR_1_REGS);}
}/****************************************************************************/
/**/
/*定时器 / 计数器初始化*/
/**/
/****************************************************************************/
void TimerWatchDogInit(void)
{// 配置 定时器 / 计数器 1 为 看门狗模式TimerConfigure(SOC_TMR_1_REGS, TMR_CFG_64BIT_WATCHDOG);
// 设置周期 64位TimerPeriodSet(SOC_TMR_1_REGS, TMR_TIMER12, TMR_PERIOD_LSB32);TimerPeriodSet(SOC_TMR_1_REGS, TMR_TIMER34, TMR_PERIOD_MSB32);
// 使能看门狗定时器TimerWatchdogActivate(SOC_TMR_1_REGS);
}