📄 timer.h
字号:
/*
===============================================================================
// TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION
//
// Property of Texas Instruments
// For Unrestricted Internal Use Only
// Unauthorized reproduction and/or distribution is strictly prohibited.
// This product is protected under copyright law and trade secret law
// as an unpublished work.
// Created 1999, (C) Copyright 1999 Texas Instruments. All rights reserved.
//
//
// Filename : timer.h
//
// Description : Header file for the arm9 Timers (ostimer1, ostimer2,
// ostimer3, wdgtimer)
//
// Project : omap3
//
// Author : Daniel Blanc dblanc@tif.ti.com
// Modified for omap3 by Arnaud Balmelle (a-balmelle@ti.com)
// - Added OSTIMER3 for OMAP3
//
===============================================================================
*/
#ifndef _TIMER__HH
#define _TIMER__HH
#include "top.h"
#include "mem.h"
/*------------------------------------------------------------------------
WATCHDOG TIMER REGISTER -
------------------------------------------------------------------------
*/
/* CNT register */
/*---------------*/
#define WDGTIMER_CNTL_SUP_REG REG32(MEM_WATCH_DOG_TIMER_SUPERVISOR_ADDR)
#define WDGTIMER_CNTL_USR_REG REG32(MEM_WATCH_DOG_TIMER_USER_ADDR)
/* debug mode Suspended or running free Mask */
#define WDGTIMER_FREE_MASK 0x0002
/* State Stopped/Started Mask */
#define WDGTIMER_ST_MASK 0x0080
/* AutoReload/One Shot mode Mask */
#define WDGTIMER_AR_MASK 0x0100
/* Prescale Timer Value Mask */
#define WDGTIMER_PTV_MASK 0x0e00
/* Control Timer bit position */
#define WDGTIMER_FREE_BITPOS 1
#define WDGTIMER_ST_BITPOS 7
#define WDGTIMER_AR_BITPOS 8
#define WDGTIMER_PTV_BITPOS 9
/* LOAD_TIM an READ_TIM registers */
/*-------------------*/
/* Timer load register (WRITE only) */
#define WDGTIMER_LOAD_REG REG32((MEM_WATCH_DOG_TIMER_SUPERVISOR_ADDR + 0x04))
/* Timer read register (READ only) */
#define WDGTIMER_READ_REG REG32((MEM_WATCH_DOG_TIMER_USER_ADDR + 0x04))
/* TIMER_MODE register
-----------------------*/
#define WDGTIMER_MODE_USR_REG REG32((MEM_WATCH_DOG_TIMER_USER_ADDR + 0x08))
#define WDGTIMER_MODE_SUP_REG REG32((MEM_WATCH_DOG_TIMER_SUPERVISOR_ADDR + 0x08)) // MHV
#define WDGTIMER_DIS_MASK 0x00ff /* watch dog disable mask */
#define WDGTIMER_WDOG_MASK 0x8000 /* watch dog mask */
/* LABEL for
-----------------------*/
#define WDG_MODE TRUE
#define TIMER_MODE FALSE
/* Control Timer Register bit pos */
/*----------------------------------------------------------------------
OSTIMER COMMON INFO
------------------------------------------------------------------------
*/
#define OSTIMER_ST_BITPOS 0
#define OSTIMER_AR_BITPOS 1
#define OSTIMER_PTV_BITPOS 2
#define OSTIMER_CLKEN_BITPOS 5
#define OSTIMER_FREE_BITPOS 6
#define OSTIMER_SOFT_BITPOS 7
/* State Stopped/Started Mask */
#define OSTIMER_ST_MASK 0x00000001
/* AutoReload/One Shot mode Mask */
#define OSTIMER_AR_MASK 0x00000002
/* Prescale Timer Value Mask */
#define OSTIMER_PTV_MASK 0x0000001C
/* External clock enable Mask */
#define OSTIMER_CLKEN_MASK 0x00000020
/* debug mode Suspended or running free Mask */
#define OSTIMER_FREE_MASK 0x00000040
/* Soft bit Mask */
#define OSTIMER_SOFT_MASK 0x00000080
/*----------------------------------------------------------------------
OSTIMER1 REGISTERS
------------------------------------------------------------------------
*/
/* CNT register */
/*---------------*/
#define OSTIMER1_CNTL_SUP_REG REG32(MEM_TIMER_1_SUPERVISOR_ADDR)
#define OSTIMER1_CNTL_USR_REG REG32(MEM_TIMER_1_USER_ADDR)
/* LOAD_TIM an READ_TIM registers */
/*-------------------*/
/* Timer load register (WRITE only) */
#define OSTIMER1_LOAD_REG REG32((MEM_TIMER_1_SUPERVISOR_ADDR + 0x04))
/* Timer read register (READ only) */
#define OSTIMER1_READ_LOAD_REG REG32((MEM_TIMER_1_USER_ADDR + 0x04))
/* Timer read register (READ only) */
#define OSTIMER1_READ_REG REG32((MEM_TIMER_1_USER_ADDR + 0x08))
/*----------------------------------------------------------------------
OSTIMER2 REGISTERS
------------------------------------------------------------------------
*/
/* CNT register */
/*---------------*/
#define OSTIMER2_CNTL_SUP_REG REG32(MEM_TIMER_2_SUPERVISOR_ADDR)
#define OSTIMER2_CNTL_USR_REG REG32(MEM_TIMER_2_USER_ADDR)
/* LOAD_TIM an READ_TIM registers */
/*-------------------*/
/* Timer load register (WRITE only) */
#define OSTIMER2_LOAD_REG REG32((MEM_TIMER_2_SUPERVISOR_ADDR + 0x04))
/* Timer read register (READ only) */
#define OSTIMER2_READ_LOAD_REG REG32((MEM_TIMER_2_USER_ADDR + 0x04))
/* Timer read register (READ only) */
#define OSTIMER2_READ_REG REG32((MEM_TIMER_2_USER_ADDR + 0x08))
/*----------------------------------------------------------------------
OSTIMER3 REGISTERS
------------------------------------------------------------------------
*/
/* CNT register */
/*---------------*/
#define OSTIMER3_CNTL_SUP_REG REG32(MEM_TIMER_3_SUPERVISOR_ADDR)
#define OSTIMER3_CNTL_USR_REG REG32(MEM_TIMER_3_USER_ADDR)
/* LOAD_TIM an READ_TIM registers */
/*-------------------*/
/* Timer load register (WRITE only) */
#define OSTIMER3_LOAD_REG REG32((MEM_TIMER_3_SUPERVISOR_ADDR + 0x04))
/* Timer read register (READ only) */
#define OSTIMER3_READ_LOAD_REG REG32((MEM_TIMER_3_USER_ADDR + 0x04))
/* Timer read register (READ only) */
#define OSTIMER3_READ_REG REG32((MEM_TIMER_3_USER_ADDR + 0x08))
//---------------------------------
// definition for test
// and return status
//----------------------------------
//Reset value of ostimer cntl register
#define MASK_OSTIMER_CNTL_RESET 0x0000007F
#define OSTIMER_CNTL_RESET 0x00000000
// Reset value of wdg cntl register
#define MASK_WDG_CNTL_RESET 0x0F82
#define WDGTIMER_CNTL_RESET 0x0002
// Reset value of wdg cntl register
#define MASK_WDG_TIMER_RESET 0xFFFF
#define WDGTIMER_RESET 0xFFFF
#define WDG_RESET_MODE WDG_MODE
/*-----------------------------------------------------------
*/
/*-----------------------------------------------
TIMER_NAME_t
specifies the name of the timer
on which we are going to work
-------------------------------------------------------------
*/
typedef enum {
OSTIMER1 = 0, /* */
OSTIMER2 = 1, /* */
OSTIMER3 = 2, /* */
WDGTIMER = 3 /* */
} TIMER_NAME_t;
/*
----------------------------------------------------------------
TIMER_FREE_t
Specifies whether the timer is suspended while in debug mode
or the timer runs free, regardless of nsuspend value
----------------------------------------------------------------
*/
typedef enum {
TIMER_FROZEN = 0, /* Timer in Debug mode */
TIMER_FREE = 1 /* Timer Runs free */
} TIMER_FREE_t;
/*
------------------------------------------------------
TIMER_STATE_t
Specifies whether the timer is running or not
------------------------------------------------------
*/
typedef enum {
TIMER_STOPPED = 0,
TIMER_STARTED = 1
} TIMER_STATE_t;
/*
-------------------------------------------------------------
TIMER_MODE_t
specifies the auto-initialization mode which the Timer
can automatically reinitializes itself after timeout
-------------------------------------------------------------
*/
typedef enum {
TIMER_ONESHOT_MODE = 0, /* Timer Stops when reach zero */
TIMER_AUTORELOAD_MODE = 1 /* Timer Restarts when reach zero */
} TIMER_MODE_t;
/*
---------------------------------------------------------------
TIMER_SCALER_t
Pre-scaler field value used jointly with the load value
to define the timer interrupt period
---------------------------------------------------------------
*/
typedef enum {
TIMER_PRE_SCALE_2 = 0, /* for Lowest period */
TIMER_PRE_SCALE_4 = 1,
TIMER_PRE_SCALE_8 = 2,
TIMER_PRE_SCALE_16 = 3,
TIMER_PRE_SCALE_32 = 4,
TIMER_PRE_SCALE_64 = 5,
TIMER_PRE_SCALE_128 = 6,
TIMER_PRE_SCALE_256 = 7 /* for Highest period */
} TIMER_SCALER_t;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Functions provided
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//-------------------------------------------------------------------------------
// Be carreful to use after DisableWdg
//-------------------------------------------------------------------------------
// NAME : TIME_SetupTimer -
// DESCRIPTION : Setup the timer configuration -
// SYNOPSYS : void ConfigureTimer ( TIMER_NAME_t TimerName,
// UWORD32 LoadValue, -
// TIMER_MODE_t TimerMode, -
// TIMER_SCALER_t TimerScaler) -
// PARAMETERS : -
// TimerName = Precise on which timer we work
// OSTIMER1
// OSTIMER2
// OSTIMER3
// WDGTIMER
//
// -
// LoadValue = Timer setup value is loaded when timer passes through 0 -
// or when it starts -
// -
// TimerMode = Specify the timer mode (only used for watchdog timer) -
// -TIMER_ONESHOT_MODE => the timer decrements from the loaded value to zero -
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -