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

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

?? sysmoti2c.c

?? vxworks的bsp開發包(基于POWERPC的PRPMC800)
?? C
字號:
/* sysMotI2c.c - Low-Level Motorola Two-Wire I2C Routines *//* Copyright 2000 Motorola, Inc., All Rights Reserved *//*modification history--------------------01g,17jan02,dtr  Removing diab warning.01f,06nov00,krp  Dual address device give extra delay for I2C write data.01e,08oct00,dmw  Removed extra delays required for Hawk.01d,08sep00,dmw  Made sysMotI2cRangeRead dual-address mode capable.01c,08sep00,dmw  Added dual-address I2C EEPROM accesses.01b,07sep00,dmw  Updated for common I2C defines.01a,31aug00,dmw  Written (from version 01b of mcpn765/hawkI2c.c).*//*DESCRIPTIONThis file contains the following system i2c utility routines:.CS  sysMotI2cWait      - Waits for a given value in the I2C status register  sysMotI2cWrite     - Write one or two bytes to a serial eeprom  sysMotI2cRead      - Reads one or two bytes from a serial eeprom  sysMotI2cRangeRead - Reads a range of bytes from a serial eeprom.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"/* board dependant I2C defines */#include "harrierI2c.h"IMPORT UINT sysMotGetDec(void);/* forwards */void   sysMotMsDelay(UINT32);/********************************************************************************* sysMotI2cWait - 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 sysMotI2cWait    (    UINT32 value    /* expected status value */    )    {    UINT32          count;    volatile UINT32 status;    EIEIO_SYNC;				/* eieio, sync */    for (count=0;;)        {        status = *(UINT32 *)SYS_I2C_STATUS_REG;        if ( (status & value) == value )           return (OK);        else            {            /* check for timeout or error bit */            if ( (++count > I2C_TIMEOUT_COUNT) || (status & SYS_I2C_ERR) )                {                /*                 * generate stop condition and return error                 */                *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_STOP|SYS_I2C_ENBL;                *(UINT32 *)SYS_I2C_TXD_REG = 0;                return (ERROR);                }            sysMotMsDelay(1);   /* delay 1 ms */            }        }    }/******************************************************************************** sysMotI2cWrite - write a single byte to an i2c device via the harrier** This function writes one or two bytes to an I2C device specified by the * passed in parameters. ** RETURNS: OK, or ERROR if transfer failed.*/STATUS sysMotI2cWrite    (    UCHAR   devAddr,   /* i2c address of target device */    USHORT  devOffset, /* offset within target device to write */    UCHAR  *pBfr,      /* pointer to data byte */    UCHAR   num        /* number of bytes to write */    )    {    /* don't start unless status reg shows complete bit set */    if ( sysMotI2cWait (SYS_I2C_CMPLT) != OK )        return (ERROR);      /* initiate start sequence */    *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_START|SYS_I2C_ENBL;    /* write addr to transmit data register, bit 0 = 0 = write */    *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devAddr & BYTE_WRITE_MASK);    /* await complete + acknowledge in status register */    if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )         return (ERROR);    /* end of start sequence */    /* devOffset to transmit data register */    if (num == I2C_DUAL_ADDRESS)        {        *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devOffset >> 8);        /* await complete + acknowledge in status register */        if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )            return (ERROR);        }    *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devOffset & 0x00FF);    /* await complete + acknowledge in status register */    if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )        return (ERROR);    /* Send data byte to transmit data register */    *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)*pBfr;    /* await complete + acknowledge in status register */    if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )         return (ERROR);    /* stop sequence */    *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_STOP|SYS_I2C_ENBL;    *(UINT32 *)SYS_I2C_TXD_REG = 0;  /* dummy write */    /* await complete in status register */    if ( sysMotI2cWait (SYS_I2C_CMPLT) != OK )        return (ERROR);    /* Allow time for EEPROM write to occur  */    sysMotMsDelay(5);      return (OK);    }/********************************************************************************* sysMotI2cRead - read a single byte to an i2c device ** This function reads one or two 8-bit words from an I2C device specified by * the passed in parameters. ** RETURNS: OK, or ERROR if transfer failed.*/STATUS sysMotI2cRead    (    UCHAR   devAddr,   /* i2c address of target device */    USHORT  devOffset, /* offset within target device to read */    UCHAR  *pBfr,      /* pointer to data byte */    UCHAR   num        /* number of bytes to read */    )    {    /* await complete in status register */    if ( sysMotI2cWait (SYS_I2C_CMPLT) != OK )        return (ERROR);    /* initiate start sequence in write mode */    *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_START|SYS_I2C_ENBL;    *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devAddr & BYTE_WRITE_MASK);    /* await complete + acknowledge in status register */    if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )         return (ERROR);    if (num == I2C_DUAL_ADDRESS)        {        *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devOffset >> 8);        if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )             return (ERROR);        }    *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devOffset & 0x00FF);       /* await complete + acknowledge in status register */    if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )         return (ERROR);    /* initiate start sequence in read mode */    *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_START|SYS_I2C_ENBL;    *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devAddr | BYTE_READ_MASK);    /* await complete and datain  in status register */    if ( sysMotI2cWait (SYS_I2C_ACKIN | SYS_I2C_CMPLT) != OK )         return (ERROR);    /* read the byte */    *(UINT32 *)SYS_I2C_TXD_REG = 0;    /* dummy write to initiate read */       /* await complete and datain  in status register */    if ( sysMotI2cWait (SYS_I2C_CMPLT | SYS_I2C_DATIN) != OK )         return (ERROR);   /* the actual read */   *pBfr = (UCHAR) (*(UINT32 *)SYS_I2C_RXD_REG);   /* There is no ack after a single byte read */   /* stop sequence */   *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_STOP|SYS_I2C_ENBL;   *(UINT32 *)SYS_I2C_TXD_REG = 0;  /* dummy write */   /* await complete in status register */   if ( sysMotI2cWait (SYS_I2C_CMPLT) != OK )       return (ERROR);   return (OK);   }/********************************************************************************* sysMotI2cRangeRead - 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 sysMotI2cRangeRead    (    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 */    UCHAR    num         /* number of bytes to read */    )    {    /* await complete in status register */    if ( sysMotI2cWait (SYS_I2C_CMPLT) != OK )        return (ERROR);    /* initiate start sequence in write mode */    *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_START|SYS_I2C_ENBL;    *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devAddr & BYTE_WRITE_MASK);    /* await complete + acknowledge in status register */    if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )        return (ERROR);    /* devOffset to transmit data register */    if (num == I2C_DUAL_ADDRESS)        {        *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devOffset >> 8);        /* await complete + acknowledge in status register */        if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )            return (ERROR);        }    *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devOffset & 0x00FF);    /* await complete + acknowledge in status register */    if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )       return (ERROR);    /* initiate start sequence in read mode */    *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_START|SYS_I2C_ENBL;    *(UINT32 *)SYS_I2C_TXD_REG = (UINT32)(devAddr | BYTE_READ_MASK);    /* await complete + acknowledge in status register */    if ( sysMotI2cWait (SYS_I2C_ACKIN|SYS_I2C_CMPLT) != OK )        return (ERROR);    for ( ; byteCount != 0; --byteCount)        {        if (byteCount != 1)            *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_ACKOUT|SYS_I2C_ENBL;        else            *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_ENBL;        /* read the byte */        *(UINT32 *)SYS_I2C_TXD_REG = 0;    /* dummy write to initiate read */        /* await complete and datain  in status register */        if ( sysMotI2cWait (SYS_I2C_CMPLT | SYS_I2C_DATIN) != OK )            return (ERROR);        /* the actual read */        *pBfr++ = (UCHAR) (*(UINT32 *)SYS_I2C_RXD_REG);        }    /* stop sequence */    *(UINT32 *)SYS_I2C_CONTROL_REG = SYS_I2C_STOP|SYS_I2C_ENBL;    *(UINT32 *)SYS_I2C_TXD_REG = 0;  /* dummy write */    /* await complete in status register */    if ( sysMotI2cWait (SYS_I2C_CMPLT) != OK )       return (ERROR);    return (OK);    }/******************************************************************************** sysMotMsDelay - 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 sysMotMsDelay() 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*/void sysMotMsDelay    (    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 = ((DEFAULT_BUS_CLOCK / 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 = sysMotGetDec();    while (decElapsed < totalDelta)        {        newval = sysMotGetDec();        if ( DELTA(oldval,newval) < 1000 )            decElapsed += DELTA(oldval,newval);  /* no rollover */        else            if (newval > oldval)                decElapsed += abs((int)oldval);  /* rollover */        oldval = newval;        }    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97精品国产露脸对白| 99视频精品全部免费在线| 国产精品18久久久久久久网站| 欧美精三区欧美精三区| 亚洲一区免费在线观看| 在线欧美日韩国产| 欧美精品一区二区在线观看| 亚洲青青青在线视频| 久久国内精品视频| 欧美精品一区二区三区在线| 国产传媒久久文化传媒| 欧美精品在线一区二区| 一区视频在线播放| 国产一区二区三区免费在线观看| 久久亚洲精精品中文字幕早川悠里 | 成人高清免费在线播放| 国产精品不卡一区二区三区| 91丨porny丨在线| 久久久91精品国产一区二区三区| 国产美女精品一区二区三区| 成人免费一区二区三区在线观看| 精品系列免费在线观看| 欧美精品在线观看播放| 国产一区二区在线免费观看| 国产精品成人一区二区三区夜夜夜| 狠狠狠色丁香婷婷综合久久五月| 久久噜噜亚洲综合| 在线观看亚洲一区| 亚洲女同一区二区| 欧美成人官网二区| 日本不卡123| 欧美激情中文不卡| 欧美日韩第一区日日骚| 亚洲国产精品尤物yw在线观看| 91精品国产色综合久久久蜜香臀| 国产成人午夜高潮毛片| 亚洲国产美女搞黄色| 久久精品一级爱片| 欧美日本不卡视频| 波多野结衣亚洲| 青青草成人在线观看| 中文字幕日韩欧美一区二区三区| 成人高清av在线| 另类综合日韩欧美亚洲| 欧美一区二区三区四区高清| gogo大胆日本视频一区| 久久se这里有精品| 亚洲1区2区3区4区| 亚洲日本在线观看| 色综合久久中文综合久久牛| 九九视频精品免费| 国产欧美精品一区二区三区四区| 精品视频在线免费| 日本不卡中文字幕| 亚洲久本草在线中文字幕| 在线一区二区视频| 成人午夜电影小说| 激情综合网激情| 国产日本欧洲亚洲| www.亚洲色图| 国产精品亚洲一区二区三区妖精| 日韩精品一级中文字幕精品视频免费观看| 亚洲欧洲精品天堂一级| 91视频免费观看| 国产成人综合精品三级| 亚洲色图都市小说| 欧美日韩国产在线观看| 久久精品国产在热久久| 国产视频911| 91丨porny丨在线| 成人一区二区三区在线观看| 亚洲精品中文在线影院| 4438x亚洲最大成人网| 国内不卡的二区三区中文字幕| 亚洲h在线观看| 久久久久久久久久久久久久久99 | 自拍偷拍亚洲综合| 国产精品女人毛片| 国产女人aaa级久久久级| 91在线精品一区二区| 国产91精品精华液一区二区三区| 亚洲精品五月天| 亚洲色图欧美在线| 精品国产91洋老外米糕| 日韩一区二区高清| 精品久久久久久最新网址| 精品久久99ma| 91成人在线精品| 国产一区二区三区| 国产精品99久久久久久久vr | aaa国产一区| 色一区在线观看| 韩国一区二区视频| 国产一区激情在线| 成人综合在线视频| 91麻豆.com| 国产一二精品视频| 亚洲国产一区二区三区青草影视| 亚洲亚洲精品在线观看| 欧美经典一区二区三区| 国产调教视频一区| 日韩亚洲国产中文字幕欧美| 91色porny在线视频| 国精产品一区一区三区mba视频| 国产一区二区在线视频| 奇米在线7777在线精品| 精彩视频一区二区三区| 成人免费视频视频| 国产伦精品一区二区三区免费| 亚洲成人福利片| 老司机免费视频一区二区三区| 国产精品主播直播| 色老头久久综合| 精品国一区二区三区| 国产精品久久久久久久午夜片 | 久久综合精品国产一区二区三区| 国产精品乱人伦| 亚洲成人手机在线| 国产美女在线观看一区| 日本三级韩国三级欧美三级| 国产真实乱对白精彩久久| 性做久久久久久免费观看| 久久av老司机精品网站导航| 麻豆精品一区二区| www.色综合.com| 欧美电影免费提供在线观看| 国产精品国产三级国产有无不卡| 久久色中文字幕| 欧美v日韩v国产v| 一区二区免费看| 精品亚洲aⅴ乱码一区二区三区| 99精品国产热久久91蜜凸| 3751色影院一区二区三区| 欧美天堂一区二区三区| 久久久亚洲综合| 亚洲国产成人porn| 首页亚洲欧美制服丝腿| 成人h动漫精品一区二| 欧美疯狂性受xxxxx喷水图片| 国产精品免费免费| 美女免费视频一区二区| 欧美在线高清视频| 欧美日本国产视频| 欧美变态口味重另类| 亚洲黄网站在线观看| 亚洲综合免费观看高清完整版在线| 国产乱码一区二区三区| 91麻豆精品国产| 欧美成人一区二区| 视频一区二区欧美| 在线视频你懂得一区| 国产免费成人在线视频| 国产精品美女视频| 国产传媒久久文化传媒| 欧美成人欧美edvon| 免费精品视频最新在线| 欧美精品18+| 欧美成人高清电影在线| 国产欧美一区二区精品婷婷| 亚洲三级小视频| 日韩高清不卡一区| 欧美亚洲国产怡红院影院| 国产精品久线在线观看| 国产aⅴ综合色| 久久嫩草精品久久久精品| 中文字幕一区二区三区四区| 午夜国产精品影院在线观看| 在线亚洲一区观看| 亚洲自拍偷拍图区| 在线观看不卡一区| 亚洲午夜一区二区三区| 国产伦精品一区二区三区视频青涩 | 国产一区在线视频| 精品av综合导航| 一区二区三区欧美视频| 色综合中文字幕| 亚洲精品国产一区二区精华液| 日韩高清不卡一区二区三区| 国产精品12区| 亚洲国产精品国自产拍av| 亚洲va欧美va天堂v国产综合| 国产精品亚洲一区二区三区在线| 色av一区二区| 亚洲1区2区3区视频| 日韩无一区二区| 国产一区二区三区视频在线播放| 欧美三级电影网| 国产免费成人在线视频| 日韩av一区二区三区四区| 97精品久久久久中文字幕| 亚洲影视资源网| 日韩一区二区精品在线观看| 国产精品一区二区在线播放| 国产精品久久久久久久久免费丝袜| 日韩不卡手机在线v区| 日韩欧美一区二区三区在线| 亚洲一二三区不卡| 日韩欧美卡一卡二| 午夜久久福利影院| 精品999在线播放|