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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? bsp_i2c.c

?? stm32+ucos-ii
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/*
*********************************************************************************************************
*                                     MICRIUM BOARD SUPPORT SUPPORT
*
*                          (c) Copyright 2003-2009; Micrium, Inc.; Weston, FL
*
*               All rights reserved.  Protected by international copyright laws.
*               Knowledge of the source code may NOT be used to develop a similar product.
*               Please help us continue to provide the Embedded community with the finest
*               software available.  Your honesty is greatly appreciated.
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*
*                                     MICIUM BOARD SUPPORT PACKAGE
*                                        I2C DRIVER (MASTER ONLY)
*                                                                         
*
* Filename      : bsp_i2c.c
* Version       : V1.00
* Programmer(s) : FT
*********************************************************************************************************
* Note(s)       :
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                             INCLUDE FILES
*********************************************************************************************************
*/

#define  BSP_I2C_MODULE
#include <bsp.h>


/*
*********************************************************************************************************
*                                              LOCAL DEFINES
*********************************************************************************************************
*/

                                                                /* ------------- I2C BASE ADDRESS DEFINES ------------ */
#define  BSP_I2C_REG_I2C1_BASE_ADDR       (CPU_INT32U)(0x40005400)
#define  BSP_I2C_REG_I2C2_BASE_ADDR       (CPU_INT32U)(0x40005800)

                                                                /* -------- I2C CONTROL REGISTER 1 BIT DEFINES  ------- */
#define  BSP_I2C_REG_CR1_PE               DEF_BIT_00            /* Peripheral Enable                                    */
#define  BSP_I2C_REG_CR1_SMBUS            DEF_BIT_01            /* SMBUS Mode                                           */
#define  BSP_I2C_REG_CR1_SMBTYPE          DEF_BIT_03            /* SMBUS Type                                           */
#define  BSP_I2C_REG_CR1_ENARP            DEF_BIT_04            /* ARP Enable                                           */
#define  BSP_I2C_REG_CR1_ENPEC            DEF_BIT_05            /* PEC Enable                                           */
#define  BSP_I2C_REG_CR1_ENGC             DEF_BIT_06            /* ENGC General Call enable                             */
#define  BSP_I2C_REG_CR1_NOSTRETCH        DEF_BIT_07            /* Clock stretching enable                              */
#define  BSP_I2C_REG_CR1_START            DEF_BIT_08            /* Start Generation                                     */
#define  BSP_I2C_REG_CR1_STOP             DEF_BIT_09            /* Stop  Generation                                     */
#define  BSP_I2C_REG_CR1_ACK              DEF_BIT_10            /* Acknowledge Enable                                   */
#define  BSP_I2C_REG_CR1_POS              DEF_BIT_11            /* Acknowledge/PEC position (for data reception)        */
#define  BSP_I2C_REG_CR1_PEC              DEF_BIT_12            /* Packet Error Checking                                */
#define  BSP_I2C_REG_CR1_ALERT            DEF_BIT_13            /* SMBUS Aler                                           */
#define  BSP_I2C_REG_CR1_SWRST            DEF_BIT_15            /* Software Reset                                       */

                                                                /* -------- I2C CONTROL REGISTER 2 BIT DEFINES  ------- */
#define  BSP_I2C_REG_CR2_LAST             DEF_BIT_12            /* Last DMA transfer                                    */
#define  BSP_I2C_REG_CR2_DMAEN            DEF_BIT_11            /* DMA Request enable                                   */
#define  BSP_I2C_REG_CR2_ITBUFEN          DEF_BIT_10            /* Buffer interrupt enable                              */
#define  BSP_I2C_REG_CR2_ITEVTEN          DEF_BIT_09            /* Event  interrupt enable                              */
#define  BSP_I2C_REG_CR2_ITERREN          DEF_BIT_08            /* Error Interrupt enable                               */
#define  BSP_I2C_REG_CR2_FREQ_MASK        DEF_BIT_FIELD(6, 0)   /* Peripheral Clock Frequency Mask                      */

#define  BSP_I2C_REG_DR_MASK              DEF_BIT_FIELD(8, 0)   /* 8-bit Data register mask                             */

                                                                /* --------- I2C STATUS REGISTER 1 BIT DEFINES -------- */
#define  BSP_I2C_REG_SR1_ALERT            DEF_BIT_15            /* SMBUS Alert                                          */
#define  BSP_I2C_REG_SR1_TIMEOUT          DEF_BIT_14            /* Timeout error                                        */
#define  BSP_I2C_REG_SR1_PECERR           DEF_BIT_12            /* PEC error in reception                               */
#define  BSP_I2C_REG_SR1_OVR              DEF_BIT_11            /* Overrun/Underrun                                     */
#define  BSP_I2C_REG_SR1_AF               DEF_BIT_10            /* Aknowledge failure                                   */
#define  BSP_I2C_REG_SR1_ARLO             DEF_BIT_09            /* Arbitration Lost                                     */
#define  BSP_I2C_REG_SR1_BERR             DEF_BIT_08            /* Bus Error                                            */
#define  BSP_I2C_REG_SR1_TXE              DEF_BIT_07            /* Data Register empty (Transmitters)                   */
#define  BSP_I2C_REG_SR1_RXNE             DEF_BIT_06            /* Data register not empty                              */
#define  BSP_I2C_REG_SR1_STOPF            DEF_BIT_04            /* Stop detection                                       */
#define  BSP_I2C_REG_SR1_ADD10            DEF_BIT_03            /* 10-bit header sent (Master Mode)                     */
#define  BSP_I2C_REG_SR1_BTF              DEF_BIT_02            /* Byte Transfer finished                               */
#define  BSP_I2C_REG_SR1_ADDR             DEF_BIT_01            /* Address Sent                                         */
#define  BSP_I2C_REG_SR1_SB               DEF_BIT_00            /* Start bit (Mode)                                     */

                                                                /* Event Mask                                           */
#define  BSP_I2C_REG_SR1_EVENT_MASK      (BSP_I2C_REG_SR1_SB      | \
                                          BSP_I2C_REG_SR1_ADDR    | \
                                          BSP_I2C_REG_SR1_BTF     | \
                                          BSP_I2C_REG_SR1_ADDR    | \
                                          BSP_I2C_REG_SR1_RXNE    | \
                                          BSP_I2C_REG_SR1_TXE )

                                                                /* Error Mask                                           */
#define  BSP_I2C_REG_SR1_ERR_MASK        (BSP_I2C_REG_SR1_BERR    | \
                                          BSP_I2C_REG_SR1_ARLO    | \
                                          BSP_I2C_REG_SR1_AF      | \
                                          BSP_I2C_REG_SR1_OVR     | \
                                          BSP_I2C_REG_SR1_PECERR  | \
                                          BSP_I2C_REG_SR1_ALERT)

                                                                /* --------- I2C STATUS REGISTER 2 BIT DEFINES -------- */
#define  BSP_I2C_REG_SR2_PEC_MASK         DEF_BIT_FIELD(8, 8)   /* Packet error cheking register mask                   */
#define  BSP_I2C_REG_SR2_DUALF            DEF_BIT_07            /* Dual Flag (Slave mode)                               */
#define  BSP_I2C_REG_SR2_SMBHOST          DEF_BIT_06            /* SMBus Host header (Slave Mode)                       */
#define  BSP_I2C_REG_SR2_SMBDEFAULT       DEF_BIT_05            /* SMBus Device default Address                         */
#define  BSP_I2C_REG_SR2_GENCALL          DEF_BIT_04            /* General Call Address (Slave Mode)                    */
#define  BSP_I2C_REG_SR2_TRA              DEF_BIT_02            /* Trnasmitter/Receiver bit                             */
#define  BSP_I2C_REG_SR2_BUSY             DEF_BIT_01            /* Bus Busy                                             */
#define  BSP_I2C_REG_SR2_MSL              DEF_BIT_00            /* Master/Slave bit                                     */

                                                                /* ------ I2C CLOCK CONTROL REGISTER BIT DEFINES ------ */
#define  BSP_I2C_REG_CCR_FS               DEF_BIT_15            /* I2C Master Mode Selection (Standard/Fast)            */
#define  BSP_I2C_REG_CCR_DUTY             DEF_BIT_14            /* Fast Mode Duty Cycle                                 */
#define  BSP_I2C_REG_CCR_MASK             DEF_BIT_FIELD(12, 0)  /* Clock Divider                                        */


                                                                /* --------------- I2C DRIVER STATES DEFINES ---------- */
#define  BSP_I2C_STATE_IDLE                        0
#define  BSP_I2C_STATE_START                       1
#define  BSP_I2C_STATE_ADDR                        2
#define  BSP_I2C_STATE_DATA                        3
#define  BSP_I2C_STATE_STOP                        4

                                                                /* -------------- I2C ACCESS TYPE DEFINES ------------- */
#define  BSP_I2C_ACCESS_TYPE_NONE                  0
#define  BSP_I2C_ACCESS_TYPE_RD                    1
#define  BSP_I2C_ACCESS_TYPE_WR                    2
#define  BSP_I2C_ACCESS_TYPE_WR_RD                 3


/*
*********************************************************************************************************
*                                           LOCAL CONSTANTS
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                          LOCAL DATA TYPES
*
* Note(s) :  (1) The 'BSP_I2C_DEV_STATUS' structure defines the status of the current transfer
*
*            (2) The 'BSP_I2C_REG' defines the register set for the I2C1/I2C2 peripherals.
*********************************************************************************************************
*/

typedef  struct bsp_i2c_dev_status {
    CPU_INT08U   AccessType;                                    /* Transfer Access Type RD/WR/WR_RD                     */
    CPU_INT08U   Addr;                                          /* I2C slave address                                    */
    CPU_INT08U   State;                                         /* Current transfer state                               */
    CPU_INT08U  *BufPtr;                                        /* Pointer to the transfer data area                    */
    CPU_INT16U   BufLen;                                        /* Trnasfer length                                      */
    BSP_OS_SEM   SemLock;                                       /* I2C Exclusive access sempahore                       */
    BSP_OS_SEM   SemWait;                                       /* Transfer Complete signal                             */
} BSP_I2C_DEV_STATUS;


typedef  struct  bsp_i2c_reg {
    CPU_REG32   I2C_CR1;
    CPU_REG32   I2C_CR2;    
    CPU_REG32   I2C_OAR1;
    CPU_REG32   I2C_OAR2;
    CPU_REG32   I2C_DR;
    CPU_REG32   I2C_SR1;
    CPU_REG32   I2C_SR2;
    CPU_REG32   I2C_CCR;
    CPU_REG32   I2C_TRISE;
} BSP_I2C_REG;


/*
*********************************************************************************************************
*                                            LOCAL TABLES
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                       LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/

static  BSP_I2C_DEV_STATUS     BSP_I2C_DevTbl[BSP_I2C_NBR_MAX];

/*
*********************************************************************************************************
*                                      LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/

static  void        BSP_I2C1_EventISR_Handler  (void);
static  void        BSP_I2C2_EventISR_Handler  (void);
static  void        BSP_I2Cx_EventISR_Handler  (CPU_INT08U  i2c_nbr);

static  void        BSP_I2C1_ErrISR_Handler    (void);
static  void        BSP_I2C2_ErrISR_Handler    (void);
static  void        BSP_I2Cx_ErrISR_Handler    (CPU_INT08U  i2c_nbr);

static CPU_BOOLEAN  BSP_I2C_StartXfer          (CPU_INT08U   i2c_nbr,
                                                CPU_INT08U   i2c_addr,
                                                CPU_INT08U   i2c_access_type,
                                                CPU_INT08U  *p_buf,
                                                CPU_INT08U   nbr_bytes);
/*
*********************************************************************************************************
*                                     LOCAL CONFIGURATION ERRORS
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*********************************************************************************************************
**                                         GLOBAL FUNCTIONS
*********************************************************************************************************
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                        BSP_I2C_Init()
*
* Description : Initialize the I2C.
*
* Argument(s) : i2c_id     I2C peripheral ID
*                              BSP_I2C_ID_I2C1
*                              BSP_I2C_ID_I2C2
*
*               freq       I2C clock speed. It must be set to a value lower than 100 kHz (Standard Mode) or
*                          400 Khz (Fast mode)
*
* Return(s)   : DEF_OK     If the I2C peripheral was initialized
*               DEF_FAIL   If the I2C peripheral could not be initialized.
*
* Caller(s)   : Application
*
* Note(s)     : none.
*********************************************************************************************************
*/


CPU_BOOLEAN  BSP_I2C_Init (CPU_INT08U  i2c_id,
                           CPU_INT08U  i2c_mode,
                           CPU_INT32U  clk_freq)
                    
{
    CPU_BOOLEAN          err;  
    GPIO_InitTypeDef     gpio_init_cfg;
    RCC_ClocksTypeDef    rcc_clocks;
    CPU_INT32U           pclk_freq;
    CPU_INT32U           reg_val;
    BSP_I2C_REG         *p_i2c_reg;
    BSP_I2C_DEV_STATUS  *p_i2c_dev_status;

    
                                                                /* ------------- ARGUMENTS CHECKING ----------------- */
    switch (i2c_id) {
        case BSP_I2C_ID_I2C1:
             p_i2c_reg        = (BSP_I2C_REG        *)BSP_I2C_REG_I2C1_BASE_ADDR;
             p_i2c_dev_status = (BSP_I2C_DEV_STATUS *)&BSP_I2C_DevTbl[0];
             
                                                                /* Configure the I2C1 GPIO                            */
             BSP_PeriphEn(BSP_PERIPH_ID_IOPB);             
             gpio_init_cfg.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7;
             gpio_init_cfg.GPIO_Speed = GPIO_Speed_50MHz;
             gpio_init_cfg.GPIO_Mode  = GPIO_Mode_AF_OD;
             GPIO_Init(GPIOB, &gpio_init_cfg);
 
             BSP_PeriphEn(BSP_PERIPH_ID_I2C1);                  /* Enable the I2C1 peripheral clock                   */
             
             break;

        case BSP_I2C_ID_I2C2:
             p_i2c_reg        = (BSP_I2C_REG        *)BSP_I2C_REG_I2C2_BASE_ADDR;
             p_i2c_dev_status = (BSP_I2C_DEV_STATUS *)&BSP_I2C_DevTbl[1];

                                                                /* Configure the I2C2 GPIO                            */
             BSP_PeriphEn(BSP_PERIPH_ID_IOPB);             
             gpio_init_cfg.GPIO_Pin   = GPIO_Pin_10 | GPIO_Pin_11;
             gpio_init_cfg.GPIO_Speed = GPIO_Speed_50MHz;
             gpio_init_cfg.GPIO_Mode  = GPIO_Mode_AF_OD;
             GPIO_Init(GPIOB, &gpio_init_cfg);
             
             BSP_PeriphEn(BSP_PERIPH_ID_I2C2);                  /* Enable the I2C1 peripheral clock                   */             
             break;
        
        default:
            return (DEF_FAIL);
    }
        
                                                                /* -------------- CREATE OS SEMAPHORES  ------------- */
    err = BSP_OS_SemCreate((BSP_OS_SEM    *)&(p_i2c_dev_status->SemWait),
                           (BSP_OS_SEM_VAL ) 0, 
                           (CPU_CHAR      *) "I2C Wait");          
     
    if (err == DEF_FAIL) {
        return (DEF_FAIL);
    }

    err = BSP_OS_SemCreate((BSP_OS_SEM    *)&(p_i2c_dev_status->SemLock),
                           (BSP_OS_SEM_VAL ) 1, 
                           (CPU_CHAR      *)"I2C Lock");        

    if (err == DEF_FAIL) {
        return (DEF_FAIL);
    }
        
                                                               /* ----------------- I2C INITIALIZATION -------------- */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产视频一区在线观看| 国产日韩欧美综合在线| 成人午夜激情片| 天天综合色天天| 日本一区二区三级电影在线观看| 91福利在线观看| 国产精品99久久久久久宅男| 亚洲一区中文日韩| 国产天堂亚洲国产碰碰| 91精品久久久久久蜜臀| 99re6这里只有精品视频在线观看| 秋霞影院一区二区| 一区二区成人在线观看| 中文子幕无线码一区tr| 欧美tickling挠脚心丨vk| 欧美午夜精品电影| fc2成人免费人成在线观看播放| 全国精品久久少妇| 亚洲成人午夜电影| 一区二区三区四区亚洲| 欧美激情一二三区| 久久这里只有精品首页| 6080日韩午夜伦伦午夜伦| av一二三不卡影片| 国产a区久久久| 国产最新精品精品你懂的| 日本麻豆一区二区三区视频| 亚洲在线一区二区三区| 中文字幕一区二区三区在线播放 | 亚洲一区二区精品3399| 国产精品久线在线观看| 久久综合九色综合97婷婷| 欧美一区二区私人影院日本| 欧美视频一区二区三区四区| 色哦色哦哦色天天综合| www.日韩精品| 成人三级在线视频| 国产不卡在线播放| 国产精品一区二区果冻传媒| 经典三级一区二区| 极品少妇xxxx偷拍精品少妇| 男女激情视频一区| 青青青伊人色综合久久| 午夜不卡在线视频| 日韩激情视频在线观看| 五月激情综合色| 日韩av一区二| 麻豆国产欧美日韩综合精品二区| 日韩电影在线一区| 久久国产视频网| 韩国理伦片一区二区三区在线播放| 美国一区二区三区在线播放| 九一九一国产精品| 国产一区二区三区香蕉| 国产乱色国产精品免费视频| 国产成人福利片| 97久久人人超碰| 欧美日韩免费视频| 日韩一区二区三区av| 欧美岛国在线观看| 欧美激情一区三区| 一区二区三区免费在线观看| 亚洲第一二三四区| 精品一区二区三区的国产在线播放| 精品一区二区在线观看| 成人在线视频一区| 欧美优质美女网站| 日韩精品一区二区三区在线播放 | 另类人妖一区二区av| 激情五月婷婷综合| 盗摄精品av一区二区三区| 一本色道亚洲精品aⅴ| 欧美精品在线一区二区三区| 精品sm捆绑视频| 亚洲人成小说网站色在线| 肉丝袜脚交视频一区二区| 黄页网站大全一区二区| 91在线观看污| 91精品国产综合久久香蕉的特点 | 精品一区免费av| 91影院在线免费观看| 91精品国产乱| 国产精品看片你懂得| 午夜婷婷国产麻豆精品| 韩国理伦片一区二区三区在线播放| av在线播放一区二区三区| 精品视频1区2区| xf在线a精品一区二区视频网站| 亚洲欧美激情小说另类| 精品一区二区在线看| 91浏览器入口在线观看| 日韩一区二区免费高清| 国产精品看片你懂得| 青娱乐精品视频| 91猫先生在线| 久久综合九色综合欧美亚洲| 亚洲高清免费在线| 床上的激情91.| 欧美一区二区日韩| 亚洲婷婷综合久久一本伊一区| 日本免费新一区视频| 色综合欧美在线| 国产日韩精品久久久| 日韩av一区二区在线影视| 色哟哟日韩精品| 国产精品全国免费观看高清| 麻豆国产精品一区二区三区| 欧美色偷偷大香| 亚洲欧洲精品一区二区三区不卡| 蜜芽一区二区三区| 欧美性一二三区| 亚洲女同一区二区| 不卡av免费在线观看| 2023国产精华国产精品| 日韩精品久久久久久| 91免费版在线| 国产精品热久久久久夜色精品三区| 激情成人午夜视频| 欧美一区二区三区在线观看 | 在线观看免费视频综合| √…a在线天堂一区| 国产成人精品免费网站| 欧美大尺度电影在线| 午夜影视日本亚洲欧洲精品| 色婷婷精品大在线视频| 国产精品视频看| 丰满亚洲少妇av| 国产天堂亚洲国产碰碰| 国产一区在线观看麻豆| 精品免费国产一区二区三区四区| 舔着乳尖日韩一区| 欧美亚洲精品一区| 亚洲综合av网| 欧美伊人久久久久久久久影院 | 欧美一区二区在线看| 五月激情丁香一区二区三区| 欧美自拍丝袜亚洲| 亚洲精品高清视频在线观看| 色婷婷激情久久| 亚洲综合精品久久| 欧美日韩在线直播| 午夜精品一区二区三区免费视频| 欧美午夜精品久久久久久孕妇| 夜夜精品浪潮av一区二区三区| 91麻豆成人久久精品二区三区| 成人免费小视频| 99国产精品视频免费观看| 亚洲色图另类专区| 欧美视频在线观看一区二区| 三级欧美在线一区| 欧美电影免费观看高清完整版 | 色婷婷久久一区二区三区麻豆| 亚洲精品视频观看| 欧美伊人久久大香线蕉综合69| 亚洲高清中文字幕| 日韩免费电影网站| 国产福利一区在线| 中文字幕一区二| 欧美日韩在线播放三区| 日韩va欧美va亚洲va久久| 日韩欧美在线综合网| 国产激情一区二区三区桃花岛亚洲 | 欧美一区二区视频观看视频| 麻豆91免费观看| 国产精品亲子伦对白| 在线观看亚洲专区| 久久国产三级精品| 亚洲婷婷国产精品电影人久久| eeuss鲁片一区二区三区在线看| 一区二区三区在线观看动漫| 欧美久久久一区| 国产成人亚洲综合色影视| 亚洲免费观看高清在线观看| 6080午夜不卡| 成人午夜激情影院| 天天综合网 天天综合色| 久久久www成人免费毛片麻豆| 91在线云播放| 美腿丝袜在线亚洲一区| 亚洲视频香蕉人妖| 日韩三级视频在线看| 成人黄色在线看| 天堂va蜜桃一区二区三区| 久久久久国产精品麻豆| 欧美伊人久久久久久久久影院| 九九久久精品视频| 亚洲一区二区三区四区在线免费观看 | 精品亚洲成a人| 亚洲人成亚洲人成在线观看图片| 欧美视频在线一区二区三区 | 青椒成人免费视频| 亚洲视频资源在线| 欧美videossexotv100| 色美美综合视频| 国产在线一区二区综合免费视频| 亚洲欧美成人一区二区三区| 久久综合九色综合欧美就去吻| 欧美日韩小视频| av男人天堂一区| 国内精品国产成人国产三级粉色 |