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

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

?? i2c.c

?? SD卡和AIC23數字音頻輸出實驗, FreeDev Audio Dsp Board采用了TI公司的TVL320AIC23 1、控制接口使用I2C
?? C
字號:
/***************************************************
模塊說明      :I2C控制接口模塊
芯片類型      :Nios II
作    者      :柳軍勝
公    司      :杭州自由電子科技
            :http://www.freefpga.com
電   話       :0571-85084089
修    改      :
日期時間      :20060522
說    明      :本程序模塊僅提供I2C接口設備底層讀寫流程,不涉及
             具體應用芯片控制邏輯。
****************************************************/
#include <stdio.h>
#include <io.h>
#include <system.h>
#include <i2c_master.h>

static void *gBaseAddr=NULL;

/*********************************************
函數名:init_i2c
功  能:初始化I2C控制器、應用環境參數初始化設置
輸  入:外設地址
返  回: 
備  注:
      應用I2C函數前必須先調用此函數設置I2C外設基地址
      預分頻允許100K~400K
**********************************************/
int init_i2c(void *baseAddr)
{
  unsigned char uc,rdata;
  
  if(gBaseAddr==NULL)
    gBaseAddr=baseAddr;
    
  //setup prer
  IOWR(gBaseAddr , OC_I2C_PRER_LO ,0x63 );
  IOWR(gBaseAddr,  OC_I2C_PRER_HI, 0x00);
  
  //setup ctr
  IOWR(gBaseAddr , OC_I2C_CTR ,0x80 );
  
  //read_status
  //uc=IORD(gBaseAddr,OC_I2C_SR);
  
  //send stop
  IOWR(gBaseAddr,OC_I2C_TXR,0x55);
  IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_WR|OC_I2C_STO);
  
  return 0;
}

/*********************************************
函數名:wait_nTip_ACK
功  能:等待傳輸結束和應答
輸  入:外設地址
返  回: 0 成功 <0失敗
備  注:
      判斷狀態寄存器標志位完成功能
**********************************************/
//wait transmit over and wait ACK
int wait_nTip_ACK()
{
    unsigned char uc;
    int i;
    
    if(gBaseAddr==NULL)
      return -1;
      
    i=0;
    while(1){
      //read_status TIP
      uc=IORD(gBaseAddr,OC_I2C_SR);
      if(OC_ISCLEAR(uc,OC_I2C_TIP))break;
      i++;
      if(i>10000)return -2;
    }
    
    i=0;
     while(1){
      //read_status ACK
      uc=IORD(gBaseAddr,OC_I2C_SR);
      if(OC_ISCLEAR(uc,OC_I2C_RXACK))break;
      i++;
      if(i>10000)
      {
        //I2C器件沒有應答時加入STOP發送 20060523
        IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_STO); 
        return -3;
      }
    } 
    return 0;
}

/*********************************************
函數名:wait_nTip
功  能:等待傳輸結束
輸  入:外設地址
返  回: 0 成功 <0失敗
備  注:
      判斷狀態寄存器標志位完成功能
**********************************************/
//wait transmit over 
int wait_nTip()
{
    unsigned char uc;
    int i;
    
    if(gBaseAddr==NULL)
      return -1;
      
    i=0;
     while(1){
      //read_status TIP
      uc=IORD(gBaseAddr,OC_I2C_SR);
      if(OC_ISCLEAR(uc,OC_I2C_TIP))break;
      i++;
      if(i>10000)return -1;
    }
    return 0;
}

/*********************************************
函數名:wait_idle
功  能:等待空閑
輸  入:外設地址
返  回: 0 成功 <0失敗
備  注:
      判斷狀態寄存器標志位完成功能
**********************************************/
//wait i2c idle 
int wait_idle()
{
    unsigned char uc;
    int i;
    
    if(gBaseAddr==NULL)
      return -1;
      
    i=0;
     while(1){
      //read_status TIP
      uc=IORD(gBaseAddr,OC_I2C_SR);
      if(OC_ISCLEAR(uc,OC_I2C_BUSY))break;
      i++;
      if(i>10000)return -1;
    }
    return 0;
}

/*********************************************
函數名:start_write_waitack()
功  能:I2C啟動、寫數據、等待ACK
輸  入:外設地址
返  回: 0 成功 <0失敗
備  注:
      判斷I2C狀態寄存器標志位完成功能
**********************************************/
int start_write_waitack(unsigned char data)
{
    int iRet;
    
    if(wait_idle()<0){
      printf("i2c control is busy\n");
      return -1;
    }
    
    IOWR(gBaseAddr,OC_I2C_TXR,data);
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_STA|OC_I2C_WR);
    iRet=wait_nTip_ACK();
    if(iRet<0){
      printf("1wait _nTip_ACK timeover\n");
      return -2;
    }
    
    return 0;
}

/*********************************************
函數名:start_read_waitack()
功  能:I2C啟動、寫數據、等待ACK
輸  入:外設地址
返  回: 0 成功 <0失敗
備  注:
      判斷I2C狀態寄存器標志位完成功能
**********************************************/
int start_read_waitack(unsigned char data)
{
    int iRet;
    
    /* restart時狀態不是 IDLE 所以不需要等待idle */
    /*
      if(wait_idle()<0){
      printf("i2c control is busy\n");
      return -1;
    }
    */
    
    /* 這里寫的數據里面 R/W位為1,但是控制標志置OC_I2C_WR控制輸出從機地址 */
    IOWR(gBaseAddr,OC_I2C_TXR,data);
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_STA|OC_I2C_WR);
    iRet=wait_nTip_ACK();
    if(iRet<0){
      printf("1wait _nTip_ACK timeover\n");
      return -2;
    }
    
    return 0;
}

/*********************************************
函數名:write_waitack()
功  能:寫數據、等待ACK
輸  入:外設地址
返  回: 0 成功 <0失敗
備  注:
      判斷I2C狀態寄存器標志位完成功能
**********************************************/
int write_waitack(unsigned char data)
{
    int iRet;
    
    IOWR(gBaseAddr,OC_I2C_TXR,data);
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_WR);
    iRet=wait_nTip_ACK();
    if(iRet<0){
      printf("1wait _nTip_ACK timeover\n");
      return -2;
    }
    
    return 0;
}

/*********************************************
函數名:write_waitack_stop()
功  能:寫數據、等待ACK、發送STOP
輸  入:外設地址
返  回: 0 成功 <0失敗
備  注:
      判斷I2C狀態寄存器標志位完成功能
**********************************************/
int write_waitack_stop(unsigned char data)
{
    int iRet;
  
    IOWR(gBaseAddr,OC_I2C_TXR,data);
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_WR|OC_I2C_STO);
    iRet=wait_nTip_ACK();
    if(iRet<0){
      printf("1wait _nTip_ACK timeover\n");
      return -2;
    }
    
    return 0;
}

/*********************************************
函數名:read_sendack()
功  能:讀數據、發送ACK
輸  入:外設地址
返  回: 0 成功 <0失敗
備  注:
      判斷I2C狀態寄存器標志位完成功能
**********************************************/
int read_sendack(unsigned char *data)
{
    int iRet;
  
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_RD|OC_I2C_ACK); 
    iRet=wait_nTip();
    if(iRet<0)
      return -1;
    
    *data=IORD(gBaseAddr,OC_I2C_RXR);
    return 0; 
}

/*********************************************
函數名:read_sendack_stop()
功  能:讀數據、發送ACK、STOP
輸  入:外設地址
返  回: 0 成功 <0失敗
備  注:
      判斷I2C狀態寄存器標志位完成功能
**********************************************/
int read_sendack_stop(unsigned char *data)
{
    int iRet;
  
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_RD|OC_I2C_ACK|OC_I2C_STO); 
    iRet=wait_nTip();
    if(iRet<0)
      return -1;
    
    *data=IORD(gBaseAddr,OC_I2C_RXR);
    return 0; 
}



/*********************************************
函數名:read_I2c_EEprom
功  能:讀EEPROM
輸  入:外設地址,設備地址,字節地址
返  回: 讀取的數據
備  注:
**********************************************/
unsigned char read_I2C_EEprom(unsigned char slaveAddr,unsigned char addr)
{
    unsigned char rdata;
      
    //write chip addr and write bit
    IOWR(gBaseAddr,OC_I2C_TXR,slaveAddr);
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_STA|OC_I2C_WR);
    wait_nTip_ACK();
    
    //write eeprom addr 
    IOWR(gBaseAddr,OC_I2C_TXR,addr);
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_WR);
    wait_nTip_ACK();
    
    //write chip addr and read bit
    IOWR(gBaseAddr,OC_I2C_TXR,slaveAddr|0x01);
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_STA|OC_I2C_WR);
    wait_nTip_ACK();
    
    //read eeprom data
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_RD|OC_I2C_STO|OC_I2C_ACK); 
    wait_nTip();
    
    rdata=IORD(gBaseAddr,OC_I2C_RXR);    
    return rdata;
  }

/*********************************************
函數名:write_I2c_EEprom
功  能:寫EEPROM
輸  入:外設地址,設備地址,字節地址
返  回: 
備  注:
**********************************************/
unsigned char write_I2C_EEprom(unsigned char slaveAddr,unsigned char addr,unsigned char data)
{
    unsigned char rdata;
    unsigned char rc;
    
    if(wait_idle()<0){
      printf("i2c control is busy\n");
      return 0;
    }
    
    //write chip addr and write bit
    IOWR(gBaseAddr,OC_I2C_TXR,slaveAddr);
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_STA|OC_I2C_WR);
    printf("w1\n");
    rc=wait_nTip_ACK();
    
    //write eeprom addr 
    IOWR(gBaseAddr,OC_I2C_TXR,addr);
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_WR);
    printf("w2\n");
    rc=wait_nTip_ACK();
    
    //write data 
    IOWR(gBaseAddr,OC_I2C_TXR,data);
    IOWR(gBaseAddr,OC_I2C_CR, OC_I2C_WR|OC_I2C_STO);
    printf("w3\n");
    rc=wait_nTip_ACK();
       
    return data;
  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频中文一区二区三区在线观看| 狂野欧美性猛交blacked| 成人自拍视频在线观看| 国产亚洲成aⅴ人片在线观看| 欧美日韩国产一二三| 亚洲精品成人少妇| 91国内精品野花午夜精品| 一级特黄大欧美久久久| 欧美精品电影在线播放| 日韩综合小视频| 精品久久国产97色综合| 国产福利不卡视频| 中文字幕中文字幕中文字幕亚洲无线| 91色在线porny| 亚洲午夜成aⅴ人片| 日韩一区二区在线播放| 国产伦精品一区二区三区免费迷 | 一个色在线综合| 欧美日韩一区成人| 久久99国产精品久久| 久久综合九色欧美综合狠狠| 成人免费视频网站在线观看| 亚洲激情在线激情| 日韩一区二区免费在线电影 | 成人小视频在线观看| 亚洲色图欧洲色图婷婷| 91精品国产高清一区二区三区| 久久国内精品视频| **欧美大码日韩| 日韩一区二区视频| 波多野结衣中文字幕一区| 亚洲成人一区在线| 国产欧美一区二区精品性色 | 欧美肥妇毛茸茸| 国产超碰在线一区| 亚洲成人av电影在线| 久久久久久久综合日本| 91黄色激情网站| 国产精品亚洲专一区二区三区 | 亚洲电影在线播放| 久久这里只精品最新地址| 91香蕉视频在线| 极品少妇一区二区| 亚洲一区二区中文在线| 久久久亚洲午夜电影| 日本福利一区二区| 风间由美性色一区二区三区| 视频一区中文字幕| 亚洲色图制服诱惑 | 精品久久久网站| 色婷婷av一区二区三区大白胸 | 久久爱www久久做| 一区二区理论电影在线观看| 久久久av毛片精品| 欧美一区二区三区不卡| 色av成人天堂桃色av| 国产乱对白刺激视频不卡| 日韩专区中文字幕一区二区| 中文字幕制服丝袜一区二区三区| 欧美videofree性高清杂交| 色婷婷国产精品| 99久久精品国产观看| 顶级嫩模精品视频在线看| 精东粉嫩av免费一区二区三区| 亚洲成a人v欧美综合天堂| 亚洲视频中文字幕| 国产精品国产三级国产aⅴ无密码| 欧美大片顶级少妇| 日韩一区二区影院| 91麻豆精品国产91久久久资源速度| 91美女片黄在线| 成人av在线影院| 成人综合日日夜夜| 国产成人精品一区二区三区四区| 日韩av在线播放中文字幕| 亚洲成人av在线电影| 亚洲一卡二卡三卡四卡五卡| 亚洲自拍偷拍九九九| 亚洲精品伦理在线| 亚洲欧美日韩久久| 亚洲丝袜制服诱惑| 一区二区三区日韩精品| 依依成人综合视频| 亚洲国产精品久久久久秋霞影院| 亚洲综合一区二区| 天堂影院一区二区| 日韩中文字幕麻豆| 玖玖九九国产精品| 极品尤物av久久免费看| 国产精品99久久久久久久女警| 国产一区中文字幕| 成人国产一区二区三区精品| yourporn久久国产精品| 色哟哟在线观看一区二区三区| 91免费视频大全| 欧美日韩一二三区| 欧美一级高清片在线观看| 日韩精品中午字幕| 国产午夜精品一区二区三区视频| 久久只精品国产| 中文字幕五月欧美| 一区二区三区av电影| 午夜天堂影视香蕉久久| 久久国产三级精品| 国产传媒久久文化传媒| 97精品国产露脸对白| 欧美日韩免费高清一区色橹橹 | 免费一级欧美片在线观看| 激情亚洲综合在线| 9i在线看片成人免费| 欧美性高清videossexo| 精品少妇一区二区三区在线播放 | 一个色在线综合| 免费人成在线不卡| 国产成人免费视| 在线免费观看一区| 欧美sm极限捆绑bd| 亚洲视频一区二区免费在线观看| 亚洲国产精品久久一线不卡| 国产一区二区主播在线| 99国产精品久久久久| 欧美一区二区三区四区久久| 精品一区二区三区在线播放视频| 国产成人在线观看| 欧美日韩精品免费观看视频| 日韩免费观看高清完整版| 国产精品麻豆欧美日韩ww| 亚洲444eee在线观看| 成人美女视频在线观看18| 欧美高清视频www夜色资源网| 久久精品夜色噜噜亚洲a∨| 一区二区三区毛片| 国产成人亚洲综合a∨猫咪| 欧美日韩不卡一区二区| 中文字幕一区二区三区四区 | 中文字幕一区二区三区在线播放 | 另类综合日韩欧美亚洲| 91精彩视频在线观看| 精品国产乱码久久久久久闺蜜| 一区二区在线免费观看| 大尺度一区二区| 日韩精品影音先锋| 亚洲一区二区三区四区五区黄| 国产成人精品一区二区三区网站观看| 欧美日韩精品系列| 自拍视频在线观看一区二区| 国产一区二区成人久久免费影院| 欧美日韩免费观看一区三区| 亚洲品质自拍视频| 国产二区国产一区在线观看| 日韩免费在线观看| 丝袜美腿高跟呻吟高潮一区| 99v久久综合狠狠综合久久| 国产亚洲欧美日韩在线一区| 日本免费在线视频不卡一不卡二| 在线一区二区观看| 成人免费在线观看入口| 国产成人在线色| 久久久91精品国产一区二区精品 | 国产亲近乱来精品视频| 日本sm残虐另类| 欧美日本在线一区| 亚洲国产精品人人做人人爽| 91精品福利视频| 一区二区三区中文免费| av成人免费在线| 成人欧美一区二区三区| www.亚洲在线| 国产精品久久久久久亚洲毛片 | 国产精品欧美一区二区三区| 国产一区二区伦理| 久久综合精品国产一区二区三区 | 久久九九影视网| 国产精品99久久久久久久女警| wwwwxxxxx欧美| 国产精品亚洲一区二区三区妖精| 久久久精品tv| 成人激情小说网站| 日韩一区中文字幕| 色视频一区二区| 亚洲国产视频一区二区| 欧美三级日韩在线| 免费日韩伦理电影| 久久久久久免费毛片精品| 丰满亚洲少妇av| 亚洲乱码国产乱码精品精小说| 99re视频精品| 亚洲午夜影视影院在线观看| 欧美日韩一区二区三区在线 | 国产日韩精品视频一区| 日韩精品在线网站| 国产激情91久久精品导航| 国产精品色哟哟| 日本福利一区二区| 日本在线不卡视频| 久久久夜色精品亚洲| 色婷婷一区二区三区四区| 日韩福利视频网| 日本一区二区三区国色天香| 色综合久久66|