📄 wdt.c
字号:
/**********************************************************************
* Copyright (c) 2002 Sharp Microelectronics of the Americas
*
* All rights reserved
*
* $Workfile: wdt.c $
* $Revision: 1.0 $
* $Author: ZhangJ $
* $Date: Oct 20 2004 09:34:04 $
*
* SHARP MICROELECTRONICS OF THE AMERICAS MAKES NO REPRESENTATION
* OR WARRANTIES WITH RESPECT TO THE PERFORMANCE OF THIS SOFTWARE,
* AND SPECIFICALLY DISCLAIMS ANY RESPONSIBILITY FOR ANY DAMAGES,
* SPECIAL OR CONSEQUENTIAL, CONNECTED WITH THE USE OF THIS SOFTWARE.
*
* SHARP MICROELECTRONICS OF THE AMERICAS PROVIDES THIS SOFTWARE SOLELY
* FOR THE PURPOSE OF SOFTWARE DEVELOPMENT INCORPORATING THE USE OF A
* SHARP MICROCONTROLLER OR SYSTEM-ON-CHIP PRODUCT. USE OF THIS SOURCE
* FILE IMPLIES ACCEPTANCE OF THESE CONDITIONS.
*
* Project: LH79520 EVB Example Code
*
* Description:
* This example shows how to use WDT driver
*
* Notes:
*
* Revision History:
* $Log: //smaicnt2/pvcs/VM/sharpmcu/archives/sharpmcu/software/csps/lh79524/bsps/sdk79524/examples/wdt/wdt.c-arc $
*
* Rev 1.0 Oct 20 2004 09:34:04 ZhangJ
* Initial revision.
*
* Rev 1.0 Jul 09 2003 09:17:04 LiJ
* Initial revision.
*
*
*********************************************************************/
#include "lh79524_int_driver.h"
#include "lh79524_wdt_driver.h"
#include "sdk79524_board.h"
#define LED_ADDR CPLD_LED
STATIC INT_32 dev_wdt = 0;
STATIC volatile INT_32 wdt_occured = 0, wdt_count = 0;
/**********************************************************************
*
* Function: wdt_int_handler
*
* Purpose:
* Watch dog timer interruption handler
*
* Processing:
*
* Parameters:
* None
*
* Outputs:
* None
*
* Returns:
* Nothing
*
* Notes:
* None
*
**********************************************************************/
void wdt_int_handler(void)
{
/* Clear WDT int */
wdt_ioctl(dev_wdt, WDT_RESET, 0);
/* Set indication bit */
wdt_occured = 1;
/* Increase WDT count */
wdt_count++;
}
/**********************************************************************
*
* Function: c_entry
*
* Purpose:
* Function entry point from the startup code.
*
* Processing:
*
*
* Parameters:
* None
*
* Outputs:
* None
*
* Returns:
* Nothing
*
* Notes:
* None
*
**********************************************************************/
INT_32 c_entry (void)
{
INT_32 dev_fiq;
UNS_32 temp, temp1;
/* Open FIQ */
if ((dev_fiq = fiq_open(0,0)) == 0x0)
{
/* Error opening the device */
return 0;
}
/* Open WDT */
if ((dev_wdt = wdt_open(WDTIMER,0)) == 0x0)
{
/* Error opening the device */
return 0;
}
/* Enable FIQ source */
fiq_ioctl(dev_fiq, FIQ_ENABLE_SOURCE, VIC_WDT);
/* Set up interruption handler */
fiq_ioctl(dev_fiq, FIQ_SET_HANDLER, (INT_32)wdt_int_handler);
/* Clear existing WDT interrupt if there is */
wdt_ioctl(dev_wdt, WDT_CLEAR_INT, 0);
/* Set WDT int first on time out */
wdt_ioctl(dev_wdt, WDT_INT_ON_TIMEOUT, 0);
// wdt_ioctl(dev_wdt, WDT_RESET_ON_TIMEOUT, 0);
/* Set WDT count */
/* Setup WDT for a PCLK count of 2**(16 + 6) clocks per tick */
wdt_ioctl(dev_wdt, WDT_SET_COUNT, 0x6);
/* Enable global FIQ bit */
fiq_ioctl(dev_fiq, FIQ_GLOBAL_ENABLE, 1);
/* Enable WDT */
wdt_ioctl(dev_wdt, WDT_ENABLE, 0);
/* Clear WDT count */
wdt_count = 0;
/* Clear WDT on time and it won'g generate INT */
for (temp = 1; temp <100; temp ++)
{
for(temp1 = 0; temp1 < 10000; temp1++);
/* Clear WDT, so it won't generate INT */
wdt_ioctl(dev_wdt, WDT_RESET, 0);
/* Set LED */
(LED_ADDR) = wdt_count++;
}
/* Disable WDT */
wdt_ioctl(dev_wdt, WDT_DISABLE, 0);
/* Enable WDT */
wdt_ioctl(dev_wdt, WDT_ENABLE, 0);
/* Clear WDT count */
wdt_count = 0;
/* Let WDT generate INT */
for (temp = 1; temp <50; temp ++)
{
/* Wait until interrupt occured */
while(wdt_occured == 0);
/* Set LED */
(LED_ADDR) = wdt_count;
/* Clear indication bit */
wdt_occured = 0;
}
/* Done with the example, close the device */
/* Disable WDT */
wdt_ioctl(dev_wdt, WDT_DISABLE, 0);
/* Disable FIQ source */
fiq_ioctl(dev_fiq, FIQ_DISABLE_SOURCE, VIC_WDT);
/* Remove FIQ handler */
fiq_ioctl(dev_fiq, FIQ_REMOVE_HANDLER, VIC_WDT);
/* Disable global FIQ bit */
fiq_ioctl(dev_fiq, FIQ_GLOBAL_ENABLE, 0);
/* Close WDT */
wdt_close(dev_wdt);
/* Close FIQ */
fiq_close(dev_fiq);
return 1;
}
#ifdef __iar
void main(void)
{
c_entry();
while(1);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -