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

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

?? bsp_i2c.c

?? stm32+ucos-ii
?? C
?? 第 1 頁 / 共 3 頁
字號:
    
    if (nbr_bytes < 2) {
        return (DEF_FAIL);
    }
     
    
    err = BSP_I2C_StartXfer(i2c_id,
                            i2c_addr,
                            BSP_I2C_ACCESS_TYPE_WR_RD,
                            p_buf,
                            nbr_bytes);
    
    return (err);               
}


/*
*********************************************************************************************************
*                                        BSP_I2C1_EventISR_Handle()
*                                        BSP_I2C2_EventISR_Handle
*
* Description : I2C1/I2C2 ISR handlers
*
* Argument(s) : none.
*
* Return(s)   : none.
*
* Caller(s)   : This is an ISR.
*
* Note(s)     : none.
*********************************************************************************************************
*/


static  void  BSP_I2C1_EventISR_Handler (void)
{
    BSP_I2Cx_EventISR_Handler(0);
}

static  void  BSP_I2C2_EventISR_Handler (void) 
{
    BSP_I2Cx_EventISR_Handler(1);    
}


/*
*********************************************************************************************************
*                                        BSP_I2Cx_EventISR_Handler()
*
* Description : Generic ISR events handler
*
* Argument(s) : i2c_nbr           I2C peripheral number.
*                                     0  I2C1 peripheral
*                                     1  I2C2 peripheral
*
* Return(s)   : none.
*
* Caller(s)   : BSP_I2C1_EventISR_Handler()
*               BSP_I2C2_EventISR_Handler()
*
* Note(s)     : none.
*********************************************************************************************************
*/

void  BSP_I2Cx_EventISR_Handler (CPU_INT08U  i2c_nbr)
{
    BSP_I2C_DEV_STATUS  *p_i2c_dev_status;
    BSP_I2C_REG         *p_i2c_reg;
    CPU_INT32U           int_stat1;
    CPU_INT32U           int_stat2;

    
     switch (i2c_nbr) {
        case 0:
             p_i2c_reg = (BSP_I2C_REG *)BSP_I2C_REG_I2C1_BASE_ADDR;
             break;

        case 1:
             p_i2c_reg = (BSP_I2C_REG *)BSP_I2C_REG_I2C2_BASE_ADDR;
             break;
        
        default:
             break;
    }


    p_i2c_dev_status  = (BSP_I2C_DEV_STATUS *)&BSP_I2C_DevTbl[i2c_nbr];
    int_stat1         =  p_i2c_reg->I2C_SR1;
    int_stat1        &=  BSP_I2C_REG_SR1_EVENT_MASK;

    switch (p_i2c_dev_status->State) {
        case BSP_I2C_STATE_START:                               /* --------------- I2C START STATE ------------------ */
                                                                /* If the start bit flag has been generated ...       */
             if (DEF_BIT_IS_SET(int_stat1, BSP_I2C_REG_SR1_SB)) {     
                                                                /* Send the Address with the correct direction        */
                 if (p_i2c_dev_status->AccessType == BSP_I2C_ACCESS_TYPE_RD) {
                     DEF_BIT_SET(p_i2c_reg->I2C_CR1, BSP_I2C_REG_CR1_ACK);
                     p_i2c_reg->I2C_DR = (p_i2c_dev_status->Addr << 1)
                                       | DEF_BIT_00;
                 } else {                 
                     p_i2c_reg->I2C_DR = (p_i2c_dev_status->Addr << 1) & DEF_BIT_FIELD(7, 1);
                 }
                 
                 p_i2c_dev_status->State = BSP_I2C_STATE_ADDR;
             }
             break;
             
        case BSP_I2C_STATE_ADDR:                                /* --------------- I2C ADRESS STATE ----------------- */
                                                                /* If the address was sent ...                        */
             if (DEF_BIT_IS_SET(int_stat1, BSP_I2C_REG_SR1_ADDR)) { 
                 int_stat2 = p_i2c_reg->I2C_SR2;
              
                 (void)&int_stat2;

                 switch (p_i2c_dev_status->AccessType) {
                     case BSP_I2C_ACCESS_TYPE_RD:
                          if (p_i2c_dev_status->BufLen == 1) {
                              p_i2c_dev_status->State = BSP_I2C_STATE_STOP;                               
                              DEF_BIT_CLR(p_i2c_reg->I2C_CR1, BSP_I2C_REG_CR1_ACK);
                          } else {                              
                              p_i2c_dev_status->State = BSP_I2C_STATE_DATA;
                          }
                          break;                 

                     case BSP_I2C_ACCESS_TYPE_WR:
                     case BSP_I2C_ACCESS_TYPE_WR_RD:
                          if (DEF_BIT_IS_SET(int_stat1, BSP_I2C_REG_SR1_TXE)) {                     
                              p_i2c_reg->I2C_DR = (CPU_INT32U)(*(p_i2c_dev_status->BufPtr));
                              p_i2c_dev_status->BufPtr++;
                              p_i2c_dev_status->BufLen--;
                              if (p_i2c_dev_status->BufLen == 0) {                               
                                  p_i2c_dev_status->State = BSP_I2C_STATE_STOP;                               
                              } else {
                                  p_i2c_dev_status->State = BSP_I2C_STATE_DATA;
                              }
                          }
                          break;  

                     default:
                          break;
                 }             
             } else {
                 p_i2c_dev_status->State      = BSP_I2C_STATE_IDLE;
                 p_i2c_dev_status->AccessType = BSP_I2C_ACCESS_TYPE_NONE;

                 DEF_BIT_CLR(p_i2c_reg->I2C_CR2, BSP_I2C_REG_CR2_ITEVTEN |
                                                 BSP_I2C_REG_CR2_ITERREN);
                 DEF_BIT_SET(p_i2c_reg->I2C_CR1, BSP_I2C_REG_CR1_STOP);                              

                 BSP_OS_SemPost(&(p_i2c_dev_status->SemWait));
             }
             break;
                 
         case BSP_I2C_STATE_DATA:                               /* ---------------- I2C DATA STATE ------------------ */
              switch (p_i2c_dev_status->AccessType) {
                                                                /* If the I2C is receiving ...                        */
                  case BSP_I2C_ACCESS_TYPE_WR_RD:  
                       if (DEF_BIT_IS_SET(int_stat1, BSP_I2C_REG_SR1_TXE)) {
                                                                /* Initialize the Transfer as read access             */
                           DEF_BIT_SET(p_i2c_reg->I2C_CR1, BSP_I2C_REG_CR1_START);
                           p_i2c_dev_status->State      = BSP_I2C_STATE_START;
                           p_i2c_dev_status->AccessType = BSP_I2C_ACCESS_TYPE_RD;
                       }
                       break;

                  case BSP_I2C_ACCESS_TYPE_RD:  
                                                                /* If the receive register is not empty               */
                       if (DEF_BIT_IS_SET(int_stat1, BSP_I2C_REG_SR1_RXNE)) {
                           *(p_i2c_dev_status->BufPtr) = (CPU_INT08U)(p_i2c_reg->I2C_DR & BSP_I2C_REG_DR_MASK);
                             p_i2c_dev_status->BufPtr++;
                             p_i2c_dev_status->BufLen--;
                                                               /*  If it is the last byte                             */
                           if (p_i2c_dev_status->BufLen == 1) {                               
                                                               /*  NOT Acknowledge, Generate STOP condition           */
                               DEF_BIT_CLR(p_i2c_reg->I2C_CR1, BSP_I2C_REG_CR1_ACK);
                               DEF_BIT_SET(p_i2c_reg->I2C_CR1, BSP_I2C_REG_CR1_STOP);                              
                               p_i2c_dev_status->State = BSP_I2C_STATE_STOP;                               
                           }
                       }                        
                       break;                 
                  
                  case BSP_I2C_ACCESS_TYPE_WR:
                       if (DEF_BIT_IS_SET(int_stat1, BSP_I2C_REG_SR1_TXE)) {
                           p_i2c_reg->I2C_DR = (CPU_INT32U)(*(p_i2c_dev_status->BufPtr));
                           p_i2c_dev_status->BufPtr++;
                           p_i2c_dev_status->BufLen--;
                           if (p_i2c_dev_status->BufLen == 0) {                               
                               p_i2c_dev_status->State = BSP_I2C_STATE_STOP;                               
                           }
                       }
                       break;       
              }
              break;
        
        case BSP_I2C_STATE_STOP:                                /* ---------------- I2C STOP STATE ------------------ */
             if (DEF_BIT_IS_SET(int_stat1, BSP_I2C_REG_SR1_BTF)) {     
                 switch (p_i2c_dev_status->AccessType) {
                     case BSP_I2C_ACCESS_TYPE_WR_RD:
                     case BSP_I2C_ACCESS_TYPE_RD:  
                          DEF_BIT_SET(p_i2c_reg->I2C_CR1, BSP_I2C_REG_CR1_STOP);                                   
                          *(p_i2c_dev_status->BufPtr) = (CPU_INT08U)(p_i2c_reg->I2C_DR & BSP_I2C_REG_DR_MASK);;
                            p_i2c_dev_status->BufPtr++;
                            p_i2c_dev_status->BufLen--;
                          break;
                    
                     case BSP_I2C_ACCESS_TYPE_WR:
                          DEF_BIT_CLR(p_i2c_reg->I2C_CR1, BSP_I2C_REG_CR1_ACK);
                          DEF_BIT_SET(p_i2c_reg->I2C_CR1, BSP_I2C_REG_CR1_STOP);                              
                          break;
                 }
                 p_i2c_dev_status->State      = BSP_I2C_STATE_IDLE;
                 p_i2c_dev_status->AccessType = BSP_I2C_ACCESS_TYPE_NONE;

                 DEF_BIT_CLR(p_i2c_reg->I2C_CR2, BSP_I2C_REG_CR2_ITEVTEN |
                                                 BSP_I2C_REG_CR2_ITERREN);
                 
                 BSP_OS_SemPost(&(p_i2c_dev_status->SemWait));
             }
             break;

        case BSP_I2C_STATE_IDLE:
        default:
             break;
    }

}


/*
*********************************************************************************************************
*                                        BSP_I2Cx_EventISR_Handler()
*
* Description : Generic ISR events handler
*
* Argument(s) : i2c_nbr           I2C peripheral number.
*                                     0  I2C1 peripheral
*                                     1  I2C2 peripheral
*
* Return(s)   : none.
*
* Caller(s)   : BSP_I2C1_EventISR_Handler()
*               BSP_I2C2_EventISR_Handler()
*
* Note(s)     : none.
*********************************************************************************************************
*/

static  void  BSP_I2C1_ErrISR_Handler    (void) 
{
    BSP_I2Cx_ErrISR_Handler(0);
}


static  void  BSP_I2C2_ErrISR_Handler    (void)
{
    BSP_I2Cx_ErrISR_Handler(1);
}


/*
*********************************************************************************************************
*                                        BSP_I2Cx_ErrISR_Handler()
*
* Description : Generic ISR errors handler
*
* Argument(s) : i2c_nbr           I2C peripheral number.
*                                     0  I2C1 peripheral
*                                     1  I2C2 peripheral
*
* Return(s)   : none.
*
* Caller(s)   : BSP_I2C1_ErrISR_Handler()
*               BSP_I2C2_ErrISR_Handler()
*
* Note(s)     : none
*********************************************************************************************************
*/

static  void  BSP_I2Cx_ErrISR_Handler (CPU_INT08U  i2c_nbr)
{
    BSP_I2C_DEV_STATUS  *p_i2c_dev_status;
    BSP_I2C_REG         *p_i2c_reg;
    CPU_INT32U           int_stat1;

    
     switch (i2c_nbr) {
        case 0:
             p_i2c_reg = (BSP_I2C_REG *)BSP_I2C_REG_I2C1_BASE_ADDR;
             break;

        case 1:
             p_i2c_reg = (BSP_I2C_REG *)BSP_I2C_REG_I2C2_BASE_ADDR;
             break;
        
        default:
             break;
    }

    p_i2c_dev_status  = (BSP_I2C_DEV_STATUS *)&BSP_I2C_DevTbl[i2c_nbr];
    int_stat1         =  p_i2c_reg->I2C_SR1;
    int_stat1        &=  BSP_I2C_REG_SR1_ERR_MASK;
    
    DEF_BIT_CLR(p_i2c_reg->I2C_SR1, int_stat1);
    
    if (p_i2c_dev_status->State != BSP_I2C_STATE_IDLE) {
        p_i2c_dev_status->State      = BSP_I2C_STATE_IDLE;
        p_i2c_dev_status->AccessType = BSP_I2C_ACCESS_TYPE_NONE;
        DEF_BIT_SET(p_i2c_reg->I2C_CR1, BSP_I2C_REG_CR1_STOP);                              

        DEF_BIT_CLR(p_i2c_reg->I2C_CR2, (BSP_I2C_REG_CR2_ITEVTEN |
                                         BSP_I2C_REG_CR2_ITERREN));
                 
        BSP_OS_SemPost(&(p_i2c_dev_status->SemWait));
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品在线播放免费| 亚洲人成在线播放网站岛国 | 欧美日韩中文精品| 亚洲午夜精品在线| 91精品国产麻豆国产自产在线| 婷婷激情综合网| 精品国产免费人成在线观看| 国产一区二区导航在线播放| 中文字幕av一区 二区| 99久久99久久精品国产片果冻| 中文字幕一区二区三区在线观看 | 日韩一区国产二区欧美三区| 国模娜娜一区二区三区| 国产午夜精品一区二区三区视频| 成人一区在线看| 亚洲老司机在线| 91精品国产91久久综合桃花| 国产成人午夜视频| 亚洲精品成人天堂一二三| 欧美亚洲综合一区| 精品一二线国产| ●精品国产综合乱码久久久久| 欧美日韩免费一区二区三区视频 | 精品国产91久久久久久久妲己 | 制服丝袜在线91| 国产一区二区主播在线| 亚洲欧美激情插| 日韩视频免费直播| 91麻豆精东视频| 精品一二线国产| 亚洲在线视频网站| 久久免费视频一区| 91国产福利在线| 国内成人精品2018免费看| 自拍偷拍国产精品| 日韩欧美三级在线| 91视频com| 国产一区二区三区美女| 亚洲国产sm捆绑调教视频| 国产亚洲精品bt天堂精选| 欧美性极品少妇| 99久久婷婷国产综合精品电影| 日韩成人精品在线观看| 亚洲女子a中天字幕| 26uuu国产电影一区二区| 欧美性猛交xxxx黑人交 | 91女神在线视频| 精品一区二区国语对白| 婷婷国产在线综合| 亚洲另类在线一区| 国产精品久久免费看| 日韩精品在线一区| 欧美性猛交xxxx乱大交退制版| 粉嫩av一区二区三区| 蜜臀精品一区二区三区在线观看 | 久久欧美中文字幕| 91.com视频| 色av一区二区| 9人人澡人人爽人人精品| 久久精品国产精品亚洲精品| 丝袜国产日韩另类美女| 依依成人综合视频| 国产精品午夜久久| 欧美精品一区二区三区很污很色的| 欧美色图片你懂的| 欧美自拍偷拍一区| 在线观看视频一区| 日本精品裸体写真集在线观看| av亚洲产国偷v产偷v自拍| 国产精品资源在线观看| 国产在线不卡视频| 国产一区欧美一区| 国产河南妇女毛片精品久久久| 国产一区二区三区四| 国产自产v一区二区三区c| 久久9热精品视频| 老司机精品视频在线| 日本一区中文字幕| 日产欧产美韩系列久久99| 日韩高清不卡在线| 蜜桃一区二区三区在线观看| 欧美aaaaaa午夜精品| 国产在线一区二区综合免费视频| 精品一区中文字幕| 国产一区二区三区| 国产91精品一区二区| av一区二区三区| 日本韩国一区二区| 欧美日韩aaaaaa| 日韩精品中文字幕一区二区三区 | 91日韩精品一区| 色狠狠色噜噜噜综合网| 在线播放国产精品二区一二区四区 | 亚洲免费观看在线视频| 亚洲一二三四久久| 日本不卡一区二区三区| 精品一区二区免费视频| 不卡影院免费观看| 欧美性高清videossexo| 欧美videos中文字幕| 国产农村妇女毛片精品久久麻豆 | 视频一区二区欧美| 香蕉久久夜色精品国产使用方法 | 亚洲国产成人私人影院tom| 国产精品久久久久久久久快鸭| 国产精品成人一区二区三区夜夜夜| 亚洲伦理在线免费看| 性久久久久久久| 国产99久久久精品| 欧美日韩国产综合一区二区三区| 欧美v亚洲v综合ⅴ国产v| 国产精品福利av| 婷婷国产v国产偷v亚洲高清| 激情综合网激情| 欧美最猛黑人xxxxx猛交| 日韩欧美国产wwwww| 中文字幕中文字幕一区二区 | 久久er精品视频| a在线欧美一区| 日韩一区二区三区在线观看| 国产精品欧美综合在线| 婷婷久久综合九色综合伊人色| 成人免费看片app下载| 在线综合+亚洲+欧美中文字幕| 欧美国产一区二区在线观看| 午夜精品福利一区二区蜜股av| 国产成人亚洲综合a∨婷婷| 69堂成人精品免费视频| 国产精品国产三级国产专播品爱网| 奇米亚洲午夜久久精品| 色婷婷精品久久二区二区蜜臀av| 欧美成人福利视频| 亚洲小少妇裸体bbw| 成人黄动漫网站免费app| 精品久久久久久久久久久久久久久久久 | 亚洲精品日韩综合观看成人91| 奇米精品一区二区三区在线观看 | 一区二区三区日韩在线观看| 狠狠色狠狠色合久久伊人| 欧美亚洲一区二区在线| 国产精品狼人久久影院观看方式| 免费看日韩a级影片| 欧美性感一类影片在线播放| 中文字幕日韩av资源站| 国产乱码字幕精品高清av| 欧美伦理影视网| 一个色在线综合| av一区二区三区黑人| 国产精品色在线观看| 国内精品国产成人国产三级粉色| 正在播放亚洲一区| 亚洲一区二区三区四区五区黄| av网站免费线看精品| 国产欧美一区二区精品秋霞影院 | 亚洲第一久久影院| 91丨porny丨国产| 国产精品久久久久影院亚瑟| 国产精品99久久久久久有的能看| 日韩欧美卡一卡二| 图片区日韩欧美亚洲| 欧美日韩精品综合在线| 亚洲国产wwwccc36天堂| 欧美午夜电影网| 亚洲国产乱码最新视频| 欧美日韩美少妇| 偷拍一区二区三区四区| 欧美日韩一区二区在线观看 | 国产一区二区在线免费观看| 日韩欧美国产一区二区在线播放| 日韩精品91亚洲二区在线观看| 欧美性生交片4| 午夜私人影院久久久久| 欧美日韩一区二区三区视频| 亚洲成人免费看| 欧美精品黑人性xxxx| 青青草国产成人99久久| 精品久久久久久最新网址| 紧缚奴在线一区二区三区| 久久亚洲精精品中文字幕早川悠里| 国产激情视频一区二区三区欧美| 久久久国产精品不卡| 成人高清免费在线播放| 亚洲伊人伊色伊影伊综合网| 欧美日韩激情一区二区三区| 日韩国产欧美三级| 久久综合一区二区| 成人在线视频首页| 一区二区三区在线视频观看| 欧美日韩高清不卡| 精品一区二区久久久| 国产精品成人在线观看| 欧美色国产精品| 久久aⅴ国产欧美74aaa| 最近日韩中文字幕| 欧美日韩中文字幕一区二区| 麻豆国产欧美日韩综合精品二区| 久久久久久久久久电影| 91福利视频久久久久| 美女任你摸久久| 自拍偷拍国产精品|