TI中文支持网
TI专业的中文技术问题搜集分享网站

在进入看门狗中断后,写什么指令可以实现系统复位?

在进入看门狗中断后,写什么指令可以实现系统复位?

Johnson Chen1:

为什么不直接配置看门狗产生复位呢?

在进入看门狗中断后,写什么指令可以实现系统复位?

datong fang:

回复 Johnson Chen1:

谢谢你的回答,实际上我是开了看门狗中断的,并没有直接配置成看门狗复位,我希望在进入看门狗中断后,通过写程序来实现系统复位,请问可以这么实现吗?如果可以的话应该如何写呢??

在进入看门狗中断后,写什么指令可以实现系统复位?

Jason Wu4:

回复 datong fang:

一般建议将系统看门狗打开就行,没必要自己写复位程序

在进入看门狗中断后,写什么指令可以实现系统复位?

datong fang:

回复 Jason Wu4:

大哥,我接受你的意见,现在出现了新问题,我现在关闭中断,直接配置复位输出,配置了看门狗计数周期,为了观察是否实现系统复位,

我在程序开始处加一断点,然后运行至一个死循环,让它自由运行,配置使能了看门狗且不喂狗,结果并没有实现复位,PC指针并没有指向断点处。  代码没问题,请问会不会是硬件问题? 我用的是F28377D的开发板

在进入看门狗中断后,写什么指令可以实现系统复位?

datong fang:

回复 Jason Wu4:

代码如下  

#include "F28x_Project.h" // Device Headerfile and Examples Include File

// Prototype statements for functions found within this file.//__interrupt void wakeint_isr(void);//void ServiceDog(void);

// Global variables for this exampleUint32 WakeCount;Uint32 LoopCount;

void main(void){asm (" ESTOP0");// unsigned long delay;// Step 1. Initialize System Control:// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the F2837xD_SysCtrl.c file.InitSysCtrl();asm (" ESTOP0");// Step 2. Initialize GPIO:// This example function is found in the F2837xD_Gpio.c file and// illustrates how to set the GPIO to it's default state.// InitGpio();

// Step 3. Clear all interrupts and initialize PIE vector table:// Disable CPU interruptsDINT;

// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags// are cleared.// This function is found in the F2837xD_PieCtrl.c file.InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).// This will populate the entire table, even if the interrupt// is not used in this example. This is useful for debug purposes.// The shell ISR routines are found in F2837xD_DefaultIsr.c.// This function is found in F2837xD_PieVect.c.InitPieVectTable();

// Interrupts that are used in this example are re-mapped to// ISR functions found within this file.//EALLOW; // This is needed to write to EALLOW protected registers//PieVectTable.WAKE_INT = &wakeint_isr; //EDIS; // This is needed to disable write to EALLOW protected registers

// Step 4. User specific code, enable interrupts:// Clear the countersWakeCount = 0; // Count interruptsLoopCount = 0; // Count times through idle loop// Connect the watchdog to the WAKEINT interrupt of the PIE// Write to the whole SCSR register to avoid clearing WDOVERRIDE bitEALLOW;WdRegs.SCSR.all = 0x00; EDIS;

// Enable WAKEINT in the PIE: Group 1 interrupt 8// Enable INT1 which is connected to WAKEINT://PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block//PieCtrlRegs.PIEIER1.bit.INTx8 = 1; // Enable PIE Group 1 INT8//IER |= M_INT1; // Enable CPU INT1//EINT; // Enable Global Interrupts

// Reset the watchdog counterServiceDog();//EALLOW;// WdRegs.SCSR.all = 0; //使能了看门狗中断输出,禁止了看门狗复位输出// EDIS;// Enable the watchdogEALLOW;WdRegs.WDCR.all = 0x0028; //使能看门狗,并且设置看门狗中断周期EDIS;

// Step 6. IDLE loop. Just sit and loop forever (optional):for(;;){// LoopCount++;//DELAY_US(36000); // 设置12毫秒延时,然后喂狗

//asm (" ESTOP0");// LoopCount++;//ServiceDog(); //喂狗// asm (" ESTOP0");// Uncomment ServiceDog to just loop here// Comment ServiceDog to take the WAKEINT instead// ServiceDog();}}

// Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:// If local ISRs are used, reassign vector addresses in vector table as// shown in Step 5//__interrupt void wakeint_isr(void)//{//WakeCount++;//asm (" ESTOP0");// EALLOW;// WdRegs.WDCR.all = 0; //使能看门狗,并且设置看门狗中断周期// EDIS;//EALLOW;//WdRegs.SCSR.bit.WDENINT=0;//WdRegs.SCSR.bit.WDENINT=1;

//WdRegs.WDCR.bit.WDCHK=0x000;//EDIS;

//asm (" ESTOP0");

// Acknowledge this interrupt to get more from group 1//PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;//}

赞(0)
未经允许不得转载:TI中文支持网 » 在进入看门狗中断后,写什么指令可以实现系统复位?
分享到: 更多 (0)