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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? vi2c.c

?? arm7 sample code, some demo for arm7 of linux
?? C
字號:
/********************************************************************
  		LM3S101單片機模擬I2C軟件包(V1.1)
    文件名:VI2C_LM3S101.C
    相關(guān)文件:VI2C_LM3S101.H
    功能說明:本模擬I2C軟件包包含了I2C操作的底層函數(shù),如發(fā)送數(shù)據(jù)及接收
數(shù)據(jù),應(yīng)答位發(fā)送,并提供了幾個直接面對器件的操作函數(shù),它很方便的與用戶程
序連接并擴展.....  
    注意:函數(shù)是采用軟件延時的方法產(chǎn)生SCL脈沖,故對高晶振頻率要作 一定的
修改....(本軟件包對應(yīng)于處理器采用6MHz的外部晶振。)
********************************************************************/
#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "hw_gpio.h"
#include "src/interrupt.h"
#include "src/gpio.h"

// 宏定義
#ifndef  uchar
#define  uchar unsigned char
#endif

#ifndef  uint 	 
#define  uint  unsigned int
#endif

void delay(uint no)
{
    for(; no; no--);
}

// I2C引腳的定義。
#define SDA  GPIO_PIN_3         //模擬I2C數(shù)據(jù)傳送位
#define SCL  GPIO_PIN_2         //模擬I2C時鐘控制位

int ack;	                //應(yīng)答標志位ack

/*******************************************************************
                     起動總線函數(shù)               
函數(shù)原型: void  Start_I2c();  
功能:     啟動I2C總線,即發(fā)送I2C起始條件
          起始條件為:在SCL線是高電平時,SDA線由高電平向低電平切換   
********************************************************************/
void Start_I2c()
{
  //發(fā)送起始條件的數(shù)據(jù)信號
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))) = SDA;   // SDA = 1;
  delay(6);
  //發(fā)送起始條件的時鐘信號
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = SCL;   // SCL = 1;
  delay(30);    	        //起始條件建立時間大于4.7us,延時
  //發(fā)送起始信號
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))) = ~SDA;   // SDA = 0;
  delay(30);    	        //起始條件鎖定時間大于4.7us
  //鉗住I2C總線,準備發(fā)送或接收數(shù)據(jù) 
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = ~SCL;   // SCL = 0;
  delay(12);
}
/*******************************************************************



/*******************************************************************
                       結(jié)束總線函數(shù)               
函數(shù)原型: void  Stop_I2c();  
功能:     結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件.
          停止條件為:在SCL線是高電平時,SDA線由低電平向高電平切換  
********************************************************************/
void Stop_I2c()
{
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))) = ~SDA;  	        //發(fā)送結(jié)束條件的數(shù)據(jù)信號
  delay(6);   	        
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = SCL;  	        //發(fā)送結(jié)束條件的時鐘信號
  delay(30);               //結(jié)束條件建立時間大于4μs
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))) = SDA;  	        //發(fā)送I2C總線結(jié)束信號
  delay(24);
}
/*******************************************************************



/*******************************************************************
                 字節(jié)數(shù)據(jù)發(fā)送函數(shù)               
函數(shù)原型: void  SendByte(uchar c);
功能:     將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對
          此狀態(tài)位進行操作.(不應(yīng)答或非應(yīng)答都使ack=0)     
     	  發(fā)送數(shù)據(jù)正常,ack=1; ack=0表示被控器無應(yīng)答或損壞。
********************************************************************/
void  SendByte(uchar c)
{
 uchar BitCnt;
 
 //要傳送的數(shù)據(jù)長度為8位,
 for(BitCnt=0;BitCnt<8;BitCnt++)  
   {
     //判斷發(fā)送位  
     if((c<<BitCnt)&0x80)   
       {
        HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))) = SDA;   
       }
       else  
         {
          HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))) = ~SDA;
         }
        
     delay(6);
     HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = SCL;      //置時鐘線為高,通知被控器開始接收數(shù)據(jù)位
     delay(30);                                                     //保證時鐘高電平周期大于4μs
     HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = ~SCL; 
   }
    
  delay(12);
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))) = SDA;         //8位發(fā)送完后釋放數(shù)據(jù)線,準備接收應(yīng)答位
  delay(12);
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = SCL;
  delay(18);
  if(!HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))))                  //判斷是否接收到應(yīng)答信號
       ack=0;
      else 
       ack=1;

  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = ~SCL;
  delay(12);
}
/*******************************************************************



/*******************************************************************
                 字節(jié)數(shù)據(jù)接收函數(shù)               
函數(shù)原型: uchar  RcvByte();
功能:  	  用來接收從器件傳來的數(shù)據(jù),并判斷總線錯誤(不發(fā)應(yīng)答信號),
          發(fā)完后請用應(yīng)答函數(shù)應(yīng)答從機。  
********************************************************************/	
uchar  RcvByte()
{
  uchar retc;
  uchar BitCnt;
  
  retc=0; 
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))) = SDA;         
  GPIODirModeSet(GPIO_PORTB_BASE, SDA,GPIO_DIR_MODE_IN);             //置數(shù)據(jù)線為輸入方式
  for(BitCnt=0;BitCnt<8;BitCnt++)
    {
     delay(6);           
     HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = ~SCL;     //置時鐘線為低,準備接收數(shù)據(jù)位
     delay(30);                                                      //時鐘低電平周期大于4.7μ
     HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = SCL;      //置時鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效
     delay(12);
     retc=retc<<1;

     if(HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))))         //讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中 
         retc=retc+1;
 
     delay(12);
    }
  GPIODirModeSet(GPIO_PORTB_BASE, SDA,GPIO_DIR_MODE_OUT);            // 置數(shù)據(jù)線為輸出方式
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = ~SCL;    
  delay(12);
  return(retc);
}
/*******************************************************************



/********************************************************************
                     應(yīng)答子函數(shù)
函數(shù)原型:  void Ack_I2c(bit a);
功能:      主控器進行應(yīng)答信號(可以是應(yīng)答或非應(yīng)答信號,由位參數(shù)a決定)
********************************************************************/
void Ack_I2c(int a)
{
  if(a==0)
     HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))) = ~SDA;     //在此發(fā)出應(yīng)答或非應(yīng)答信號 
    else 
      HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SDA << 2))) = SDA;

  delay(18);
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = SCL;
  delay(30);                                                         //時鐘低電平周期大于4μs  
  HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (SCL << 2))) = ~SCL;        //清時鐘線,鉗住I2C總線以便繼續(xù)接收
  delay(12);
}
/*******************************************************************



/*******************************************************************
                 用戶接口函數(shù)                                   
*******************************************************************/


/*******************************************************************
                 向無子地址器件發(fā)送字節(jié)數(shù)據(jù)函數(shù)               
函數(shù)原型: uchar  ISendByte(uchar sla,uchar c);  
功能:     從啟動總線到發(fā)送地址,數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla.
          如果返回1表示操作成功,否則操作有誤。
注意:    使用前必須已結(jié)束總線。
********************************************************************/
uchar ISendByte(uchar sla,uchar c)
{
  Start_I2c();          //啟動總線
  SendByte(sla);        //發(fā)送器件地址
  if(ack==0)
     return(0);

  SendByte(c);          //發(fā)送數(shù)據(jù)
  if(ack==0)            
     return(0);

  Stop_I2c();           //結(jié)束總線 
  return(1);
}
/*******************************************************************



/*******************************************************************
                    向有子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù)               
函數(shù)原型: uchar  ISendStr(uchar sla,uchar suba,uchar *s,uchar no);  
功能:     從啟動總線到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線的全過程,從器件
          地址sla,子地址suba,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個字節(jié)。
          如果返回1表示操作成功,否則操作有誤。
注意:    使用前必須已結(jié)束總線。
********************************************************************/
uchar ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
{
  uchar i;

  Start_I2c();          //啟動總線
  SendByte(sla);        //發(fā)送器件地址
  if(ack==0)           
    return(0);

  SendByte(suba);       //發(fā)送器件子地址
  if(ack==0)
    return(0);

  for(i=0;i<no;i++)
    {   
     SendByte(*s);      //發(fā)送數(shù)據(jù)
     if(ack==0)
       return(0);
     s++;
    } 
  Stop_I2c();           //結(jié)束總線
  return(1);
}
/*******************************************************************


/*******************************************************************
                    向無子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù)               
函數(shù)原型: uchar  ISendStrExt(uchar sla,uchar *s,uchar no);  
功能:     從啟動總線到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線的全過程,從器件
          地址sla,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個字節(jié)。
          如果返回1表示操作成功,否則操作有誤。
注意:    使用前必須已結(jié)束總線。
********************************************************************/
uchar ISendStrExt(uchar sla,uchar *s,uchar no)
{
  uchar i;

  Start_I2c();          //啟動總線
  SendByte(sla);        //發(fā)送器件地址
  if(ack==0)
    return(0);

  for(i=0;i<no;i++)
    {   
     SendByte(*s);      //發(fā)送數(shù)據(jù)
     if(ack==0)
       return(0);
     s++;
    } 
  Stop_I2c();           //結(jié)束總線 
  return(1);
}
/*******************************************************************




/*******************************************************************
                    向無子地址器件讀取一字節(jié)數(shù)據(jù)函數(shù)               
函數(shù)原型: uchar  IRcvByte(uchar sla,ucahr *c);  
功能:     從啟動總線到發(fā)送地址,讀數(shù)據(jù),結(jié)束總線的全過程,從器件地
          址sla,返回值在c.
          如果返回1表示操作成功,否則操作有誤。
注意:    使用前必須已結(jié)束總線。
********************************************************************/
uchar IRcvByte(uchar sla,uchar *c)
{
  Start_I2c();          //啟動總線
  SendByte(sla+1);      //發(fā)送器件地址
  if(ack==0)
     return(0);

  *c=RcvByte();         //接收數(shù)據(jù)
  Ack_I2c(1);           //接收完,發(fā)送非應(yīng)答位,結(jié)束總線
  Stop_I2c();           //結(jié)束總線 
  return(1);
}
/*******************************************************************



/*******************************************************************
                    向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù)               
函數(shù)原型: uchar  ISendStr(uchar sla,uchar suba,uchar *s,uchar no);  
功能:     從啟動總線到發(fā)送地址,子地址,讀數(shù)據(jù),結(jié)束總線的全過程,從器件
          地址sla,子地址suba,讀出的內(nèi)容放入s指向的存儲區(qū),讀no個字節(jié)。
           如果返回1表示操作成功,否則操作有誤。
注意:    使用前必須已結(jié)束總線。
********************************************************************/
uchar IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
{
  uchar i;

  Start_I2c();          //啟動總線
  SendByte(sla);        //發(fā)送器件地址
  if(ack==0)
     return(0);

  SendByte(suba);       //發(fā)送器件子地址
  if(ack==0)
     return(0);



  Start_I2c();		//重新啟動總線
  SendByte(sla+1);
  if(ack==0)
     return(0);




  for(i=0;i<no-1;i++)   //先接收前(no-1)字節(jié)
   {   
     *s=RcvByte();      //接收數(shù)據(jù)
     Ack_I2c(0);        //還未接收完,發(fā)送應(yīng)答位  
     s++;
   } 
   *s=RcvByte();        //接收第no字節(jié)
   Ack_I2c(1);          //接收完,發(fā)送非應(yīng)答位
   Stop_I2c();          //結(jié)束總線 
   return(1);
}
/*******************************************************************



/*******************************************************************
                    向無子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù)               
函數(shù)原型: uchar  ISendStrExt(uchar sla,uchar *s,uchar no);  
功能:     從啟動總線到發(fā)送地址,讀數(shù)據(jù),結(jié)束總線的全過程.
          從器件地址sla,讀出的內(nèi)容放入s指向的存儲區(qū),
          讀no個字節(jié)。如果返回1表示操作成功,否則操作有誤。
注意:    使用前必須已結(jié)束總線。
********************************************************************/
uchar IRcvStrExt(uchar sla,uchar *s,uchar no)
{
  uchar i;

  Start_I2c();
  SendByte(sla+1);	//R/W選擇位,為1時為讀, 為0 時為寫
  if(ack==0)return(0);

  for(i=0;i<no-1;i++)   //先接收前(no-1)個字節(jié)
   {   
     *s=RcvByte();      //接收數(shù)據(jù)
     Ack_I2c(0);        //未讀取完,發(fā)送應(yīng)答位  
     s++;
   } 
   *s=RcvByte();        //接收第no字節(jié)
   Ack_I2c(1);          //接收完,發(fā)送非應(yīng)答位
   Stop_I2c();          //結(jié)束總線 
   return(1);
}
//*******************************************************************

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久动漫| 中文字幕中文在线不卡住| 天天综合天天做天天综合| av电影天堂一区二区在线| 国产亚洲婷婷免费| 精品一区二区三区视频| 日韩视频在线你懂得| 日韩成人一区二区| 6080亚洲精品一区二区| 亚洲韩国一区二区三区| 欧美日韩亚洲综合在线 | 一区二区成人在线| 91蝌蚪porny| 亚洲精品午夜久久久| 91麻豆福利精品推荐| 中文字幕字幕中文在线中不卡视频| 粉嫩av亚洲一区二区图片| 国产精品免费aⅴ片在线观看| 成人精品视频.| 中文字幕亚洲成人| 一本大道久久a久久综合婷婷| 亚洲免费伊人电影| 欧美性极品少妇| 亚洲一区二区在线免费看| 欧美日韩国产综合草草| 日韩av电影免费观看高清完整版 | 日韩欧美一卡二卡| 美国毛片一区二区| 欧美videofree性高清杂交| 韩国精品主播一区二区在线观看| 久久综合久久综合久久综合| 国产成人日日夜夜| 国产精品麻豆视频| 色综合 综合色| 亚洲成人综合网站| 日韩欧美成人一区二区| 国产一区二区三区| 国产精品久久久久久久第一福利| 色女孩综合影院| 午夜婷婷国产麻豆精品| 日韩免费一区二区| 国产成人综合网| 亚洲人成在线播放网站岛国| 欧美日本在线一区| 极品少妇xxxx精品少妇偷拍| 欧美激情一区二区三区在线| 色av一区二区| 蜜臀久久久久久久| 日本一区二区三级电影在线观看| 91碰在线视频| 日韩精品午夜视频| 久久久久9999亚洲精品| 色琪琪一区二区三区亚洲区| 免费不卡在线视频| 亚洲欧洲性图库| 欧美精品三级日韩久久| 国产盗摄一区二区| 亚洲综合免费观看高清完整版 | 久久久久成人黄色影片| 色综合久久中文综合久久牛| 免费精品99久久国产综合精品| 中文字幕av一区二区三区高| 欧美性极品少妇| 国产精品一区三区| 亚洲精品高清在线观看| 欧美成人一区二区| 91美女片黄在线观看| 美国欧美日韩国产在线播放| 1000精品久久久久久久久| 91精品国产综合久久精品| 成人性生交大片免费看视频在线 | 成人激情小说乱人伦| 亚洲福利电影网| 国产亚洲一区二区三区| 欧美日韩亚洲综合一区| 成人永久aaa| 日韩激情在线观看| 中文一区在线播放| 日韩一区二区三区在线视频| 97精品久久久久中文字幕| 麻豆国产一区二区| 一区二区三区在线观看视频| 久久综合九色欧美综合狠狠| 欧美四级电影网| 国产成人av电影| 青娱乐精品视频| 亚洲综合无码一区二区| 欧美国产1区2区| 日韩一区二区在线观看视频| 欧洲av一区二区嗯嗯嗯啊| 国产福利精品导航| 日本不卡中文字幕| 尤物在线观看一区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 色婷婷久久99综合精品jk白丝| 九色|91porny| 视频一区在线播放| 亚洲精品国产品国语在线app| 久久久不卡影院| 日韩欧美自拍偷拍| 欧美色图免费看| 91欧美一区二区| 成人激情综合网站| 国产酒店精品激情| 久久精品国产澳门| 日本不卡一二三| 亚洲成年人网站在线观看| 亚洲人成电影网站色mp4| 国产日韩欧美电影| 亚洲精品一区二区三区福利| 制服丝袜中文字幕一区| 欧美性感一区二区三区| 一本一道久久a久久精品综合蜜臀| 国产精品亚洲成人| 韩国精品在线观看| 九九精品一区二区| 精品一二线国产| 蜜臀av国产精品久久久久 | 亚洲乱码国产乱码精品精小说| 久久精品亚洲一区二区三区浴池| 日韩女优毛片在线| 欧美一区二区网站| 91精品国产高清一区二区三区蜜臀 | 国产成人激情av| 国产又粗又猛又爽又黄91精品| 日本美女视频一区二区| 日本美女一区二区| 裸体一区二区三区| 久久精品国产久精国产| 激情五月婷婷综合网| 精品夜夜嗨av一区二区三区| 精品在线免费观看| 国产一区二区不卡在线| 国产一区视频在线看| 国产一区二区三区四区五区美女| 激情欧美日韩一区二区| 精品一区二区三区香蕉蜜桃| 国产一区视频在线看| 国产黄色精品视频| 国产成人精品三级| 99九九99九九九视频精品| 色呦呦一区二区三区| 色av综合在线| 欧美日韩成人综合在线一区二区| 欧美三级日韩在线| 欧美精品aⅴ在线视频| 日韩视频免费观看高清完整版| 日韩欧美不卡在线观看视频| 精品成人免费观看| 欧美国产日韩在线观看| 自拍偷拍国产精品| 亚洲一区二区欧美激情| 日韩av高清在线观看| 国产一区二区看久久| 成人av网在线| 91黄视频在线| 5858s免费视频成人| 精品人伦一区二区色婷婷| 国产视频一区在线播放| 综合在线观看色| 亚洲第一福利视频在线| 久草中文综合在线| www.成人在线| 欧美四级电影在线观看| 欧美不卡一区二区三区四区| 国产亚洲欧洲997久久综合| 亚洲天堂免费看| 日韩综合小视频| 国产精品一区一区| 91蜜桃网址入口| 在线91免费看| 国产亚洲精品免费| 亚洲综合色区另类av| 麻豆91精品91久久久的内涵| 成人18视频在线播放| 欧美偷拍一区二区| 精品国产乱码久久久久久老虎| 国产精品久久久久9999吃药| 五月天激情综合| 国产一区二区三区四| 色视频一区二区| 欧美xfplay| 亚洲男人的天堂在线观看| 欧美一区二区三区免费大片| 中文字幕久久午夜不卡| 亚洲午夜电影在线观看| 国产一区二区在线影院| 91国产免费看| 久久久久久黄色| 亚洲sss视频在线视频| 国产成人午夜电影网| 欧洲av在线精品| 国产日韩精品一区| 亚洲成a人v欧美综合天堂下载| 国产精品123区| 欧美裸体bbwbbwbbw| 国产日产欧美精品一区二区三区| 亚洲第一激情av| 成人午夜在线播放| 91精品国产一区二区三区香蕉|