




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1./*Copyright(c)*2.*廣州周立功單片機發展有限公司3.*4.*產品一部5.*6.*7.*8.*-文件信息9.*名:I2c.c10.*人:陳明計11.*最后修改日期:2003 年7月21日12.*述:fi CO-II 下LPC210X的I2c主模式底層驅動13.*14.*-歷史版本信息15.*創建人:陳明計16.*本:v1.017.*期:2003年7月8日18.*述:原始版本19.*20.*-21.*修改人:陳明計22.*本:v1.123.*期:2003年7月21日24.*述:根據正式文檔更改寄存器名25.*26.*-當前版本修訂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/*寫完成*/43.#define I2C_READ_END/*讀完成*/44.#define I2C_NOT_GET_BUS 4/*丟失仲裁*/45.#define I2C_AC
3、K_ERR 8/*接收ACK錯誤*/46.47.48./*49.*函數名稱:I2cInit50.*功能描述:初始化12c (主模式)51.*輸入:FI2c:12c 總線頻率52.*53.*輸出:TRUE :成功54.*FALSE:失敗55.*全局變量:I2cSem,I2cMbox56.*調用模塊:OSSemCreate57.*58.*作者:陳明計59.*日期:2003年7月8日60.*.61.*修改人:陳明計62.*日期:2003年7月10日63.*.64.*修改人:陳明計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;/*設置高電平時間*/76.I2SCLL(Fpclk/FI2c)/2;/*設置低電平時間*/77.12csemOSSemCreate(1);/*信號量用于互斥操作總線*/78.I2cMboxOSMboxCreate(NULL);/*消息郵箱用于中斷向任務傳
5、遞操作結果*/79.if(I2cMbox = NULL)80.81.returnFALSE;82.83.if(I2cSem!= NULL)84.85.returnTRUE;86.87.88.returnFALSE;89.91.91./*92.*函數名稱_I2cWrite93.*功能描述讀I2C ,但不發送 STOP信號94.*Addr:從機地址95.*Data:將要寫的數據96.*寫的數據數目97.*輸出:發送的數據字節數98.*99.*全局變量:I2cAddr,I2cNbyte,I2cBuf100.*調用模塊:OSMboxPend101.*102.*作者:陳明計103.*日期:2003年7月
6、8日104.*.105.*修改人:陳明計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;/*存儲發送地址*/115.I2cNbyte = NByte;/*存儲寫字節數*/116.I2cBuf = Data;/*存儲寫的數據的指針 */117.I2CONSET = 0x24;/*設置為主機,并啟動總線*/118.119.Rt = (uns
7、ignedint ) OSMboxPend(I2cMbox, 0, &err);/*等待操作結束*/120.return Rt;24./*125.*函數名稱:I2cWrite126.*功能描述I2C從器件寫數據127.*Addr:從機地址128.*Data:指向將要寫的數據的指針129.*NByte:寫的數據數目130.*輸出:發送的數據字節數131.*132.*全局變量:I2cSem,I2cNbyte133.*調用模塊:OSSemPend,_I2cWrite,OSSemPost135.*作者:陳明計135.*136.*日期:2003年7月8日137.*.13
8、8.*修改人:陳明計139.*日期:2003年7月10日140.*.141.*修改人:陳明計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;/*發送停止信號 */158.I2CONCLR0x28;/*清除標志 */159.160.161.VICIntEnClr1 << 9;/*禁止能I2c中斷*/162.163.OSSemPost(I2cSem);164.return (NByte - I2cNbyte);165.166.167./*168.*函數名稱:I2cRead169.*功能描述從I2c從器件讀數據170.*Addr:從機地址171.*Ret:指向返回數據存儲位置的指針172.*Eaddr:擴
10、展地址存儲位置173.*EaddrNByte:擴展地址字節數,0為無174.*ReadNbyte:將要讀取的字節數目175.*輸出:已讀取的字節數176.*177.*全局變量:I2cSem,I2cAddr,I2cNbyte,I2cBuf178.*調用模塊:OSSemPend,_I2cWrite,OSMboxPend,OSSemPost180.*作者:陳明計180.*181.*日期:2003年7月8日182.*.183.*修改人:陳明計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;/*存儲發送地址*/206.I2cNbyte = ReadNbyte;/*存儲讀字節數*/207.I2cBuf = Ret;/*存儲讀到的數據*/208.I2CONCLR = 0x28;209.I2CONSET = 0x24;/*設置為主機,并啟動總線*/210.VICIntEnable1 << 9;/*使能I2c中斷*/211.212.OSMboxPend(I2cMbox, 0, &err);/*等待操作結束*/213.214.VICIntEnClr1 << 9;/*禁止能I2c中斷*/215.O
13、SSemPost(I2cSem);216.return (ReadNbyte - I2cNbyte);20./*221.*函數名稱:I2c_Exception222.*功能描述:I2c中斷服務程序223.*225.*225.*輸出:無56.257.258.259.260.261.262.263.264.265.266.267.26
14、8.269.* * 全局變量:I2cAddr,I2cBuf,I2cNbyte,I2cMbox* * 調用模塊:OSMboxPost* *作作者:陳明計* *日期:2003年7月8日* *修改人:陳明計* *日 期:2003年7月21日*/void I2c_Exception(void )OS_ENTER_CRITICAL();switch (I2STAT & 0xf8)case 0x08:/*已發送起始條件,與0x18相同處理*/break;case 0x10:/*已發送重復起始條件*/I2DAT= I2cAddr;/*發送地址*/I2CONCLR = 0x28;/*清除標志*/bre
15、ak ;case 0x18:/*已發送SLA+W,并已接收應答 */I2DAT= *I2cBuf+;I2cNbyte-;I2CONCLR = 0x28;/*清除標志*/break ;case 0x28:/*已發送I2C數據,并接收到應答*/if (I2cNbyte> 0)I2DAT= *I2cBuf+;I2cNbyte-;I2CONCLR= 0x28;/*清除標志*/elseOSMboxPost(I2cMbox,(void*)I2C_WRITE_END);VICIntEnClr=1 <<9;/*禁止能I2c中斷*/break ;case 0x20:/*已發送SLA+W;已接收
16、非 ACK,與0x48處理相同*/break;case 0x30:/*已發送I2DAT中的數據字節;已接收非ACK,與0x48處理相同*/break;case 0x48:/*已發送SLA+R;已接收非 ACK*/271.271.I2CONSET = 1 << 4;/*發送停止信號 */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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年注會考生的市場適應能力與試題及答案
- 地鐵聚脲防水施工方案
- 證券市場運作機制試題及答案
- 2024年微生物技術的前瞻性發展試題及答案
- 理財知識補充要點2025年國際金融理財師考試試題及答案
- 高效備考2025年注冊會計師考試經驗分享試題及答案
- 紅外線保健護理設備研發進展考核試卷
- 2025年會計從業資格考試試題及答案
- 2024年項目管理資格考試中考察的核心能力與素質試題及答案
- 項目團隊溝通與協調題目及答案
- 食堂從業人員績效管理考核專項方案
- 幼兒園游戲活動評價
- (正式版)SHT 3075-2024 石油化工鋼制壓力容器材料選用規范
- 機器人發展史課件完整版
- 《城市市政管網運行安全風險評估規程》
- 2024年中國詩詞大會知識競賽模擬題庫及答案(120題)
- 新車入戶代辦委托書
- 可樂罐罐身主要成分的探究
- 麻醉復蘇室護理進修匯報
- 醫療用毒性藥品培訓課件
- 政府與非營利組織會計(王彥第8版)習題及答案 第1-23章 政府會計的基本概念-政府單位會計報表
評論
0/150
提交評論