|
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
我自己用的I2C驅(qū)動(dòng),我只測(cè)過(guò)24C02,其它沒(méi)測(cè)過(guò) |
作者:eleven11 欄目:ARM技術(shù) |
/$----------------------COPYRIGHT (c)-------------------------------- $$ $$ ARM驅(qū)動(dòng)庫(kù)-- $$ LPC2104通用驅(qū)動(dòng)配置文件 $$ $$------------------------文件信息---------------------------------- $$文 件 名: DriverConfig.h $$創(chuàng) 建 人: ARMstudent@sina.com $$最后修改日期: 2005.5.25 $$描 述: 所有外設(shè)驅(qū)動(dòng)的配置文件 $$----------------------------歷史版本信息--------------------------- $$ 創(chuàng)建人: ARMstudent@sina.com $$ 版 本: V1.0 $$ 日 期: 2005.4.17 $$ 描 述: 完成I2C驅(qū)動(dòng)配置 $$------------------------------------------------------------------- $$ 修改人: ARMstudent@sina.com $$ 版 本: V1.1 $$ 日 期: 2005.4.28 $$ 描 述: 完成SPI驅(qū)動(dòng)配置 $$------------------------------------------------------------------- $$ 修改人: ARMstudent@sina.com $$ 版 本: V1.2 $$ 日 期: 2005.5.3 $$ 描 述: 完成UART0驅(qū)動(dòng)配置 $$------------------------------------------------------------------- $$ 修改人: ARMstudent@sina.com $$ 版 本: V1.3 $$ 日 期: 2005.5.15 $$ 描 述: 完成IAP驅(qū)動(dòng)配置 $$------------------------------------------------------------------- $$ 修改人: ARMstudent@sina.com $$ 版 本: V1.4 $$ 日 期: 2005.5.21 $$ 描 述: 完成RTC驅(qū)動(dòng)配置 $$-------------------------------------------------------------$/ #include "myfun.h" #include "Queue.h" #include "QueueTAB.h" #define I2CDriver_En 0 //為1則使用I2C驅(qū)動(dòng) #define SPIDriver_En 0 //為1則使用SPI驅(qū)動(dòng) #define UART0Driver_En 0 //為1則使用UART0驅(qū)動(dòng) #define IAPDriver_En 0 //為1則使用IAP驅(qū)動(dòng) #define RTCDriver_En 0 //為1則使用RTC驅(qū)動(dòng) /$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$/ #if I2CDriver_En==1 /$-----------------------I2C驅(qū)動(dòng)使用說(shuō)明--------------------------- $$ 描 述:I2C器件存儲(chǔ)空間按頁(yè)存放,0~255字節(jié)為第0頁(yè),256~511字節(jié)為 $$ 第1頁(yè),依次類推,(AT24C01只有0頁(yè),大小為128字節(jié)) $$ 調(diào)用I2CRead和I2CWrite指定頁(yè)和子地址可向I2C器件進(jìn)行讀寫操作 $$ $$ 函數(shù)參數(shù)限制如下: $$ $$ I2C_SLA0/1 AT24C01 SLA<=7 $$ AT24C02 SLA<=7 $$ AT24C04 SLA<=3 $$ AT24C08 SLA<=1 $$ AT24C16 SLA=0 $$ AT24C32 SLA<=7 $$ AT24C64 SLA<=7 $$ AT24C128 SLA=0 $$ AT24C256 SLA<=3 $$ $$ I2C_PAGEADD0/1 AT24C01 I2C_PAGEADD=0 $$ AT24C02 I2C_PAGEADD=0 $$ AT24C04 I2C_PAGEADD<=1 $$ AT24C08 I2C_PAGEADD<=3 $$ AT24C16 I2C_PAGEADD<=7 $$ AT24C32 I2C_PAGEADD<=15 $$ AT24C64 I2C_PAGEADD<=31 $$ AT24C128 I2C_PAGEADD<=63 $$ AT24C256 I2C_PAGEADD<=127 $$ $$ I2C_NUM0/1 I2C_SLAADD0/1 AT24C01 I2C_SLAADD+I2C_NUM<=128 $$ AT24C02 I2C_SLAADD+I2C_NUM<=256 $$ AT24C04 I2C_SLAADD+I2C_NUM<=256 $$ AT24C08 I2C_SLAADD+I2C_NUM<=256 $$ AT24C16 I2C_SLAADD+I2C_NUM<=256 $$ AT24C32 I2C_SLAADD+I2C_NUM<=256 $$ &nb |
2樓: | >>參與討論 |
作者: eleven11 于 2005/6/2 13:33:00 發(fā)布:
錯(cuò)了不要扔我,我只是交流學(xué)習(xí) /$----------------------------------------COPYRIGHT (c)-------------- $$ $$ ARM驅(qū)動(dòng)庫(kù)-- $$ LPC2104通用驅(qū)動(dòng)文件 $$ $$------------------------------------------文件信息----------------- $$文 件 名: I2CDriver.h $$創(chuàng) 建 人: ARMstudent@sina.com $$最后修改日期: 2005.4.21 $$描 述: LPC2104/2105/2106-AT24C01/02/04/08/16/32/64/128/256 的I2C接口通用驅(qū)動(dòng)文件 $$ 可對(duì)總線上多個(gè)同一型號(hào)的AT24C$$進(jìn)行數(shù)據(jù)傳輸 $$----------------------------------------歷史版本信息--------------- $$ 創(chuàng)建人: ARMstudent@sina.com $$ 版 本: V1.0 $$ 日 期: 2005.4.17 $$ 描 述: 24C02測(cè)試完成,其它條件不允許T_T $$-----------------------------------------------------------------$/ volatile uint8 I2C_ADD_STA; //在16位的地址中指示哪些位已發(fā)送,為1為已經(jīng)處理或初始態(tài),為2表示高8位已發(fā)送 volatile uint8 I2C_SLA; //器件物理地址SLA volatile uint16 I2C_NUM; //一次要讀寫I2C數(shù)據(jù)數(shù) volatile uint8 *I2C_BUFF; //指定要寫入I2C的數(shù)組的首地址或指定從I2C讀取后存放數(shù)組的首地址 volatile uint8 I2C_WRTYPE; //讀寫操作的狀態(tài): 為0表示此次調(diào)用是向I2C寫入數(shù)據(jù);為1表示此次調(diào)用是從I2C器件中讀出數(shù)據(jù) volatile uint8 I2C_SLAADD; //I2C器件的子地址 volatile uint8 I2C_PAGADD; //I2C器件的頁(yè)地址 volatile uint8 I2C_ENDSTA; //傳輸完畢時(shí)的狀態(tài):為0x11則正確傳輸完畢;為0x22則總線出錯(cuò); volatile uint8 I2C_DATABUF; //用于單個(gè)字節(jié)寫入時(shí)候的緩沖區(qū) /$------------------------------------------------------------------- $$ 函數(shù)名稱: __irq IRQ_I2C $$ 功能描述: I2C中斷服務(wù)程序,系統(tǒng)函數(shù) $$ 輸 入: 無(wú) $$ 輸 出: 無(wú) $$ 全局變量: I2C_ENDSTA,I2C_WRTYPE,I2C_ADD_STA,I2C_SLA,I2C_NUM,$I2C_BUFF,I2C_SLAADD,I2C_PAGADD $$ 調(diào)用模塊: 無(wú) $$ 作 者: ARMstudent@sina.com $$ 日 期: 2005.4.17 $$-----------------------------------------------------------------$/ void __irq IRQ_I2C(void) { uint8 TEMP; TEMP=I2STAT; if(I2C_WRTYPE==0) //判斷此次操作是讀還是寫 { SWITCH(TEMP) //以下是寫操作 { case 0x08: //啟動(dòng)總線 #if defined AT24C04 I2DAT=((I2C_SLA<<2)|0xA0)|(I2C_PAGADD<<1); #elif defined AT24C08 I2DAT=((I2C_SLA<<3)|0xA0)|(I2C_PAGADD<<1); #elif defined AT24C16 I2DAT=(I2C_PAGADD<<1)|0xA0; #else I2DAT=(I2C_SLA<<1)|0xA0; #endif I2CONCLR=0x28; break; case 0x18: //發(fā)送寫控制字 #if((defined AT24C32)||(defined AT24C64)||(defined AT24C128)||(defined AT24C256)) I2DAT=I2C_PAGADD; I2C_ADD_STA=2; #else I2DAT=I2C_SLAADD; #endif I2CONCLR=0x08; break; case 0x28: //發(fā)送數(shù)據(jù)并接收到從器件應(yīng)答 #if((defined AT24C32)||(defined AT24C64)||(defined AT24C128)||(defined AT24C256)) if(I2C_ADD_STA==2) { I2DAT=I2C_SLAADD; I2C_ADD_STA=1; } #endif if(I2C_ADD_STA==1) { if(I2C_NUM>0) { I2DAT=*I2C_BUFF++; I2C_NUM--; } else { I2CONSET=0x10; I2C_ENDSTA=0x11; } } I2CONCLR=0x08; break; case 0x20: //錯(cuò)誤 case 0x30: case 0x38: I2CONSET=0x10; I2CONCLR=0x08; I2C_ENDSTA=0x22; } } else { SWITCH(TEMP) //以下執(zhí)行讀操作 { case 0x08: //啟動(dòng)總線 #if defined AT24C04 I2DAT=((I2C_SLA<<2)|0xA0)|(I2C_PAGADD<<1); #elif defined AT24C08 I2DAT=((I2C_SLA<<3)|0xA0)|(I2C_PAGADD<<1); #elif defined AT24C16 I2DAT=(I2C_PAGADD<<1)|0xA0; #else I2DAT=(I2C_SLA<<1)|0xA0; #endif I2CONCLR=0x28; break; case 0x18: //發(fā)送寫控制字 #if((defined AT24C32)||(defined AT24C64)||(defined AT24C128)||(defined AT24C256)) I2DAT=I2C_PAGADD; I2C_ADD_STA=2; #else I2DAT=I2C_SLAADD; #endif I2CONCLR=0x08; break; case 0x28: |
3樓: | >>參與討論 |
作者: eleven11 于 2005/6/2 13:39:00 發(fā)布:
另外不允許有*號(hào) 替換的時(shí)候不小心把程序中的*頁(yè)替換成$了,需要的自己改一下 |
4樓: | >>參與討論 |
作者: eleven11 于 2005/6/2 14:02:00 發(fā)布:
我學(xué)習(xí)ARM時(shí)間也不長(zhǎng) 感覺(jué)學(xué)習(xí)一定要寫筆記,我學(xué)ARM就寫了3萬(wàn)字的筆記,另外應(yīng)該學(xué)完一個(gè)部件寫一個(gè)不在OS運(yùn)行上的驅(qū)動(dòng),等調(diào)試出來(lái)了,再可以寫成UCOS2的,改改別人的程序,小打小鬧的學(xué)的不會(huì)透澈 |
5樓: | >>參與討論 |
作者: fuck許民誠(chéng) 于 2005/6/2 14:40:00 發(fā)布:
re:eleven11 頂! |
6樓: | >>參與討論 |
作者: eleven11 于 2005/6/2 15:49:00 發(fā)布:
事實(shí)上除了ZLG提供的資料,還有很多東西可以思考的 多個(gè)FIQ/IRQ中斷同時(shí)發(fā)生時(shí),該如何人為設(shè)置FIQ/非向量IRQ的優(yōu)先級(jí),1個(gè)定時(shí)器還可以有多個(gè)毫無(wú)聯(lián)系的定時(shí)設(shè)置,是定時(shí),不是PWM,如何同時(shí)使用RTC的全部增量中斷…… 這些其實(shí)都是可以思考一下的,也是很有趣的 |
7樓: | >>參與討論 |
作者: pubstar 于 2005/6/2 23:49:00 發(fā)布:
長(zhǎng)這大還沒(méi)有寫過(guò)筆記,呵呵,不過(guò),就是改不過(guò)來(lái) |
8樓: | >>參與討論 |
作者: lh007 于 2005/6/4 9:22:00 發(fā)布:
樓主的學(xué)習(xí)方法很值得學(xué)習(xí)! |
|
|
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào) |