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

下載本文檔

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

文檔簡(jiǎn)介

1、1./*Copyright(c)*2.*廣州周立功單片機(jī)發(fā)展有限公司3.*4.*產(chǎn)品一部5.*6.*7.*8.*-文件信息9.*名:I2c.c10.*人:陳明計(jì)11.*最后修改日期:2003 年7月21日12.*述:fi CO-II 下LPC210X的I2c主模式底層驅(qū)動(dòng)13.*14.*-歷史版本信息15.*創(chuàng)建人:陳明計(jì)16.*本:v1.017.*期:2003年7月8日18.*述:原始版本19.*20.*-21.*修改人:陳明計(jì)22.*本:v1.123.*期:2003年7月21日24.*述:根據(jù)正式文檔更改寄存器名25.*26.*-當(dāng)前版本修訂27.*修改人:28.*日期:29.*30.*3

2、1.*-32.*/33.34.#def ineIN_12c35.#include"config.h"36.staticuint8 *I2cBuf;37.staticOS_EVENT *I2cSem;38.staticOS_EVENT *I2cMbox;39.staticint16 I2cNbyte;40.staticuint8 I2cAddr;41.42.#define I2C_WRITE_END/*寫(xiě)完成*/43.#define I2C_READ_END/*讀完成*/44.#define I2C_NOT_GET_BUS 4/*丟失仲裁*/45.#define I2C_AC

3、K_ERR 8/*接收ACK錯(cuò)誤*/46.47.48./*49.*函數(shù)名稱:I2cInit50.*功能描述:初始化12c (主模式)51.*輸入:FI2c:12c 總線頻率52.*53.*輸出:TRUE :成功54.*FALSE:失敗55.*全局變量:I2cSem,I2cMbox56.*調(diào)用模塊:OSSemCreate57.*58.*作者:陳明計(jì)59.*日期:2003年7月8日60.*.61.*修改人:陳明計(jì)62.*日期:2003年7月10日63.*.64.*修改人:陳明計(jì)65.*日 期:2003年7月21日66.*.67.*/68.uint8I2cInit(uint32FI2c)69.70.

4、VICIntEnClr1 << 9;/*禁止能I2c中斷*/71.if (FI2c<=400000)72.73.PINSEL0(PINSEL0 & 0xffffff0f) | 0x50;/*選擇管腳為I2c */74.I2CONCLR0x6C;/*清除控制寄存器*/75.I2SCLH(Fpclk/FI2c+1)/2;/*設(shè)置高電平時(shí)間*/76.I2SCLL(Fpclk/FI2c)/2;/*設(shè)置低電平時(shí)間*/77.12csemOSSemCreate(1);/*信號(hào)量用于互斥操作總線*/78.I2cMboxOSMboxCreate(NULL);/*消息郵箱用于中斷向任務(wù)傳

5、遞操作結(jié)果*/79.if(I2cMbox = NULL)80.81.returnFALSE;82.83.if(I2cSem!= NULL)84.85.returnTRUE;86.87.88.returnFALSE;89.91.91./*92.*函數(shù)名稱_I2cWrite93.*功能描述讀I2C ,但不發(fā)送 STOP信號(hào)94.*Addr:從機(jī)地址95.*Data:將要寫(xiě)的數(shù)據(jù)96.*寫(xiě)的數(shù)據(jù)數(shù)目97.*輸出:發(fā)送的數(shù)據(jù)字節(jié)數(shù)98.*99.*全局變量:I2cAddr,I2cNbyte,I2cBuf100.*調(diào)用模塊:OSMboxPend101.*102.*作者:陳明計(jì)103.*日期:2003年7月

6、8日104.*.105.*修改人:陳明計(jì)106.*日 期:2003年7月21日107.*.108.*/109.uint8 _I2cWrite(uint8 Addr, uint8 *Data, int16 NByte)110.111.uint8 err;112.unsignedint Rt;113.114.I2cAddrAddr& 0xfe;/*存儲(chǔ)發(fā)送地址*/115.I2cNbyte = NByte;/*存儲(chǔ)寫(xiě)字節(jié)數(shù)*/116.I2cBuf = Data;/*存儲(chǔ)寫(xiě)的數(shù)據(jù)的指針 */117.I2CONSET = 0x24;/*設(shè)置為主機(jī),并啟動(dòng)總線*/118.119.Rt = (uns

7、ignedint ) OSMboxPend(I2cMbox, 0, &err);/*等待操作結(jié)束*/120.return Rt;24./*125.*函數(shù)名稱:I2cWrite126.*功能描述I2C從器件寫(xiě)數(shù)據(jù)127.*Addr:從機(jī)地址128.*Data:指向?qū)⒁獙?xiě)的數(shù)據(jù)的指針129.*NByte:寫(xiě)的數(shù)據(jù)數(shù)目130.*輸出:發(fā)送的數(shù)據(jù)字節(jié)數(shù)131.*132.*全局變量:I2cSem,I2cNbyte133.*調(diào)用模塊:OSSemPend,_I2cWrite,OSSemPost135.*作者:陳明計(jì)135.*136.*日期:2003年7月8日137.*.13

8、8.*修改人:陳明計(jì)139.*日期:2003年7月10日140.*.141.*修改人:陳明計(jì)142.*日 期:2003年7月21日143.*.144.*/145.uint16I2cWrite(uint8 Addr, uint8 *Data,int16NByte)146.147.uint8 err;148.149.OSSemPend(I2cSem,0, &err);150.151.I2CONCLR = 0x6C;152.I2CONSET = 0x40;/*使能I2c*/153.VICIntEnable<< 9;/*使能12c中斷*/154.155.if (_I2cWrite(

9、Addr,Data, NByte) = I2C_WRITE_END)156.157.I2CONSET<< 4;/*發(fā)送停止信號(hào) */158.I2CONCLR0x28;/*清除標(biāo)志 */159.160.161.VICIntEnClr1 << 9;/*禁止能I2c中斷*/162.163.OSSemPost(I2cSem);164.return (NByte - I2cNbyte);165.166.167./*168.*函數(shù)名稱:I2cRead169.*功能描述從I2c從器件讀數(shù)據(jù)170.*Addr:從機(jī)地址171.*Ret:指向返回?cái)?shù)據(jù)存儲(chǔ)位置的指針172.*Eaddr:擴(kuò)

10、展地址存儲(chǔ)位置173.*EaddrNByte:擴(kuò)展地址字節(jié)數(shù),0為無(wú)174.*ReadNbyte:將要讀取的字節(jié)數(shù)目175.*輸出:已讀取的字節(jié)數(shù)176.*177.*全局變量:I2cSem,I2cAddr,I2cNbyte,I2cBuf178.*調(diào)用模塊:OSSemPend,_I2cWrite,OSMboxPend,OSSemPost180.*作者:陳明計(jì)180.*181.*日期:2003年7月8日182.*.183.*修改人:陳明計(jì)184.*日 期:2003年7月21日185.*.186.*/187.int16 I2cRead(uint8 Addr,uint8 *Ret , uint8*Ea

11、ddr, int16 EaddrNByte, int16 ReadNbyte)188.189.uint8 err;190.191.OSSemPend(I2cSem,0, &err);192.193.I2CONCLR = 0x6C;194.I2CONSET = 0x40;/*使能12c */195.VICIntEnable1 << 9;/*使能I2c中斷*/196.197.if (EaddrNByte> 0)198.199.if (_I2cWrite(Addr,Eaddr, EaddrNByte) != I2C_WRITE_END)200.201.return-1;20

12、05.I2cAddrAddr| 0x01;/*存儲(chǔ)發(fā)送地址*/206.I2cNbyte = ReadNbyte;/*存儲(chǔ)讀字節(jié)數(shù)*/207.I2cBuf = Ret;/*存儲(chǔ)讀到的數(shù)據(jù)*/208.I2CONCLR = 0x28;209.I2CONSET = 0x24;/*設(shè)置為主機(jī),并啟動(dòng)總線*/210.VICIntEnable1 << 9;/*使能I2c中斷*/211.212.OSMboxPend(I2cMbox, 0, &err);/*等待操作結(jié)束*/213.214.VICIntEnClr1 << 9;/*禁止能I2c中斷*/215.O

13、SSemPost(I2cSem);216.return (ReadNbyte - I2cNbyte);20./*221.*函數(shù)名稱:I2c_Exception222.*功能描述:I2c中斷服務(wù)程序223.*225.*225.*輸出:無(wú)56.257.258.259.260.261.262.263.264.265.266.267.26

14、8.269.* * 全局變量:I2cAddr,I2cBuf,I2cNbyte,I2cMbox* * 調(diào)用模塊:OSMboxPost* *作作者:陳明計(jì)* *日期:2003年7月8日* *修改人:陳明計(jì)* *日 期:2003年7月21日*/void I2c_Exception(void )OS_ENTER_CRITICAL();switch (I2STAT & 0xf8)case 0x08:/*已發(fā)送起始條件,與0x18相同處理*/break;case 0x10:/*已發(fā)送重復(fù)起始條件*/I2DAT= I2cAddr;/*發(fā)送地址*/I2CONCLR = 0x28;/*清除標(biāo)志*/bre

15、ak ;case 0x18:/*已發(fā)送SLA+W,并已接收應(yīng)答 */I2DAT= *I2cBuf+;I2cNbyte-;I2CONCLR = 0x28;/*清除標(biāo)志*/break ;case 0x28:/*已發(fā)送I2C數(shù)據(jù),并接收到應(yīng)答*/if (I2cNbyte> 0)I2DAT= *I2cBuf+;I2cNbyte-;I2CONCLR= 0x28;/*清除標(biāo)志*/elseOSMboxPost(I2cMbox,(void*)I2C_WRITE_END);VICIntEnClr=1 <<9;/*禁止能I2c中斷*/break ;case 0x20:/*已發(fā)送SLA+W;已接收

16、非 ACK,與0x48處理相同*/break;case 0x30:/*已發(fā)送I2DAT中的數(shù)據(jù)字節(jié);已接收非ACK,與0x48處理相同*/break;case 0x48:/*已發(fā)送SLA+R;已接收非 ACK*/271.271.I2CONSET = 1 << 4;/*發(fā)送停止信號(hào) */272.273.274.275.276.277.278.279.280.281.282.283.284.285.286.287.288.289.290.291.292.293.294.295.296.297.298.299.300.301.302.303.304.305.306.307.308.309

17、.310.311.312.313.OSMboxPost(I2cMbox,I2CONCLR = 0x28; break ;case 0x38:OSMboxPost(I2cMbox,I2CONCLR = 0x28;break ;case 0x40:if (I2cNbyteI2CONCLR elseI2CONSET= 1 << 2;I2CONCLR = 0x28; break ;case 0x50:*I2cBuf+I2cNbyte-;if (I2cNbyteI2CONCLRI2CONCLR = 0x28;break ;case 0x58:*I2cBuf = I2DAT;I2cNbyte-;I2CONSET=OSMboxPost(I2cMbox,I2CONCLR = 0x28; break ;defaultI2CONCLR = 0x28; break ;VICVectAddr =0;OS_EXIT_CRITICAL();<=1)=1 << 2;I2DAT;<=1)=1 << 2;<< 4;(void(void(void*)I2C_

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論