I2C周立功標(biāo)準(zhǔn)驅(qū)動程序c代碼_第1頁
I2C周立功標(biāo)準(zhǔn)驅(qū)動程序c代碼_第2頁
I2C周立功標(biāo)準(zhǔn)驅(qū)動程序c代碼_第3頁
I2C周立功標(biāo)準(zhǔn)驅(qū)動程序c代碼_第4頁
I2C周立功標(biāo)準(zhǔn)驅(qū)動程序c代碼_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.Copyright (c)廣州周立功單片機發(fā)展有限公司研 究 所產(chǎn)品一部htt p:/ 文件信息文件名:I2c.c創(chuàng)建人:陳明計最后修改日期:2003 年7月21日描述:卩CO-II下LPC210X的I2c主模式底層驅(qū)動 歷史版本信息 創(chuàng)建人:陳明計版本:v1.0日期:2003年7月8日描述:原始版本修改人:陳明計版本:v1.1日期:2003年7

2、月21日描述:根據(jù)正式文檔更改寄存器名當(dāng)前版本修訂 修改人:日期:描述:#def ine IN_I2C# include config.h static uint8 *I2cBuf;static OS_EVENT *I2cSem;static OS_EVENT *I2cMbox;static int16 I2cNbyte;static uint8 I2cAddr;# define I2C_WRITE_END1# define I2C_READ_END2# define I2C_NOT_GET_BUS 4# define I2C_ACK_ERR8/*寫完成*/*讀完成*/*丟失仲裁*/*接收AC

3、K錯誤*/46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.函數(shù)名稱:I2clnit功能描述:初始化I2c (主模式)輸入:FI2c:I2c 總線頻率*輸出:TRUE :成功* FALSE:失敗* 全局變量:I2cSem,I2cMbox* 調(diào)用模塊:OSSemCreate*作者:陳明計* 日 期:2003年7月8日uint8 l2cInit(uint32FI2c)VICIntE

4、nClr =1 9;if (FI2c = 400000)PINSEL0 =(PINSEL0 & OxffffffOf) | 0x50;I2CONCLR =0x6C;I2SCLH= (Fpclk / FI2c + 1) / 2;I2SCLL= (Fpclk / FI2c) /2;I2cSem= OSSemCreate(1);I2cMbox =OSMboxCreate(NULL);if (I2cMbox = NULL)return FALSE;if (I2cSem != NULL)return TRUE;return FALSE;/* 禁止能I2c中斷*/*選擇管腳為I2c */*清除控制寄存器*

5、/*設(shè)置高電平時間*/*設(shè)置低電平時間*/*信號量用于互斥操作總線*/*消息郵箱用于中斷向任務(wù)傳遞操作結(jié)果*/*修改人:陳明計*日期:2003 年7月10日*修改人:陳明計*日期:2003 年7月21日* 函數(shù)名稱:_l2cWrite*功能描述:讀I2C,但不發(fā)送STOP信號*輸入:Addr:從機地址* Data:將要寫的數(shù)據(jù)*寫的數(shù)據(jù)數(shù)目*輸出:發(fā)送的數(shù)據(jù)字節(jié)數(shù)* 全局變量:I2cAddr,I2cNbyte,I2cBuf* 調(diào)用模塊:OSMboxPend*作者:陳明計* 日 期:2003年7月8日修改人:陳明計日期:2003年7月21日uint8 _I2cWrite(uint8 Addr,

6、uint8 *Data, int16 NByte)uint8 err;unsignedint Rt;I2cAddr= Addr& 0xfe;/*存儲發(fā)送地址 */I2cNbyte = NByte;/*存儲寫字節(jié)數(shù) */I2cBuf = Data;/*存儲寫的數(shù)據(jù)的指針*/I2CONSET = 0x24;/*設(shè)置為主機,并啟動總線*/Rt = (unsignedint ) OSMboxPend(I2cMbox, 0, &err);/*等待操作結(jié)束*/return Rt;函數(shù)名稱:I2cWrite功能描述:向I2C從器件寫數(shù)據(jù)輸入:Addr:從機地址Data:指向?qū)⒁獙懙臄?shù)據(jù)的指針NByte:寫的

7、數(shù)據(jù)數(shù)目輸出:發(fā)送的數(shù)據(jù)字節(jié)數(shù)全局變量:I2cSem,I2cNbyte調(diào)用模塊:OSSemPend,_I2cWrite,OSSemPost91.92.93.94.95.96.97.98.99.100.101.102.103.104.105.106.107.108.109.110.111.112.113.114.115.116.117.118.119.120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.作 者:陳明計136.137.138.139.140.141.142.143.144.145.146.147.148.1

8、49.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.173.174.175.176.177.178.179.180.* 日 期:2003年7月8日*修改人:陳明計*日期:2003年7月10日*修改人:陳明計*日 期:2003年7月21日uint16l2cWrite(uint8 Addr, uint8 *Data, int16NByte)uint8 err;OSSemPend(I2cSem,I2CONCLR = 0x6C;I2CONSET = 0x40;VIC

9、IntEnable0, & err);1 9;if (_I2cWrite(Addr,I2CONSETI2CONCLRVICIntEnClrOSSemPost(I2cSem);/*/*Data, NByte) = I2C_WRITE_END)1 4;0x28;1 9;return (NByte - I2cNbyte);* 函數(shù)名稱:I2cRead*功能描述:從I2c從器件讀數(shù)據(jù)*輸入:Addr:從機地址* Ret:指向返回數(shù)據(jù)存儲位置的指針* Eaddr:擴展地址存儲位置* EaddrNByte:擴展地址字節(jié)數(shù),0為無* ReadNbyte:將要讀取的字節(jié)數(shù)目*輸出:已讀取的字節(jié)數(shù)* 全局變量:

10、I2cSem,I2cAddr,I2cNbyte,I2cBuf* 調(diào)用模塊:OSSemPend,_I2cWrite,OSMboxPend,OSSemPost*作者:陳明計/*/*/*使能I2c */使能I2c中斷*/發(fā)送停止信號 */清除標(biāo)志 */禁止能I2c中斷*/181.182.183.184.185.186.187.188.189.190.191.192.193.194.195.196.197.198.199.200.201.202.203.204.205.206.207.208.209.210.211.212.213.214.215.216.217.218.219.220.221.222

11、.223.224.日期:2003年7月8日修改人:陳明計日期:2003年7月21日int16 l2cRead(uint8 Addr,uint8 *Retuint8 *Eaddr, int16 EaddrNByte, int16 ReadNbyte)uint8 err;OSSemPend(I2cSem,0, & err);I2CONCLR = 0x6C;I2CONSET = 0x40;VICIntEnable =1 0)if (_I2cWrite(Addr,Eaddr, EaddrNByte) != I2C_WRITE_END)return -1;I2cAddr = Addr | 0x01;I2

12、cNbyte = ReadNbyte;I2cBuf = Ret;I2CONCLR = 0x28;I2CONSET = 0x24;VICIntEnable =1 9;/*存儲發(fā)送地址*/*存儲讀字節(jié)數(shù)*/*存儲讀到的數(shù)據(jù)*/*設(shè)置為主機,并啟動總線*/*使能I2c中斷*/OSMboxPend(I2cMbox, 0, &err);/*等待操作結(jié)束*/*禁止能I2c中斷*/VICIntEnClr =1 0)I2DAT= *I2cBuf+;I2cNbyte-;I2CONCLR= 0x28;elseOSMboxPost(I2cMbox,(VICIntEnClr = 1 9;break ;case 0x2

13、0:/break;case 0x30:/break;case 0x48:/*已發(fā)送起始條件,與0x18相同處理*/*已發(fā)送重復(fù)起始條件*/* 發(fā)送地址*/* 清除標(biāo)志*/* 已發(fā)送SLA+W,并已接收應(yīng)答*/* 清除標(biāo)志*/* 已發(fā)送I2C數(shù)據(jù),并接收到應(yīng)答*/* 清除標(biāo)志*/I2CONSET = 1 4;OSMboxPost(l2cMbox,(voidI2CONCLR = 0x28;break ;case 0x38:OSMboxPost(I2cMbox,(voidI2CONCLR = 0x28;break ;case 0x40:if (I2cNbyte= 1)I2CONCLR= 1 2;el

14、seI2CONSET= 1 2;I2CONCLR = 0x28;break ;case 0x50:*I2cBuf+= I2DAT;I2cNbyte-;if (I2cNbyte= 1)I2CONCLR= 1 2;I2CONCLR = 0x28;break ;case 0x58:*I2cBuf = I2DAT;I2cNbyte-;I2CONSET=1 4;OSMboxPost(I2cMbox,(voidI2CONCLR = 0x28;break ;default :I2CONCLR = 0x28;break ;VICVectAddr =0;OS_EXIT_CRITICAL();/* 發(fā)送停止信號 */*)I2C_ACK_ERR);/* 清除標(biāo)志*/* 在SLA+R/W或數(shù)據(jù)字節(jié)中丟失仲裁*/*)I2C_NOT_GET_BUS);/* 清除標(biāo)志*/* 已發(fā)送SLA+R;已接收 ACK */* 下次發(fā)送非應(yīng)答信號*/*下次發(fā)送應(yīng)答信號*/* 清除標(biāo)志*/*已接收數(shù)據(jù)字節(jié);已發(fā)送 ACK */* 接收數(shù)據(jù)*/* 下次發(fā)送非應(yīng)答信號*/* 清除標(biāo)志*/*已接收數(shù)據(jù)字節(jié);已返發(fā)送 ACK */* 接收數(shù)據(jù)*/* 結(jié)束總線*/*)I2C_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論