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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hawki2c.c

?? mtx604在vxworks下的bsp源代碼
?? C
字號:
/* hawkI2c.c - Low-Level Hawk I2C Routines *//* Copyright 1999-2002 Wind River Systems, Inc. All rights reserved *//* Copyright 1998,1999 Motorola, Inc., All Rights Reserved *//*modification history--------------------01e,16apr02,dat  Removing warnings for T2.2 release01d,16oct01,mil  Fixed boot hanging in sysHawkMsDelay(), needed besides                 removing asm bclr (SPR 27046).01c,16sep01,dat  removed inline assembly, used vxDecGet()01b,17jul99,dmw  Added support for MTXPlus01a,15dec98,mdp  Written (from version 01c of mcpn750n/ravenI2c.c)*//*DESCRIPTIONThis file contains the following hawk i2c utility routines:.CS  sysHawkI2cWait      - Waits for a given value in the I2C status register  sysHawkI2CByteWrite - Write a single byte to a serial eeprom  sysHawkI2cByteRead  - Reads a single byte from a serial eeprom  sysHawkI2cRangeRead - Reads a range of bytes from a serial eeprom  sysHawkDimmTypeGet  - return whether or not DIMM supports ECC.CECAVEATSThese routines are needed before the kernel is un-compressed. For properoperation, this file must be added to the BOOT_EXTRA list in the Makefile toprevent it from being compressed during kernel generation.These routines were primarily intended for use during system start-up, beforemulti-tasking is started, and are not multi-tasking safe. They are safe forcommand-line use during debug, but were not intended to be run-timeuser-callable.*/#include "vxWorks.h"#include "config.h"#include "stdlib.h"#include "hawkI2c.h"                /* i2c defines */#include "arch/ppc/vxPpcLib.h"/* forwards */LOCAL void sysHawkMsDelay(UINT32);LOCAL int  sysHawkGetDec();/* externals */#ifdef INCLUDE_I2CIMPORT void mtxI2cDimmGet (UINT, UCHAR *, UINT);#endif/********************************************************************************* sysHawkI2cWait - wait for a given value in the i2c status register** This function waits for a given value in the i2c status register.* If the specified value is never detected, the routine times out* and returns an error. the routine also returns an error if the error bit* in the status register is found set.** RETURNS: OK, or ERROR if the expected value does not appear.**/STATUS sysHawkI2cWait    (    UINT32 value    /* expected status value */    )    {    UINT32          count;    volatile UINT32 status;    EIEIO_SYNC;				/* eieio, sync */    for (count=0;;)        {        status = *(UINT32 *)I2C_HAWK_STATUS_REG;        if ( (status & value) == value )            return (OK);        else            {            /* check for timeout or error bit */            if ( (++count > I2C_TIMEOUT_COUNT) || (status & I2C_HAWK_ERR) )                {                /*                 * generate stop condition and return error                 */                *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_STOP|I2C_HAWK_ENBL;                *(UINT32 *)I2C_HAWK_TXD_REG = 0;                return (ERROR);                }            sysHawkMsDelay(1);   /* delay 1 ms */            }        }    }/********************************************************************************* sysHawkI2cByteWrite - write a single byte to an i2c device via the hawk** This function writes one 8-bit word to an I2C device specified by the passed* in parameters. The access is specifically tailored for the Hawk I2C * controller.** RETURNS: OK, or ERROR if transfer failed.**/STATUS sysHawkI2cByteWrite    (    UCHAR   devAddr,   /* i2c address of target device */    UCHAR   devOffset, /* offset within target device to write */    UCHAR * pBfr       /* pointer to data byte */    )    {    /* don't start unless status reg shows complete bit set */    if ( sysHawkI2cWait (I2C_HAWK_CMPLT) != OK )        return (ERROR);      /* initiate start sequence */    *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_START|I2C_HAWK_ENBL;    /* write addr to transmit data register, bit 0 = 0 = write */    *(UINT32 *)I2C_HAWK_TXD_REG = (UINT32)(devAddr & BYTE_WRITE_MASK);    /* await complete + acknowledge in status register */    if ( sysHawkI2cWait (I2C_HAWK_ACKIN|I2C_HAWK_CMPLT) != OK )         return (ERROR);    /* end of start sequence */    /* devOffset to transmit data register */    *(UINT32 *)I2C_HAWK_TXD_REG = (UINT32)devOffset;    /* await complete + acknowledge in status register */    if ( sysHawkI2cWait (I2C_HAWK_ACKIN|I2C_HAWK_CMPLT) != OK )        return (ERROR);    /* Send data byte to transmit data register */    *(UINT32 *)I2C_HAWK_TXD_REG = (UINT32)*pBfr;    /* await complete + acknowledge in status register */    if ( sysHawkI2cWait (I2C_HAWK_ACKIN|I2C_HAWK_CMPLT) != OK )         return (ERROR);    /* stop sequence */    *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_STOP|I2C_HAWK_ENBL;    *(UINT32 *)I2C_HAWK_TXD_REG = 0;  /* dummy write */    sysHawkMsDelay(1);                /* delay for ASIC errata. */       /* await complete in status register */    if ( sysHawkI2cWait (I2C_HAWK_CMPLT) != OK )        return (ERROR);    /* allow time for EEPROM write to occur */    sysHawkMsDelay(1);    return (OK);    }/********************************************************************************* sysHawkI2cByteRead - read a single byte to an i2c device via the Hawk** This function reads one 8-bit word from an I2C device specified by the passed* in parameters. The access is specifically tailored for the Hawk I2C * controller.** RETURNS: OK, or ERROR if transfer failed.**/STATUS sysHawkI2cByteRead    (    UCHAR   devAddr,   /* i2c address of target device */    UCHAR   devOffset, /* offset within target device to read */    UCHAR * pBfr       /* pointer to data byte */    )    {    /* await complete in status register */    if ( sysHawkI2cWait (I2C_HAWK_CMPLT) != OK )        return (ERROR);    /* initiate start sequence in write mode */    *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_START|I2C_HAWK_ENBL;    *(UINT32 *)I2C_HAWK_TXD_REG = (UINT32)(devAddr & BYTE_WRITE_MASK);       /* await complete + acknowledge in status register */    if ( sysHawkI2cWait (I2C_HAWK_ACKIN|I2C_HAWK_CMPLT) != OK )         return (ERROR);    /* devOffset to transmit data register */    *(UINT32 *)I2C_HAWK_TXD_REG = (UINT32)devOffset;    /* await complete + acknowledge in status register */    if ( sysHawkI2cWait (I2C_HAWK_ACKIN|I2C_HAWK_CMPLT) != OK )         return (ERROR);    /* initiate start sequence in read mode */    *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_START|I2C_HAWK_ENBL;    *(UINT32 *)I2C_HAWK_TXD_REG = (UINT32)(devAddr | BYTE_READ_MASK);       /* await complete + acknowledge in status register */    if ( sysHawkI2cWait (I2C_HAWK_ACKIN|I2C_HAWK_CMPLT) != OK )         return (ERROR);    /* read the byte */    *(UINT32 *)I2C_HAWK_TXD_REG = 0;    /* dummy write to initiate read */       sysHawkMsDelay(1);                  /* delay for ASIC errata. */    /* await complete and datain  in status register */    if ( sysHawkI2cWait (I2C_HAWK_CMPLT | I2C_HAWK_DATIN) != OK )          return (ERROR);    /* the actual read */    *pBfr = (UCHAR) (*(UINT32 *)I2C_HAWK_RXD_REG);    /* There is no ack after a single byte read */    /* stop sequence */    *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_STOP|I2C_HAWK_ENBL;    *(UINT32 *)I2C_HAWK_TXD_REG = 0;  /* dummy write */    sysHawkMsDelay(1);                /* delay for ASIC errata. */       /* await complete in status register */    if ( sysHawkI2cWait (I2C_HAWK_CMPLT) != OK )         return (ERROR);    return (OK);    }/********************************************************************************* sysHawkI2cRangeRead - reads a range of bytes from an I2C serial eeprom (SROM)** This routine simply calls the I2C byte read routine for each requested byte.* The I2C byte read call is written using a macro to accommodate alternate* read routines.** RETURNS: OK, or ERROR if the I2C byte read fails.** SEE ALSO: sysI2cSromRangeWrite**/STATUS sysHawkI2cRangeRead    (    UCHAR    devAddr,    /* i2c address of the serial eeprom */    UCHAR    devOffset,  /* starting offset within the serial eeprom to read */    UINT16   byteCount,  /* number of bytes to read (one-based) */    UCHAR *  pBfr        /* destination buffer */    )    {    /* await complete in status register */    if ( sysHawkI2cWait (I2C_HAWK_CMPLT) != OK )        return (ERROR);    /* initiate start sequence in write mode */    *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_START|I2C_HAWK_ENBL;    *(UINT32 *)I2C_HAWK_TXD_REG = (UINT32)(devAddr & BYTE_WRITE_MASK);    /* await complete + acknowledge in status register */    if ( sysHawkI2cWait (I2C_HAWK_ACKIN|I2C_HAWK_CMPLT) != OK )        return (ERROR);    /* devOffset to transmit data register */    *(UINT32 *)I2C_HAWK_TXD_REG = (UINT32)devOffset;    /* await complete + acknowledge in status register */    if ( sysHawkI2cWait (I2C_HAWK_ACKIN|I2C_HAWK_CMPLT) != OK )       return (ERROR);    /* initiate start sequence in read mode */    *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_START|I2C_HAWK_ENBL;    *(UINT32 *)I2C_HAWK_TXD_REG = (UINT32)(devAddr | BYTE_READ_MASK);    /* await complete + acknowledge in status register */    if ( sysHawkI2cWait (I2C_HAWK_ACKIN|I2C_HAWK_CMPLT) != OK )        return (ERROR);    for ( ; byteCount != 0; --byteCount)        {        if (byteCount != 1)            *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_ACKOUT|I2C_HAWK_ENBL;        else            *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_ENBL;        /* read the byte */        *(UINT32 *)I2C_HAWK_TXD_REG = 0;    /* dummy write to initiate read */        sysHawkMsDelay(1);                  /* delay for ASIC errata. */        /* await complete and datain  in status register */        if ( sysHawkI2cWait (I2C_HAWK_CMPLT | I2C_HAWK_DATIN) != OK )            return (ERROR);        /* the actual read */        *pBfr++ = (UCHAR) (*(UINT32 *)I2C_HAWK_RXD_REG);        }    /* stop sequence */    *(UINT32 *)I2C_HAWK_CONTROL_REG = I2C_HAWK_STOP|I2C_HAWK_ENBL;    *(UINT32 *)I2C_HAWK_TXD_REG = 0;  /* dummy write */    sysHawkMsDelay(1);                /* delay for ASIC errata. */    /* await complete in status register */    if ( sysHawkI2cWait (I2C_HAWK_CMPLT) != OK )        return (ERROR);    return (OK);    }/******************************************************************************** sysHawkMsDelay - delay for the specified amount of time (MS)** This routine will delay for the specified amount of time by counting* decrementer ticks.** This routine is not dependent on a particular rollover value for* the decrementer, it should work no matter what the rollover* value is.** A small amount of count may be lost at the rollover point resulting in* the sysHawkMsDelay() causing a slightly longer delay than requested.** This routine will produce incorrect results if the delay time requested* requires a count larger than 0xffffffff to hold the decrementer* elapsed tick count.  For a System Bus Speed of 67 MHZ this amounts to* about 258 seconds.** RETURNS: N/A**/LOCAL void sysHawkMsDelay    (    UINT        delay                   /* length of time in MS to delay */    )    {    register UINT oldval;               /* decrementer value */    register UINT newval;               /* decrementer value */    register UINT totalDelta;           /* Dec. delta for entire delay period */    register UINT decElapsed;           /* cumulative decrementer ticks */    /*     * Calculate delta of decrementer ticks for desired elapsed time.     */    totalDelta = ((DEC_CLOCK_FREQ / 4) / 1000) * delay;    /*     * Now keep grabbing decrementer value and incrementing "decElapsed" until     * we hit the desired delay value.  Compensate for the fact that we may     * read the decrementer at 0xffffffff before the interrupt service     * routine has a chance to set in the rollover value.     */    decElapsed = 0;    oldval = sysHawkGetDec();    while (decElapsed < totalDelta)        {        newval = sysHawkGetDec();        if (newval > oldval)            decElapsed += oldval;             /* rollover */        else            decElapsed += (oldval - newval);  /* no rollover */        oldval = newval;        }    }/******************************************************************************** sysHawkGetDec - read from the Decrementer register SPR22.** This routine will read the contents the decrementer (SPR22)** RETURNS: value of SPR22 (in r3)**/LOCAL int sysHawkGetDec(void)    {    return vxDecGet();    }/******************************************************************************** sysHawkDimmTypeGet - retreive whether or not all of the DIMMs support ECC.** This function's purpose is to access the DIMMs via the I2C controller* and return the lowest common error detection support.** RETURNS: DIMM_ECC_TYPE, or not.**/UINT sysHawkDimmTypeGet (void)    {    UCHAR DIMM_info[15];    UINT dimmConfig;    UINT ii;    /* Setup for ECC support.  Disabled if any DIMMs don't support ECC. */    dimmConfig = DIMM_ECC_TYPE;    /* Check all of the DRAM Serial Presence Detect (SPD) SROMs */    for (ii = 0; ii <= 6; ii += 2)        {        /* Get SPD struct */#ifdef INCLUDE_I2C        mtxI2cDimmGet((0xA0 + ii), &(DIMM_info[0]), 14);#endif        /* Does this DIMM provide ECC support? */        if (DIMM_info[11] < DIMM_ECC_TYPE)            dimmConfig = DIMM_info[11];         /* No!  Remove ECC support. */        }    return (dimmConfig);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
首页国产丝袜综合| 日韩精品一区国产麻豆| 日韩毛片一二三区| www..com久久爱| 亚洲欧洲www| 欧美自拍偷拍一区| 性做久久久久久| 欧美精品乱人伦久久久久久| 视频在线观看91| 日韩欧美专区在线| 国产高清精品久久久久| 国产精品另类一区| 在线观看日韩国产| 久久国产乱子精品免费女| 国产三级欧美三级| 色激情天天射综合网| 日本不卡1234视频| 日本一区二区高清| 色综合久久综合| 午夜精品福利一区二区三区av| 日韩欧美一区二区视频| 成人午夜伦理影院| 午夜日韩在线电影| 国产欧美一区二区三区沐欲| 色综合久久六月婷婷中文字幕| 日韩国产精品久久久久久亚洲| 国产日韩精品一区二区浪潮av| 色欧美片视频在线观看| 久久精品国产亚洲高清剧情介绍| 国产三级三级三级精品8ⅰ区| 色av综合在线| 国产精品一区二区三区99| 亚洲天堂成人网| 欧美xxxx在线观看| 一本色道久久综合亚洲91 | 日韩天堂在线观看| 成人av在线影院| 伦理电影国产精品| 亚洲欧美偷拍卡通变态| 精品国产乱码久久久久久牛牛| 91色在线porny| 另类的小说在线视频另类成人小视频在线 | 欧美日韩高清一区二区不卡| 国产成人av福利| 蜜桃视频一区二区| 亚洲天堂精品视频| 亚洲影视资源网| 日韩免费看的电影| 99精品欧美一区二区三区综合在线| 亚洲成a人v欧美综合天堂下载| 国产日韩欧美高清在线| 日韩一区二区在线看片| 欧美自拍丝袜亚洲| 成人国产免费视频| 国产在线不卡视频| 日韩二区三区四区| 亚洲精选视频免费看| 国产欧美日韩中文久久| 精品国产一区二区亚洲人成毛片| 在线免费观看不卡av| 成人av网站在线| 国产毛片一区二区| 麻豆极品一区二区三区| 日日夜夜精品视频天天综合网| 中文字幕av在线一区二区三区| 欧美va亚洲va| 日韩一级二级三级精品视频| 欧美日本在线播放| 一本色道久久加勒比精品| 国产伦精品一区二区三区免费迷| 久久欧美中文字幕| 欧美日韩不卡一区| 成人免费毛片片v| 五月婷婷综合网| 精品久久久久久亚洲综合网| 亚洲黄色免费电影| 99国产精品久久久| 欧美国产精品中文字幕| 国产欧美日产一区| 精品久久一区二区三区| 欧美日韩免费一区二区三区视频| 色欧美片视频在线观看| 久久女同精品一区二区| 一区精品在线播放| 一区二区三区四区蜜桃| 久久精品亚洲国产奇米99| www.日韩大片| 蜜臀av一区二区| 欧美一级生活片| 欧美色成人综合| 在线一区二区三区| 国产乱国产乱300精品| 经典一区二区三区| 亚洲成年人影院| 极品少妇一区二区三区精品视频| 蜜臀av一级做a爰片久久| 日本麻豆一区二区三区视频| 婷婷开心久久网| 国产成人在线观看免费网站| 九一久久久久久| 日本美女一区二区三区| 久久国产三级精品| 国产在线一区二区| 九九视频精品免费| 精品中文字幕一区二区| 蜜桃一区二区三区在线观看| 国产精品888| 91传媒视频在线播放| 不卡一卡二卡三乱码免费网站| 久久精品国产99| 精品一区二区免费| 美女看a上一区| 亚洲激情欧美激情| 亚洲一区二区不卡免费| 午夜激情综合网| 日韩精品高清不卡| 视频一区中文字幕国产| 久久不见久久见免费视频1| 欧美色精品在线视频| 国产亚洲女人久久久久毛片| 亚洲一区二区三区精品在线| 黑人巨大精品欧美黑白配亚洲| 色悠悠久久综合| 制服丝袜亚洲播放| 亚洲国产中文字幕在线视频综合| 一本色道久久加勒比精品| 中文字幕中文字幕一区二区| 国产盗摄一区二区| 91麻豆自制传媒国产之光| 欧美二区三区的天堂| 国产午夜精品久久久久久久| 亚洲制服丝袜在线| 国产91露脸合集magnet| 在线不卡一区二区| 亚洲欧美日韩成人高清在线一区| 裸体在线国模精品偷拍| 在线一区二区三区| 国产精品免费av| 久久爱www久久做| 欧美日韩小视频| 亚洲色图制服诱惑| 国产精品1024| 日韩精品一区二区三区在线观看 | 国产在线精品一区二区| 精品视频在线免费看| 亚洲天堂网中文字| 粉嫩13p一区二区三区| 日韩美一区二区三区| 婷婷成人激情在线网| 在线视频国产一区| 综合中文字幕亚洲| 国产aⅴ综合色| 久久夜色精品一区| 开心九九激情九九欧美日韩精美视频电影| 91精品福利视频| 亚洲免费在线观看视频| 波多野结衣精品在线| 中文字幕精品一区| 成人美女视频在线观看18| 久久精品亚洲乱码伦伦中文| 国产一本一道久久香蕉| 精品久久久久久无| 国产精品三级av| 欧美一级专区免费大片| 亚洲高清在线精品| 欧美亚洲图片小说| 亚洲一区二区三区美女| 欧美性生活久久| 亚洲午夜在线电影| 成人精品视频一区二区三区尤物| 欧美视频在线一区| 一区二区三区欧美亚洲| 日本福利一区二区| 亚洲免费成人av| 在线视频欧美精品| 亚洲综合一二区| 91精品国产麻豆国产自产在线| 亚洲午夜精品网| 欧美男男青年gay1069videost | 一区二区三区视频在线看| 91色在线porny| 亚洲一区二区三区美女| 欧美日本在线观看| 久久aⅴ国产欧美74aaa| 2021中文字幕一区亚洲| 国产不卡视频一区| 亚洲欧美中日韩| 日本韩国欧美在线| 亚洲成人免费在线| 日韩欧美国产综合在线一区二区三区 | 国内精品第一页| 欧美激情在线一区二区三区| 97久久超碰国产精品| 亚洲影视在线观看| 日韩免费观看2025年上映的电影 | 成人一二三区视频| 亚洲精品成人a在线观看| 这里只有精品免费| 国产精品 欧美精品| 亚洲精品写真福利|