亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sngks32ctimer.c

?? 440bx vxworks bsp
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* sngks32cTimer.c - Samsung S3C44B0X timer library */


/* Copyright 1984-2001 Wind River Systems, Inc. */
#include "copyright_wrs.h"

/*
modification history
--------------------
01o,27jul04,a_m  BSP定制 for 多刃劍開發(fā)板
01e,19apr02,m_h  sysAuxClkConnect for THUMB
01d,27sep01,m_h  sysClkRateSet() doesn't change the clock rate
01c,18jul01,m_h  Fix timestamp timer
01b,26apr01,m_h  convert tabs to spaces for readability
01a,12apr01,m_h  created from snds100 template.
*/

/*

DESCRIPTION
This is a timer driver for Samsung's KS32C50100 microprocessor which is
an ARM based processor with several integrated peripherals.
It has an interrupt controller, two 32-bit timers, one Ethernet controller,
two HDLC controllers, one IIC controller, general purpose I/O ports, and a 
2-channel DMA controller.

The 32-bit timers can be programmed in interval mode or toggle mode.  In
interval mode, an output pulse is generated when the countdown value in
the count register reaches  zero.  This will generate a frequency of
(SYSCLK/count).  On the other hand, in the toggle mode, the output toggles
its state for each time the countdown value reaches zero.  In this case, the
output frequency will be (SYSCLK/(2*count)).

The Timer Data register is used to load the countdown value.  When the timer
is enabled using the Timer Mode register, the Timer Count register is loaded
with the count in Timer Data register.  The count value is decremented for every
internal clock edge.  Once the count becomes zero, an interrupt is generated
(if enabled in the interrupt controller) and the Timer Count register is
reloaded automatically.

The internal timer registers are accessed in a straight-forward fashion.
They are accessible as 32-bit integers from the internal system register
offsets, as given in sngks32cTimer.h file.  The macros SNGKS32C_TIMER_REG_WRITE
and SNGKS32C_TIMER_REG_READ does nothing but reading and writing 32-bit
integers from and to the given addresses.

This driver provides 3 main functions, system clock support, auxiliary
clock support, and timestamp timer support.  If necessary, each function
may be conditioned by a separate INCLUDE_ macro.  The timestamp function
is always conditional upon the INCLUDE_TIMESTAMP macro.

The SNGKS32C ARM7 timer register definitions are given in sngks32cTimer.h file.

The macros SYS_CLK_RATE_MIN, SYS_CLK_RATE_MAX, AUX_CLK_RATE_MIN, and
AUX_CLK_RATE_MAX must be defined in sngks32carm7.h to provide parameter checking 
for the sys[Aux]ClkRateSet() routines.

INCLUDES:
sngks32cTimer.h
timestampDev.h

SEE ALSO:
<Samsung KS32C50100 User's Manual>

*/

/* includes */

#include "vxWorks.h"
#include "config.h"
#include "drv/timer/timerDev.h"
#include "drv/timer/timestampDev.h"
#include "sngks32cTimer.h"

/* defines */

/* The default is to assume memory mapped I/O */

#ifndef SNGKS32C_TIMER_REG_READ
#define SNGKS32C_TIMER_REG_READ(reg, result) \
    ((result) = *(volatile UINT32 *)(reg))
#endif /*SNGKS32C_TIMER_READ*/

#ifndef SNGKS32C_TIMER_REG_WRITE
#define SNGKS32C_TIMER_REG_WRITE(reg, data) \
    (*((volatile UINT32 *)(reg)) = (data))
#endif /*SNGKS32C_TIMER_WRITE*/

#ifndef SNGKS32C_TIMER_INT_ENABLE
#define SNGKS32C_TIMER_INT_ENABLE(level) intEnable(level)
#endif

#ifndef SNGKS32C_TIMER_INT_DISABLE
#define SNGKS32C_TIMER_INT_DISABLE(level) intDisable(level)
#endif


/* locals */

LOCAL FUNCPTR sysClkRoutine    = NULL; /* routine to call on clock tick */
LOCAL int sysClkArg            = (int)NULL; /* its argument */
LOCAL int sysClkRunning        = FALSE;
LOCAL int sysClkConnected      = FALSE;
LOCAL int sysClkTicksPerSecond = 60;

LOCAL FUNCPTR sysAuxClkRoutine    = NULL;
LOCAL int sysAuxClkArg            = (int)NULL;
LOCAL int sysAuxClkRunning        = FALSE;
LOCAL int sysAuxClkTicksPerSecond = 100;
LOCAL int sysAuxClkTicks;



#ifdef INCLUDE_TIMESTAMP

LOCAL BOOL      sysTimestampRunning     = FALSE;         /* running flag */
LOCAL FUNCPTR   sysTimestampRoutine     = NULL;          /* routine to call on intr */
LOCAL int       sysTimestampArg         = 0;             /* arg for routine */
      void      sysTimestampInt (void);                  /* forward declaration */

#endif  /* INCLUDE_TIMESTAMP */


/*******************************************************************************
*
* sysClkInt - interrupt level processing for system clock
*
* This routine handles a system clock interrupt.  It acknowledges the
* interrupt and calls the routine installed by sysClkConnect().
*/

void sysClkInt (void)
    {

    /* call system clock service routine */

    if (sysClkRoutine != NULL)
        (* sysClkRoutine) (sysClkArg);
    }


/*******************************************************************************
*
* sysClkConnect - connect a routine to the system clock interrupt
*
* This routine specifies the interrupt service routine to be called at each
* clock interrupt.  Normally, it is called from usrRoot() in usrConfig.c to 
* connect usrClock() to the system clock interrupt.
*
* RETURN: OK, or ERROR if the routine cannot be connected to the interrupt.
*
* SEE ALSO: intConnect(), usrClock(), sysClkEnable()
*/

STATUS sysClkConnect
    (
    FUNCPTR routine,    /* routine to be called at each clock interrupt */
    int arg        /* argument with which to call routine */
    )
    {


    if (sysClkConnected == FALSE)
        {
        /*SNGKS32C_TIMER_REG_WRITE (SNGKS32C_TIMER_TMOD, SNGKS32C_TIMER_INITIALIZE);*/
		/*  : deleted and added */
        /*dead zone=0, pre0=100*/
        SNGKS32C_TIMER_REG_WRITE (S3C44B0X_TCFG0, 0x00000064);
        /*all interrupt, mux0=1/4*/
        SNGKS32C_TIMER_REG_WRITE (S3C44B0X_TCFG1, 0x00000001);
        SNGKS32C_TIMER_REG_WRITE (S3C44B0X_TCON, 0x00000000);
        
        sysHwInit2 ();
        sysClkConnected = TRUE;
        }

    sysClkRoutine   = NULL;
    sysClkArg        = arg;

#if ((CPU_FAMILY == ARM) && ARM_THUMB)
    /* set b0 so that sysClkConnect() can be used from shell */
    sysClkRoutine = (FUNCPTR)((UINT32)routine | 1);
#else
    sysClkRoutine = routine;
#endif /* CPU_FAMILY == ARM */

    return (OK);
    }


/*******************************************************************************
*
* sysClkDisable - turn off system clock interrupts
*
* This routine disables system clock interrupts.
*
* RETURNS: N/A
*
* SEE ALSO: sysClkEnable()
*/

void sysClkDisable (void)
    {

    /*int oier;*/	/*  : deleted */
    
    if (sysClkRunning)
        {
      	/*  : deleted */  
        /*SNGKS32C_TIMER_REG_READ (SNGKS32C_TIMER_TMOD, oier);*/
        /*SNGKS32C_TIMER_REG_WRITE (SNGKS32C_TIMER_TMOD, oier & ~(1));*/
		/*  : added */
		SNGKS32C_TIMER_REG_WRITE (S3C44B0X_TCON, 0x00000000);
		
        /* disable timer interrupt in the interrupt controller */
    
        SNGKS32C_TIMER_INT_DISABLE (SYS_TIMER_INT_LVL);

        sysClkRunning = FALSE;
        }
    }


/*******************************************************************************
*
* sysClkEnable - turn on system clock interrupts
*
* This routine enables system clock interrupts.
*
* RETURNS: N/A
*
* SEE ALSO: sysClkConnect(), sysClkDisable(), sysClkRateSet()
*/

void sysClkEnable (void)
    {
    /*UINT32 oier;*/	/*  : deleted */

    if (!sysClkRunning)
        {

        /*
         * Load the match register with a new value calculated by
         * adding the ticks per interrupt to the current value of the
         * counter register.  Note that this may wraparound to a value
         * less than the current counter value but thats OK.
         */
		/*  : deleted */
        /*SNGKS32C_TIMER_REG_WRITE (SNGKS32C_TIMER_TDATA_0, SYS_TIMER_CLK / sysClkTicksPerSecond);*/
        /*SNGKS32C_TIMER_REG_READ (SNGKS32C_TIMER_TMOD,oier);*/
        /*SNGKS32C_TIMER_REG_WRITE (SNGKS32C_TIMER_TMOD, oier|1);*/

		/*  : added */
		/*set T0 count*/
		SNGKS32C_TIMER_REG_WRITE (S3C44B0X_TCNTB0, (165*(1000/sysClkTicksPerSecond)));
        /*update T0*/
        SNGKS32C_TIMER_REG_WRITE (S3C44B0X_TCON, 0x00000002);
        /*auto reload and start T0*/
		SNGKS32C_TIMER_REG_WRITE (S3C44B0X_TCON, 0x00000009);
        
        /* enable clock interrupt in interrupt controller */
        
        SNGKS32C_TIMER_INT_ENABLE (SYS_TIMER_INT_LVL);
        sysClkRunning = TRUE;
        }
    }


/*******************************************************************************
*
* sysClkRateGet - get the system clock rate
*
* This routine returns the system clock rate.
*
* RETURNS: The number of ticks per second of the system clock.
*
* SEE ALSO: sysClkEnable(), sysClkRateSet()
*/

int sysClkRateGet (void)
    {
    return (sysClkTicksPerSecond);
    }


/*******************************************************************************
*
* sysClkRateSet - set the system clock rate
*
* This routine sets the interrupt rate of the system clock.
* It is called by usrRoot() in usrConfig.c.
*
* RETURNS: OK, or ERROR if the tick rate is invalid or the timer cannot be set.
*
* SEE ALSO: sysClkEnable(), sysClkRateGet()
*/

STATUS sysClkRateSet
    (
    int ticksPerSecond        /* number of clock interrupts per second */
    )
    {
    if (ticksPerSecond < SYS_CLK_RATE_MIN || ticksPerSecond > SYS_CLK_RATE_MAX)
        return (ERROR);

    sysClkTicksPerSecond = ticksPerSecond;

    if (sysClkRunning)
        {
        sysClkDisable ();
        sysClkEnable ();
        }

    return (OK);
    }

/*******************************************************************************
*
* sysAuxClkInt - handle an auxiliary clock interrupt
*
* This routine handles an auxiliary clock interrupt.  It acknowledges the
* interrupt and calls the routine installed by sysAuxClkConnect().
*
* RETURNS: N/A
*/

void sysAuxClkInt (void)
    {
    /* call auxiliary clock service routine */

    if (sysAuxClkRoutine != NULL)
        (*sysAuxClkRoutine) (sysAuxClkArg);

    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品不卡在线| 国产精品一级片| 一区二区视频在线| 国产精品成人在线观看| 国产欧美日韩精品a在线观看| 久久尤物电影视频在线观看| 欧美xxxxx裸体时装秀| 欧美电影免费观看高清完整版在线观看| 51精品秘密在线观看| 91精品国产综合久久福利| 91麻豆精品国产自产在线| 91精品国产丝袜白色高跟鞋| 4hu四虎永久在线影院成人| 日韩一区和二区| 精品成人佐山爱一区二区| xnxx国产精品| 中文字幕乱码亚洲精品一区| 国产精品不卡在线| 亚洲一区二区三区美女| 日韩国产欧美在线视频| 捆绑调教一区二区三区| 国产精品资源网| 99久久久久久| 欧美日韩性生活| 精品国产亚洲在线| 亚洲国产精品成人综合| 亚洲乱码日产精品bd| 亚洲成av人片一区二区三区 | 久久99国产精品久久| 国产美女精品一区二区三区| 99久久精品国产麻豆演员表| 91福利社在线观看| 91精品国产综合久久福利| 久久精品亚洲麻豆av一区二区| 国产精品美女久久久久久久久| 亚洲男人天堂av网| 免费精品99久久国产综合精品| 国内久久精品视频| 色婷婷综合在线| 日韩免费看的电影| 综合电影一区二区三区 | 毛片不卡一区二区| 成人午夜视频福利| 欧美人与性动xxxx| 国产精品天美传媒沈樵| 亚洲高清视频在线| 国产精品一区在线| 欧美日本不卡视频| 国产精品三级久久久久三级| 天天色综合成人网| 高清国产一区二区| 91.xcao| 国产精品三级视频| 日本不卡视频在线| 色八戒一区二区三区| 精品国产亚洲在线| 亚洲国产美女搞黄色| 国产精品系列在线播放| 欧美日本在线一区| 日韩美女精品在线| 国产河南妇女毛片精品久久久| 欧美丝袜丝交足nylons| 欧美国产视频在线| 蜜桃av噜噜一区二区三区小说| 91麻豆精品视频| 久久精品男人的天堂| 视频一区二区国产| 日本道色综合久久| 中文字幕一区二区在线观看| 久久精品999| 欧美男男青年gay1069videost| 中文一区在线播放| 韩国av一区二区三区在线观看| 欧美日本精品一区二区三区| 亚洲天堂成人网| 成人看片黄a免费看在线| 日韩欧美国产系列| 爽好久久久欧美精品| 欧美写真视频网站| 亚洲欧美日韩国产手机在线| 国产白丝网站精品污在线入口| 精品日韩99亚洲| 日韩不卡一区二区| 欧美剧情片在线观看| 亚洲蜜臀av乱码久久精品| 国产成人精品亚洲日本在线桃色| 日韩欧美高清一区| 日日摸夜夜添夜夜添亚洲女人| 色哟哟一区二区| 成人免费一区二区三区视频| 国产电影一区二区三区| 精品国产sm最大网站免费看| 午夜精品久久久久久久蜜桃app| 91国偷自产一区二区开放时间| 亚洲色图在线播放| 国产亚洲成av人在线观看导航| 亚洲va欧美va国产va天堂影院| 色又黄又爽网站www久久| 综合中文字幕亚洲| 色综合中文字幕国产 | 免费高清在线视频一区·| 欧美日本在线观看| 五月天国产精品| 亚洲高清不卡在线观看| 99视频精品全部免费在线| 国产精品女主播av| 91污在线观看| 夜夜精品视频一区二区| 91黄视频在线| 五月激情六月综合| 欧美一级日韩不卡播放免费| 美脚の诱脚舐め脚责91| www亚洲一区| 国产+成+人+亚洲欧洲自线| 欧美激情一区二区三区蜜桃视频| 成人午夜av在线| 亚洲激情欧美激情| 欧美人xxxx| 美女视频免费一区| 国产欧美一区二区精品忘忧草| 国产寡妇亲子伦一区二区| 中文字幕中文乱码欧美一区二区| 99国产精品国产精品久久| 亚洲激情男女视频| 欧美精品第一页| 国内成+人亚洲+欧美+综合在线| 久久久久久电影| 成人免费福利片| 亚洲国产你懂的| 欧美精品一区二区三区高清aⅴ| 国产91在线|亚洲| 亚洲精品午夜久久久| 欧美精品高清视频| 国产激情一区二区三区| 一区二区三区精品| 日韩美女一区二区三区四区| 国产高清成人在线| 亚洲愉拍自拍另类高清精品| 69堂精品视频| 国产超碰在线一区| 亚洲电影在线免费观看| 欧美va在线播放| 91丨国产丨九色丨pron| 日韩福利视频导航| 国产女同性恋一区二区| 在线免费一区三区| 国产酒店精品激情| 一区二区三区四区乱视频| 日韩欧美二区三区| 色欧美片视频在线观看| 蜜臀久久99精品久久久画质超高清| 国产精品亲子乱子伦xxxx裸| 欧美视频在线观看一区二区| 日韩女优制服丝袜电影| 成年人午夜久久久| 日韩成人av影视| 亚洲欧美日韩中文播放| 欧美www视频| 欧美亚洲日本国产| 国产成人午夜电影网| 视频精品一区二区| 亚洲免费在线播放| 国产欧美视频一区二区三区| 欧美色精品天天在线观看视频| 国产精品影视在线| 五月天亚洲婷婷| 国产精品乱人伦一区二区| 欧美一级艳片视频免费观看| 色狠狠色狠狠综合| 成人一区二区三区中文字幕| 日本vs亚洲vs韩国一区三区 | 国产在线一区二区| 亚洲一区自拍偷拍| 国产精品久久久久久久蜜臀| 日韩视频在线观看一区二区| 色天使久久综合网天天| 国产成人啪免费观看软件| 日本va欧美va欧美va精品| 亚洲免费av观看| 国产精品久久久久久亚洲毛片| 5月丁香婷婷综合| 在线日韩国产精品| 91啪在线观看| 国产成人精品免费| 韩国精品久久久| 喷白浆一区二区| 婷婷六月综合网| 亚洲妇女屁股眼交7| 亚洲女子a中天字幕| 国产精品久久影院| 国产精品久久久久一区| 欧美三级欧美一级| www.欧美.com| 国产精品一区二区三区99| 国产成人夜色高潮福利影视| 亚洲综合999| 亚洲欧美二区三区| 亚洲免费在线观看视频| 亚洲色图20p| 玉米视频成人免费看|