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

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

?? i2c.c

?? 周立功開發(fā)板SmartArm2200 I2C中斷方式讀寫板上EEPROM CAT1025,在MDK Keil環(huán)境下完成。實現(xiàn)了完整的串口輸入輸出
?? C
字號:
/*****************************************************************************************
* 模塊名稱: I2C通訊模塊
* 模塊描述: SmartArm2200 I2C操作。CAT1025 EEPROM,實現(xiàn)1到8字節(jié)數(shù)據(jù)的讀寫操作
* 創(chuàng)建人  : hlb
* 創(chuàng)建日期: 2008-5-4
******************************************************************************************
* 修改人  :
* 修改日期:
*****************************************************************************************/
#include <LPC22xx.h>
#include "Public.h"
#include "I2C.h"

__irq void I2C_isr (void);
/*****************************************************************************************
* 常亮定義 
*****************************************************************************************/
#define I2C_SLAVE_ADDRESS 0xA0
#define I2C_NONE 0
#define I2C_READ 1
#define I2C_WRITE 2

#define I2C_AA (1 << 2)
#define I2C_SI (1 << 3)
#define I2C_STO (1 << 4)
#define I2C_STA (1 << 5)
#define I2C_I2EN (1 << 6)
/*****************************************************************************************
* 定義用于和I2C中斷傳遞信息的全局變量 
*****************************************************************************************/
static volatile U8 I2CAddress;  //I2C器件從地址
static volatile U8 I2CRamAddress; //I2C器件內(nèi)部子地址
static volatile U8 I2CNum; //I2C要發(fā)送活著讀取的字節(jié)數(shù)
static volatile U8 *I2CBuf; //數(shù)據(jù)緩沖區(qū)指針
static volatile U8 ReadBuf[8]; //讀緩沖區(qū)
static volatile U8 WriteBuf[8]; //寫緩沖區(qū)
static volatile U8 I2CEnd; //I2C總線結(jié)束標(biāo)志:結(jié)束總線是置1
static volatile U8 I2CAddEn; //子地址控制。
               //0--子地址已經(jīng)處理或者不需要子地址
               //1--讀操作
               //2--寫操作
/*****************************************************************************************
* 函數(shù)名稱: void I2C_Init(U32 FI2C) 
* 函數(shù)描述: I2C初始化,允許中斷,分配中斷優(yōu)先級為1
* 參數(shù)描述:FI2C 初始化I2C總線頻率,最大值為400K
*****************************************************************************************/
void I2C_Init(U32 FI2C)
{
  U32 tmFI2C;
  tmFI2C = FI2C;
  if (tmFI2C > 400000) tmFI2C = 400000;
  PINSEL0 = (PINSEL0 & 0xFFFFFF0F) | 0x50;  //引腳功能選擇
  /* 設(shè)置時鐘 */
  I2SCLH = (GD.Fpclk / tmFI2C + 1) / 2;
  I2SCLL = (GD.Fpclk / tmFI2C) / 2;
  /* 設(shè)為主模式 */
  I2CONCLR = 0x2C;
  I2CONSET = 0x40;
  
  I2CAddress = I2C_SLAVE_ADDRESS;
  
  VICIntSelect = VICIntSelect & (~(1 << 9));  //設(shè)置I2C中斷為普通中斷
  VICIntEnable = VICIntEnable | (1 << 9); //允許I2C中斷
  VICVectAddr0 = (U32)I2C_isr;
  VICVectCntl0 = 0x20 | 0x9;
    
}
/*****************************************************************************************
* 函數(shù)名稱: void I2C_WriteByte(U32 Address, U8 Data) 
* 函數(shù)描述: 寫一個字節(jié)
*****************************************************************************************/
bool I2C_WriteBytes(U8 SlaveAddress, U8 RamAddress, U8 *P, U8 Len)
{
  int i;
  I2CAddress = SlaveAddress & 0xFE;
  I2CRamAddress = RamAddress;
  I2CNum = Len;
  if (I2CNum < 1) I2CNum = 1;
  if (I2CNum > 8) I2CNum = 8;

  for (i = 0; i < I2CNum; i++)
  {
    WriteBuf[i] = *(P+i);
  }
  I2CBuf = WriteBuf;
  
  I2CEnd = 0;   //置位標(biāo)志
  I2CAddEn = 2; //寫操作

  I2CONCLR = 0x2C; //清除STA, SI, AA
  I2CONSET = 0x60; //使能并發(fā)送起始標(biāo)志

  while(I2CEnd == 0);	//等待寫入完成
  
  if (I2CEnd == 1)
  {
    return TRUE;
  }
  else
  {
    return FALSE;
  }
}
/*****************************************************************************************
* 函數(shù)名稱: U8 I2C_ReadByte(U32 Address) 
* 函數(shù)描述: 讀一個字節(jié)
*****************************************************************************************/
bool I2C_ReadBytes(U8 SlaveAddress, U8 RamAddress, U8 *P, U8 Len)
{
  int i, tmI2CNum;

  I2CAddress = SlaveAddress & 0xFE;
  I2CRamAddress = RamAddress;
  I2CNum = Len;
  if (I2CNum < 1) I2CNum = 1;
  if (I2CNum > 8) I2CNum = 8;
  tmI2CNum = I2CNum;
  I2CBuf = ReadBuf;
  I2CEnd = 0;  
  I2CAddEn = I2C_READ; //讀操作

  I2CONCLR = I2C_STA | I2C_SI | I2C_AA; //清除STA, SI, AA
  I2CONSET = I2C_I2EN | I2C_STA; //使能并發(fā)送起始標(biāo)志

  while(I2CEnd == 0); //等待讀操作完成
  if (I2CEnd == 1)
  {
    for (i = 0; i < tmI2CNum; i++)
    {
      *(P+i) = ReadBuf[i];
    }
    return TRUE;
  }
  else
  {
    return FALSE;
  }
}
/*****************************************************************************************
* 函數(shù)名稱: void I2C_WriteU8(U32 Address, U8 Data) 
* 函數(shù)描述: 寫U8
*****************************************************************************************/
void I2C_WriteU8(U32 Address, U8 Data)
{
  static U8 D;
  D = Data;
  I2C_WriteBytes(I2CAddress, Address, &D, sizeof(D));
}
/*****************************************************************************************
* 函數(shù)名稱: U8 I2C_ReadU8(U32 Address) 
* 函數(shù)描述: 讀U8
*****************************************************************************************/
U8 I2C_ReadU8(U32 Address)
{
  static U8 D;
  if (I2C_ReadBytes(I2CAddress, Address, &D, sizeof(D)))
    return D;
  else return 0; 
}
/*****************************************************************************************
* 函數(shù)名稱: void I2C_WriteS8(U32 Address, S8 Data) 
* 函數(shù)描述: 寫S8
*****************************************************************************************/
void I2C_WriteS8(U32 Address, S8 Data)
{
  static S8 D;
  D = Data;
  I2C_WriteBytes(I2CAddress, Address, (U8 *)&D, sizeof(D));
}
/*****************************************************************************************
* 函數(shù)名稱: S8 I2C_ReadS8(U32 Address) 
* 函數(shù)描述: 讀S8
*****************************************************************************************/
S8 I2C_ReadS8(U32 Address)
{
  static S8 D;
  if (I2C_ReadBytes(I2CAddress, Address, (U8 *)&D, sizeof(D)))
    return D;
  else return 0;
}
/*****************************************************************************************
* 函數(shù)名稱: void I2C_WriteU16(U32 Address, U16 Data) 
* 函數(shù)描述: 寫U16
*****************************************************************************************/
void I2C_WriteU16(U32 Address, U16 Data)
{
  static U16 D;
  D = Data;
  I2C_WriteBytes(I2CAddress, Address, (U8 *)&D, sizeof(D));
}
/*****************************************************************************************
* 函數(shù)名稱: U16 I2C_ReadU16(U32 Address) 
* 函數(shù)描述: 讀U16
*****************************************************************************************/
U16 I2C_ReadU16(U32 Address)
{
  static U16 D;
  if (I2C_ReadBytes(I2CAddress, Address, (U8 *)&D, sizeof(D)))
    return D;
  else return 0;  
}
/*****************************************************************************************
* 函數(shù)名稱: void I2C_WriteS16(U32 Address, S16 Data) 
* 函數(shù)描述: 寫S16
*****************************************************************************************/
void I2C_WriteS16(U32 Address, S16 Data)
{
  static S16 D;
  D = Data;
  I2C_WriteBytes(I2CAddress, Address, (U8 *)&D, sizeof(D));    
}
/*****************************************************************************************
* 函數(shù)名稱: S16 I2C_ReadS16(U32 Address) 
* 函數(shù)描述: 讀S16
*****************************************************************************************/
S16 I2C_ReadS16(U32 Address)
{
  static S16 D;
  if (I2C_ReadBytes(I2CAddress, Address, (U8 *)&D, sizeof(D)))
    return D;
  else return 0; 
}
/*****************************************************************************************
* 函數(shù)名稱: void I2C_WriteU32(U32 Address, U32 Data) 
* 函數(shù)描述: 寫U32
*****************************************************************************************/
void I2C_WriteU32(U32 Address, U32 Data)
{
  static U32 D;
  D = Data;
  I2C_WriteBytes(I2CAddress, Address, (U8 *)&D, sizeof(D));
}
/*****************************************************************************************
* 函數(shù)名稱: U32 I2C_ReadU32(U32 Address) 
* 函數(shù)描述: 讀U32
*****************************************************************************************/
U32 I2C_ReadU32(U32 Address)
{
  static U32 D;
  if (I2C_ReadBytes(I2CAddress, Address, (U8 *)&D, sizeof(D)))
    return D;
  else return 0;
}
/*****************************************************************************************
* 函數(shù)名稱: void I2C_WriteS32(U32 Address, S32 Data) 
* 函數(shù)描述: 寫S32
*****************************************************************************************/
void I2C_WriteS32(U32 Address, S32 Data)
{
  static S32 D;
  D = Data;
  I2C_WriteBytes(I2CAddress, Address, (U8 *)&D, sizeof(D));  
}
/*****************************************************************************************
* 函數(shù)名稱: S32 I2C_ReadS32(U32 Address) 
* 函數(shù)描述: 讀S32
*****************************************************************************************/
S32 I2C_ReadS32(U32 Address)
{
  static S32 D;
  if (I2C_ReadBytes(I2CAddress, Address, (U8 *)&D, sizeof(D)))
    return D;
  else return 0;
}
/*****************************************************************************************
* 函數(shù)名稱: void I2C_WriteFloat(U32 Address, Float Data) 
* 函數(shù)描述: 寫float
*****************************************************************************************/
void I2C_WriteFloat(U32 Address, float Data)
{
  UnionFloat UF;
  UF.F = Data;
  I2C_WriteU32(Address, UF.D); 
}
/*****************************************************************************************
* 函數(shù)名稱: float I2C_ReadFloat(U32 Address) 
* 函數(shù)描述: 讀float
*****************************************************************************************/
float I2C_ReadFloat(U32 Address)
{
  UnionFloat UF;
  UF.D = I2C_ReadU32(Address);
  return (UF.F);
}
/*****************************************************************************************
* 函數(shù)名稱: void I2C_isr (void) 
* 函數(shù)描述: I2C中斷處理程序
*****************************************************************************************/
__irq void I2C_isr (void)
{
  U8 sta;
  
  sta = I2STAT;
  switch(sta)
  {
    case 0x08:
	     I2DAT = I2CAddress;
		 I2CONCLR = I2C_STO | I2C_SI; //清起始標(biāo)志,中斷標(biāo)志
		 break;
	case 0x10:
	     I2DAT = I2CAddress;
	     I2CONCLR = I2C_STO | I2C_SI;
	     break;
	case 0x18:
	     if (I2CAddEn == I2C_READ)
         {
		   I2DAT = I2CRamAddress;
           I2CONCLR = I2C_STA | I2C_STO | I2C_SI;
		 }
		 else if(I2CAddEn == I2C_WRITE)
         {
		   I2DAT = I2CRamAddress;
		   I2CONCLR = I2C_STA | I2C_STO | I2C_SI;
		 }
		 break; 
	case 0x28:
		 if (I2CAddEn == I2C_READ)
         {
		   I2CAddress = I2CAddress | 0x1;  //改寫從地址為讀
           I2CONCLR = I2C_STO | I2C_SI;    //
           I2CONSET = I2C_STA;             //發(fā)送重復(fù)起始條件
		 }
         else
         {       
           if (I2CNum >= 1) //將發(fā)送數(shù)據(jù)字節(jié),接收ACK位
           {
             I2DAT = *I2CBuf++;
             I2CONCLR = I2C_STA | I2C_STO | I2C_SI;
             I2CNum--;
           }
           else
           {
             I2CONCLR = I2C_STA | I2C_SI;
             I2CONSET = I2C_STO;
             I2CEnd = 1;
           }
         }
		 break; 	
	 case 0x20:
	 case 0x30:
	 case 0x38:
	      I2CONCLR = 0x28;
	      I2CEnd = 0xFF;
          break;
	 case 0x40:
	      if(I2CNum == 1) //準(zhǔn)備接收數(shù)據(jù),返回非ACK位
          {
		    I2CONCLR = I2C_STA | I2C_STO | I2C_SI | I2C_AA;
		  }
          else //準(zhǔn)備接收數(shù)據(jù),返回ACk位
          {
		    I2CONCLR = I2C_STA | I2C_STO | I2C_SI;
            I2CONSET = I2C_AA;
		  } 
		  break;	
	 case 0x50:
	      *I2CBuf++ = I2DAT;
		  I2CNum--;
		  if(I2CNum == 1)
          {
		    I2CONCLR = I2C_STA | I2C_STO | I2C_SI | I2C_AA;
		  }
          else
          {
		    I2CONCLR = I2C_STA | I2C_STO | I2C_SI;
            I2CONSET = I2C_AA;
		  }
		  break;
	 case 0x58:
	      *I2CBuf++ = I2DAT;
	      I2CONSET = I2C_STO;
          I2CONCLR = I2C_STA | I2C_SI;
	      I2CEnd = 1; 
	      break;
     case 0x48:
	      I2CONCLR = 0x28;
	      I2CEnd = 0xFF; 
	      break;
	 default:
		  break;
    }
	
	VICVectAddr = 0x00;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黄网站免费久久| 亚洲动漫第一页| 国产精品一区专区| 久久这里只有精品首页| 久久99精品一区二区三区| 久久蜜桃av一区精品变态类天堂 | 国产一区二区精品久久| 久久久久久夜精品精品免费| 国产精一区二区三区| 中文字幕巨乱亚洲| 色婷婷久久一区二区三区麻豆| 一区二区三区资源| 91麻豆精品国产综合久久久久久| 免费成人在线视频观看| 久久久99久久| 一本一道波多野结衣一区二区| 一区二区三区小说| 欧美一区二区黄色| 国产精品一区二区在线播放| 亚洲特级片在线| 欧美一区二区三区四区视频 | 国产在线播放一区三区四| 国产欧美一区二区精品忘忧草| 一本久久精品一区二区| 男人的j进女人的j一区| 欧美激情在线一区二区三区| 欧美亚洲另类激情小说| 久久草av在线| 亚洲精品乱码久久久久久日本蜜臀| 欧美日本视频在线| 国产成人午夜99999| 亚洲午夜久久久久久久久久久| 精品对白一区国产伦| 一本色道**综合亚洲精品蜜桃冫| 天堂在线一区二区| 国产精品视频一二三| 欧美老肥妇做.爰bbww视频| 国产成人av一区二区三区在线 | 91首页免费视频| 轻轻草成人在线| 中文一区二区在线观看| 91精品国产综合久久福利软件| 国产精品456露脸| 午夜久久久久久久久| 国产精品视频你懂的| 欧美成人精品高清在线播放| 91小视频在线| 国产乱码一区二区三区| 婷婷激情综合网| 亚洲色图另类专区| 久久精品一区蜜桃臀影院| 欧美日韩国产免费| 色婷婷综合久久久中文字幕| 国产成人日日夜夜| 另类人妖一区二区av| 亚洲午夜久久久| 亚洲人成在线播放网站岛国| 2014亚洲片线观看视频免费| 欧美一区二区三区视频免费| 在线免费观看日本一区| 不卡av在线网| 成人性生交大片免费| 精品无码三级在线观看视频| 午夜精品一区二区三区免费视频| 国产综合一区二区| 日韩va亚洲va欧美va久久| 玉足女爽爽91| 亚洲欧美乱综合| 亚洲色欲色欲www| 中文字幕一区二区5566日韩| 欧美国产国产综合| 久久精品一区二区| 国产亚洲精品bt天堂精选| 精品国产乱码久久久久久图片| 欧美日韩国产一级| 欧美挠脚心视频网站| 欧美性猛交xxxx黑人交| 欧美系列一区二区| 欧美性猛片xxxx免费看久爱| 欧美午夜精品免费| 欧美亚洲一区二区在线| 欧美日韩午夜影院| 欧美精品久久天天躁| 欧美电影一区二区三区| 91精品国产综合久久小美女| 日韩一区和二区| 欧美mv日韩mv亚洲| 国产亚洲一本大道中文在线| 久久久777精品电影网影网| 国产日本欧洲亚洲| 中文字幕一区二区三区不卡| 亚洲人快播电影网| 亚洲高清免费观看 | 丝袜国产日韩另类美女| 视频一区欧美精品| 久久99精品国产麻豆不卡| 精品一区二区综合| 成人黄页毛片网站| 日本道在线观看一区二区| 欧美亚洲禁片免费| 欧美一卡二卡在线| 欧美激情综合网| 久久精品久久综合| 从欧美一区二区三区| 成人av网站在线观看| 欧美日韩精品一区视频| 欧美成人性福生活免费看| 国产午夜精品福利| 亚洲综合图片区| 久久机这里只有精品| 99vv1com这只有精品| 欧美男生操女生| 国产亚洲一区字幕| 亚洲午夜久久久久久久久电影网| 日韩av一区二| 丁香婷婷综合色啪| 欧美人狂配大交3d怪物一区| 久久亚区不卡日本| 一区二区三区国产| 久久99日本精品| 91免费观看国产| 2021中文字幕一区亚洲| 亚洲黄色av一区| 国产精一品亚洲二区在线视频| 欧美在线不卡视频| 国产免费观看久久| 天堂午夜影视日韩欧美一区二区| 国产精品一二三| 欧美日韩精品一区二区三区四区 | 色综合久久综合网97色综合| 欧美蜜桃一区二区三区 | 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日本一区二区视频在线| 亚洲成人一区二区在线观看| 欧美日韩激情一区二区三区| 精品毛片乱码1区2区3区| 亚洲欧美激情视频在线观看一区二区三区 | 国产精品免费视频观看| 日本少妇一区二区| 欧洲人成人精品| 国产精品网友自拍| 国产在线精品免费av| 欧美日本一区二区| 一区二区三区在线视频观看58| 国产乱码一区二区三区| 欧美一级片在线观看| 亚洲成人免费影院| 在线亚洲高清视频| 国产精品美女久久久久av爽李琼 | 极品少妇xxxx精品少妇| 欧美视频你懂的| 亚洲免费在线看| 成人午夜免费av| 国产视频911| 国产麻豆9l精品三级站| 日韩欧美中文字幕制服| 日韩高清国产一区在线| 欧美性极品少妇| 亚洲午夜电影在线| 在线国产亚洲欧美| 亚洲免费三区一区二区| 91丨porny丨首页| 亚洲欧美综合网| eeuss鲁片一区二区三区在线看| 日本一区二区三区国色天香 | 欧美精品日韩一本| 亚洲综合在线观看视频| 色综合久久久网| 自拍偷拍国产精品| 成人激情视频网站| 日本一区二区成人在线| 欧美日韩国产在线播放网站| 亚洲综合色婷婷| 欧美视频第二页| 日韩av不卡一区二区| 7777精品伊人久久久大香线蕉完整版| 亚洲一区二区三区免费视频| 欧美在线免费播放| 午夜精品久久久久久久99水蜜桃| 欧美三区免费完整视频在线观看| 一区二区三区高清| 欧美精品国产精品| 免费成人在线观看视频| 久久综合九色综合97_久久久| 国产一区二区三区在线观看精品 | 欧美午夜电影一区| 亚洲国产成人精品视频| 欧美理论电影在线| 精久久久久久久久久久| 国产精品丝袜黑色高跟| 色婷婷亚洲一区二区三区| 午夜久久久久久久久| 亚洲精品在线免费观看视频| 国产精品亚洲а∨天堂免在线| 国产精品久久久久一区二区三区共| 91网上在线视频| 日本成人超碰在线观看| 久久精品欧美一区二区三区麻豆| 99re这里只有精品视频首页| 亚洲妇女屁股眼交7|