⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wdt.c

📁 SHARP_ARM720T_LH79524/5软件开发包_支持TFT_LCD_NAND_FLASH_ETH_USB
💻 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 + -