hal_wdt.c

来自「最新版IAR FOR ARM(EWARM)5.11中的代码例子」· C语言 代码 · 共 89 行

C
89
字号
/**********************************************************************************/
/*                                                                                */
/*    Copyright (C) 2006 Oki Electric Industry Co., LTD.                          */
/*                                                                                */
/*    System Name    :  ML675050 series                                           */
/*    Module Name    :  ML675050 system WDT HAL program                           */
/*    File   Name    :  hal_wdt.c                                                 */
/*    Revision       :  01.00                                                     */
/*    Date           :  2006/1/25 initial version                                 */
/*                                                                                */
/**********************************************************************************/
#if defined(__arm)
#include "ml675050.h"
#elif defined(_WIN32)
#include "ml675050sim.h"
#else
#error COMPILER ERROR
#endif

#include "common.h"
#include "hal_common.h"
#include "hal_interrupt.h"
#include "hal_wdt.h"

/***********************************/
/*    type definition              */
/***********************************/
#define WDT_UN_WRITE_PROTECT_VAL_TBGCON (0x5A)

#define WDT_APB_CLK32   (0x00)
#define WDT_APB_CLK64   (0x01)
#define WDT_APB_CLK128  (0x02)
#define WDT_APB_CLK256  (0x03)
#define WDT_APB_CLK512  (0x04)
#define WDT_APB_CLK1024 (0x05)
#define WDT_APB_CLK2048 (0x06)
#define WDT_APB_CLK4096 (0x07)

#define WDT_OVF_INT (0x00)
#define WDT_OVF_RST (0x40)

#define WDT_CNT_CLK_START (0x00)
#define WDT_CNT_CLK_STOP  (0x80)

/***********************************/
/*     Static functions prototype  */
/***********************************/
extern  void _wdt_handler( void );

FP wdt_handler = _wdt_handler;

/*****************************************************************************/
/*                                                                           */
/*  Function Name   : HALWDT_WDTInit                                         */
/*  Input           : mode                                                   */
/*                  : (0)interrupt mode                                      */
/*                  : (1)reset mode                                          */
/*  Output          : HAL_OK(1)                                              */
/*                  : HAL_PARAM_ERROR(-2)                                    */
/*                                                                           */
/*  Note : Initialize WDT.                                                   */
/*                                                                           */
/*****************************************************************************/
int16_t HALWDT_WDTInit( uint16_t mode )
{
    int16_t rtnVal = HAL_OK;
    
    OkiCLib_write32(TBGCON, WDT_UN_WRITE_PROTECT_VAL_TBGCON);                               /* enable writing to TBGCON register */
    OkiCLib_write32(TBGCON, (uint32_t)(WDT_APB_CLK32|((mode<<6)&TBGCON_OFINTMODE)|WDT_CNT_CLK_START));  /* CCLK/256, when WDT overflowed, interrupt occurs */
    
    return rtnVal;
}

/*****************************************************************************/
/*                                                                           */
/*  Function Name   : void wdt_handler( void )                               */
/*  Input           : Noting                                                 */
/*  Output          : Noting                                                 */
/*                                                                           */
/*  Note : WDT handler.                                                      */
/*                                                                           */
/*****************************************************************************/
void _wdt_handler( void )
{
    OkiCLib_clr32bit(INTST, INTST_WDTINT);   /* clear WDT interrupt */
    CALL_BACK_TABLE[INT_WDT](CALLBACK_STATE_NON);  /*  when WDT overflowed, interrupt occurs */
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?