DSP28335内部看门狗无效

DSP28335内部看门狗无效

此问题尚无答案
All Replies
  • 秀才290分

    #include "DSP2833x_Device.h" // Headerfile Include File
    #include "DSP2833x_Examples.h" // Examples Include File

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

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

    #define LED1 GpioDataRegs.GPADAT.bit.GPIO0
    #define LED2 GpioDataRegs.GPADAT.bit.GPIO1
    #define LED3 GpioDataRegs.GPADAT.bit.GPIO2
    #define LED4 GpioDataRegs.GPADAT.bit.GPIO3
    #define LED5 GpioDataRegs.GPADAT.bit.GPIO4
    void configtestled(void);
    void main(void)
    {

    // Step 1. Initialize System Control:
    // PLL, WatchDog, enable Peripheral Clocks
    // This example function is found in the DSP2833x_SysCtrl.c file.
    InitSysCtrl();

    // Step 2. Initalize GPIO:
    // This example function is found in the DSP2833x_Gpio.c file and
    // illustrates how to set the GPIO to it's default state.
    // InitGpio(); // Skipped for this example

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

    // Initialize 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
    // This function is found in DSP2833x_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.WAKEINT = &wakeint_isr;
    EDIS; // This is needed to disable write to EALLOW protected registers

    // Step 4. Initialize all the Device Peripherals:
    // This function is found in DSP2833x_InitPeripherals.c
    // InitPeripherals(); // Not required for this example

    // Step 5. User specific code, enable interrupts:
    configtestled();
    // Clear the counters
    WakeCount = 0; // Count interrupts
    LoopCount = 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 bit
    // EALLOW;
    // SysCtrlRegs.SCSR = BIT1;

    // EDIS;
    LED1=0;
    LED2=0;
    LED3=0;
    LED4=0;
    LED5=0;
    // 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 Gropu 1 INT8
    IER |= M_INT1; // Enable CPU int1
    EINT; // Enable Global Interrupts

    // Reset the watchdog counte
    LED1=~LED1;
    // DELAY_US(100000);

    EALLOW;
    SysCtrlRegs.SCSR = 1;
    EDIS;
    ServiceDog();
    EALLOW;
    SysCtrlRegs.WDCR = 0x002F;
    EDIS;
    // Enable the watchdog

    // Step 6. IDLE loop. Just sit and loop forever (optional):
    for(;;)
    {
    LoopCount++;

    // Uncomment ServiceDog to just loop here
    // Comment ServiceDog to take the WAKEINT instead

    //ServiceDog();
    }

    }
    void configtestled(void)
    {
    EALLOW;
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能
    GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0设置为输出
    GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1
    GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
    GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; // GPIO0复用为GPIO功能
    GpioCtrlRegs.GPADIR.bit.GPIO2 = 1; // GPIO0设置为输出
    GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; // GPIO1 = GPIO1
    GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;
    GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; // GPIO1 = GPIO1
    GpioCtrlRegs.GPADIR.bit.GPIO4 = 1;
    EDIS;
    }

    // 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++;

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

  • 榜眼24206分

    您好,

    建议看下数据手册http://www.ti.com.cn/cn/lit/ug/sprufb0d/sprufb0d.pdf  5.4.2章节 看门狗复位或中断方式设置。

  • 状元38686分

    我觉得最简单的方法就是在while死循环前面增加一句IO取反输出的控制   

    然后打开看门狗    在不喂狗的情况下    你测试IO口如果能够取反输出   

    说明看门狗工作正常   然后查中断的问题

    TI的忠诚粉丝!