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

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

?? bsp_i2c.c

?? stm32+ucos-ii
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
*********************************************************************************************************
*                                     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 -------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产中文一区二区三区| 日韩欧美国产三级电影视频| 亚洲高清在线精品| 中文字幕一区二区三| 国产精品美女一区二区三区| 亚洲国产中文字幕| 久久精品免费在线观看| 激情久久五月天| 亚洲二区视频在线| 日韩一二三区视频| 中文在线一区二区| 亚洲精品免费一二三区| 欧美另类高清zo欧美| 老司机午夜精品| 日韩成人一级大片| 亚洲国产欧美在线| 欧美日韩国产乱码电影| 91精品久久久久久久久99蜜臂| 最新不卡av在线| 在线不卡一区二区| 欧美老肥妇做.爰bbww| 一区二区三区资源| 日本韩国精品在线| 久久久综合网站| 91视视频在线观看入口直接观看www | 亚洲综合一区二区| 欧美一区二区不卡视频| 大陆成人av片| 亚洲国产乱码最新视频| 国产亚洲一区字幕| 樱花影视一区二区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 91浏览器入口在线观看| 亚洲电影欧美电影有声小说| 欧美变态tickling挠脚心| 中文一区在线播放| 亚洲国产日韩综合久久精品| 一本一本大道香蕉久在线精品| 美洲天堂一区二卡三卡四卡视频| 中文字幕久久午夜不卡| 精品一区二区三区久久| 国产精品素人一区二区| 中文字幕亚洲不卡| 91精品国产福利在线观看| 福利电影一区二区| 日韩在线观看一区二区| 中文字幕一区二区三区色视频| 欧美日韩三级在线| 亚洲第四色夜色| 在线观看91av| 成人性视频网站| 国产精品美女一区二区在线观看| 亚洲精品中文在线观看| 亚洲欧美日韩国产成人精品影院 | 精品视频999| 成人av电影在线网| 国产一区二区三区综合| 午夜精品福利一区二区蜜股av| 欧美国产欧美综合| 日韩三级伦理片妻子的秘密按摩| 色国产精品一区在线观看| 国产成人8x视频一区二区| 日本不卡不码高清免费观看| 91久久一区二区| 国产91精品一区二区麻豆亚洲| 另类的小说在线视频另类成人小视频在线 | 国产精品久久久久永久免费观看 | 香蕉加勒比综合久久| 欧美日韩国产高清一区二区三区 | 91高清视频在线| www.欧美日韩国产在线| 国产精品99久久不卡二区| 紧缚奴在线一区二区三区| 日本aⅴ免费视频一区二区三区| 亚洲精品高清在线| 亚洲男同性恋视频| 自拍偷拍欧美激情| 亚洲欧洲精品一区二区三区| 中文字幕不卡在线观看| 国产欧美日韩在线看| 丁香亚洲综合激情啪啪综合| 国产精品综合av一区二区国产馆| 美脚の诱脚舐め脚责91| 美洲天堂一区二卡三卡四卡视频| 轻轻草成人在线| 蜜桃视频在线观看一区| 激情图区综合网| 激情综合一区二区三区| 国产一区三区三区| 国产成人免费视频| 粉嫩aⅴ一区二区三区四区五区| 国产69精品久久久久毛片| 成人美女视频在线看| 亚洲精品少妇30p| 亚洲精品国产无天堂网2021| 亚洲一区二区美女| 日本亚洲天堂网| 激情深爱一区二区| 国产精品18久久久久久vr| 顶级嫩模精品视频在线看| 色94色欧美sute亚洲线路二 | 国产精品一区二区你懂的| 国产精品国产三级国产普通话蜜臀| 欧美国产成人在线| 亚洲欧洲av另类| 亚洲韩国一区二区三区| 人人超碰91尤物精品国产| 国产精品一区二区在线观看网站| 蜜桃视频免费观看一区| 精品国产一区二区三区不卡| 99视频国产精品| 成人av在线播放网址| 国产一区二区三区免费看| 国产在线精品一区二区| 性做久久久久久久免费看| 成人综合婷婷国产精品久久蜜臀| av亚洲精华国产精华精| 美女诱惑一区二区| 免费美女久久99| 99这里只有久久精品视频| 亚洲国产精品t66y| 亚洲日本丝袜连裤袜办公室| 天天操天天色综合| 国产精品灌醉下药二区| 91精品国产手机| 色综合网色综合| 国产 日韩 欧美大片| 麻豆91在线看| 91视频你懂的| 久久在线观看免费| 亚洲成人精品一区| 成人av免费观看| 精品久久久久久久一区二区蜜臀| 亚洲欧美电影一区二区| 在线观看91av| 午夜精品福利一区二区三区av| 欧美在线一二三| 精品国产电影一区二区| 一区二区激情视频| 懂色av中文一区二区三区| 国产伦精品一区二区三区视频青涩 | 91精品国产综合久久久久| 91蜜桃婷婷狠狠久久综合9色| 日韩欧美国产麻豆| 欧美一级欧美三级在线观看| 精品免费国产二区三区| 国产露脸91国语对白| 国产精品网曝门| 久久久国产午夜精品| 日本不卡一二三| 欧美体内she精高潮| 欧美在线一二三| 中文字幕综合网| 福利电影一区二区| 成人午夜碰碰视频| 最新不卡av在线| 成人永久免费视频| 色综合久久综合| 中文字幕亚洲一区二区av在线| 国产精品你懂的| 国产乱码精品一区二区三区av| 日韩一区二区麻豆国产| 日韩欧美aaaaaa| 美女一区二区三区在线观看| 国产在线精品一区二区不卡了 | 一区二区三区中文字幕在线观看| 国产午夜精品福利| 狠狠狠色丁香婷婷综合激情 | 欧美丝袜丝交足nylons图片| 国产日产欧美一区| 国产精品88av| 国产欧美日韩激情| 成人精品视频一区| 波多野结衣中文一区| 91在线看国产| 欧美在线观看18| 亚洲国产成人高清精品| 激情综合网最新| 26uuu精品一区二区三区四区在线| 久久精品视频免费| 国产成人亚洲精品狼色在线| 久久中文娱乐网| 亚洲一区影音先锋| 国内偷窥港台综合视频在线播放| 久久嫩草精品久久久精品| 国产一区二区久久| 国产精品久久久久久久久搜平片| 一区二区三区精品视频| 美国欧美日韩国产在线播放| 国产传媒欧美日韩成人| 91麻豆精品国产综合久久久久久 | 激情综合色丁香一区二区| 日韩欧美在线网站| 欧美激情资源网| 亚洲成人免费在线观看| 3d动漫精品啪啪| 国产精品丝袜一区| 首页综合国产亚洲丝袜| 国产精品中文字幕一区二区三区| 国产女主播一区|