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

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

?? sngks32ctimer.c

?? VxWorks BSP 下s3C44b0的源代碼
?? 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久久精品| 亚洲天堂2016| 欧美精品三级在线观看| 美腿丝袜亚洲三区| 国产欧美日韩视频一区二区| 成人黄色在线视频| 亚洲黄色小视频| 91精品国产91热久久久做人人| 精品一区精品二区高清| 国产精品电影院| 欧美色视频在线观看| 美女www一区二区| 国产精品久久久久一区二区三区共| 色欲综合视频天天天| 爽好多水快深点欧美视频| 久久久久九九视频| 一本到不卡精品视频在线观看| 日韩1区2区3区| 国产精品三级电影| 欧美精品电影在线播放| 国产成人综合在线观看| 亚洲国产精品视频| 国产亚洲欧美中文| 欧美日韩精品免费观看视频| 国产曰批免费观看久久久| 亚洲视频在线一区观看| 欧美一区二区在线免费观看| 白白色 亚洲乱淫| 日本v片在线高清不卡在线观看| 国产精品午夜电影| 制服丝袜激情欧洲亚洲| 成人免费av资源| 免费国产亚洲视频| 一区二区视频在线| 久久精品人人做人人爽人人| 欧美日韩大陆一区二区| 99久久夜色精品国产网站| 蜜桃av噜噜一区二区三区小说| 自拍视频在线观看一区二区| 久久奇米777| 日韩亚洲欧美中文三级| 日本久久电影网| 国产乱码精品一区二区三区av | 国产一区二区不卡老阿姨| 亚洲综合丝袜美腿| 国产精品的网站| 久久嫩草精品久久久精品一| 911国产精品| 欧美亚洲综合另类| 色网站国产精品| 波多野结衣的一区二区三区| 精品影院一区二区久久久| 日韩国产欧美在线播放| 2023国产精品自拍| 欧洲中文字幕精品| 91在线无精精品入口| 国产精品一区二区无线| 麻豆国产欧美日韩综合精品二区| 亚洲乱码中文字幕综合| 国产精品美女一区二区| 国产亚洲成aⅴ人片在线观看| 日韩一区二区三区免费观看| 欧美精品vⅰdeose4hd| 欧美视频一区二区| 精品视频1区2区| 欧美视频一二三区| 欧美性视频一区二区三区| 在线亚洲+欧美+日本专区| 91丨porny丨国产入口| 波多野结衣精品在线| 成人久久视频在线观看| www.久久久久久久久| 成人动漫一区二区三区| 99久久综合精品| 99综合电影在线视频| av资源网一区| 色婷婷综合久久久久中文| 色综合久久中文综合久久97 | 亚洲午夜激情网站| 亚洲一区在线观看免费观看电影高清| 亚洲精品成人a在线观看| 亚洲自拍偷拍九九九| 午夜久久久久久久久久一区二区| 亚瑟在线精品视频| 日韩和欧美一区二区三区| 蜜桃视频一区二区三区 | 性感美女极品91精品| 日韩黄色小视频| 国产一区二区三区免费在线观看| 国产麻豆成人精品| 99精品视频在线观看| 日本大香伊一区二区三区| 欧美色老头old∨ideo| 欧美一二三在线| 国产精品天干天干在线综合| 亚洲精选视频免费看| 午夜亚洲国产au精品一区二区| 日本欧美一区二区| 国产激情精品久久久第一区二区| 99热精品国产| 欧美人妇做爰xxxⅹ性高电影 | 日韩精品一区二区三区视频| 久久亚洲捆绑美女| 亚洲色大成网站www久久九九| 亚洲第一精品在线| 国内精品伊人久久久久av影院| 成人高清免费观看| 在线91免费看| 中文av一区二区| 偷拍一区二区三区| 成人精品一区二区三区中文字幕| 欧美三级日韩在线| 久久综合狠狠综合久久激情 | 不卡大黄网站免费看| 欧美天天综合网| 久久久www免费人成精品| 一区二区在线观看视频| 精品一区二区三区免费毛片爱| 91免费视频大全| 精品女同一区二区| 亚洲一区二三区| 顶级嫩模精品视频在线看| 欧美精品乱人伦久久久久久| 国产精品视频一二三| 另类中文字幕网| 色8久久精品久久久久久蜜| 精品国产成人在线影院| 亚洲一级不卡视频| 国产不卡在线视频| 91精品国产一区二区三区| 亚洲欧美日韩久久| 国产风韵犹存在线视精品| 6080国产精品一区二区| 综合久久一区二区三区| 国产精品亚洲第一区在线暖暖韩国 | 欧美在线影院一区二区| 国产视频在线观看一区二区三区| 日韩—二三区免费观看av| 在线视频国内自拍亚洲视频| 中文字幕欧美日韩一区| 国内精品免费在线观看| 51精品久久久久久久蜜臀| 亚洲图片欧美色图| 色综合久久久久综合| 中文字幕精品一区| 国产剧情一区二区| 欧美成人女星排行榜| 视频一区在线播放| 欧美色网站导航| 一区2区3区在线看| 91视频免费播放| 亚洲三级在线看| 91网页版在线| 亚洲欧美日韩在线| 色综合天天综合| 日韩伦理免费电影| 99久久婷婷国产精品综合| 一区二区中文视频| 97久久久精品综合88久久| 国产精品久久久久久久蜜臀| 国产成人午夜精品影院观看视频 | 日韩成人伦理电影在线观看| 欧美日韩mp4| 日本vs亚洲vs韩国一区三区| 欧美一区二区在线播放| 麻豆精品视频在线观看| 精品国产凹凸成av人导航| 精彩视频一区二区三区| 国产亚洲人成网站| 99在线热播精品免费| 亚洲欧美日韩国产手机在线| 色爱区综合激月婷婷| 一区二区欧美视频| 337p亚洲精品色噜噜| 国内一区二区视频| 中文字幕免费在线观看视频一区| 不卡视频在线看| 一区二区三区日韩在线观看| 欧美三级电影在线观看| 蜜乳av一区二区三区| 欧美国产精品久久| 在线观看视频一区二区欧美日韩| 亚洲一二三级电影| 日韩精品一区二区三区视频在线观看 | 91精品国产综合久久久久久久 | 美女视频网站久久| 久久午夜电影网| 91一区二区在线| 日韩av一级电影| 国产精品美女久久久久久2018| 日本道精品一区二区三区| 青青草国产精品亚洲专区无| 国产视频一区二区在线观看| 成人avav影音| 日本中文字幕不卡| 国产精品福利av| 欧美一级艳片视频免费观看| 懂色av一区二区在线播放|