色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

原野之狼的個(gè)人空間 http://www.54549.cn/space-uid-36.html [收藏] [復(fù)制] [RSS]

博客

LPC23XX之I2C使用總結(jié)

已有 3371 次閱讀2010-10-16 18:33

LPC23XXI2C使用總結(jié)

--- 原野之狼寫(xiě)于2010年重陽(yáng)節(jié)之時(shí)

 

近來(lái)由于項(xiàng)目需要,玩了玩LPC23XX系列的I2C,這么一個(gè)小小的東西費(fèi)了我一周的時(shí)間,實(shí)在是令人崩潰!

首先要指出的是,原廠的LPC23XXUser Manual存在著嚴(yán)重的誤導(dǎo)作用,另外給的Sample程序也存在著誤導(dǎo)作用。很不幸,俺手頭上擁有的正好是這兩份資料,所以走了許多彎路。

關(guān)于I2C的官方Specification諸位最好先看看,我就提醒一點(diǎn):I2C硬件上要求各I2C器件不管是作為Master還是作為Slave使用時(shí)都要采用OC或者OD模式作為IO接口,然后在外部用電阻上拉到電源,這樣才能使得當(dāng)總線沖突時(shí)高電平和低電平不會(huì)互相拼個(gè)你死我活。目前Internet上的一些關(guān)于I2C的參考程序一般都是采用IO模擬I2C協(xié)議來(lái)實(shí)現(xiàn)的,這當(dāng)然是可以的,但是記得要把MCUIO口配置成OCOD或者弱上拉模式,不要弄成推挽輸出哦。不過(guò)采用IO模擬方式比較占資源系統(tǒng)資源,本文描述的是采用MCU自帶的I2C控制器來(lái)實(shí)現(xiàn)。

LPC23XX支持3個(gè)I2C接口,這三者并不是完全一樣的,I2C0是嚴(yán)格遵守I2C協(xié)議的,而I2C1I2C2并不嚴(yán)格遵守I2C協(xié)議,這體現(xiàn)在IO口的結(jié)構(gòu)上,這點(diǎn)需要引起注意。

 

接下來(lái)說(shuō)說(shuō)User Manual的問(wèn)題,我設(shè)置I2C控制器作為Master使用,并且是Single Master,外部掛了個(gè)RTC器件,因此本文的描述以此為前提條件。

User Manual關(guān)于I2C控制器的描述主要體現(xiàn)在這么一些資料:

資料1:狀態(tài)遷移圖Fig116Fig117(P520~521)。

資料2:狀態(tài)表Table451Table452(P452~453)。

資料3:關(guān)于軟件編寫(xiě)指導(dǎo)性的文字描述(P533)。

 

    這三者本來(lái)應(yīng)該是關(guān)聯(lián)性很強(qiáng)并互為指導(dǎo)的的文檔資料,但是我看了好幾天都沒(méi)有明白寫(xiě)的是啥子意思,無(wú)奈只好憑著感覺(jué)先把代碼寫(xiě)完,然后一邊調(diào)試程序一邊對(duì)著資料看,旁邊還架上示波器來(lái)看波形。

    關(guān)于資料3,諸位看個(gè)大概就行了,如果你按照這個(gè)細(xì)節(jié)去做估計(jì)會(huì)死得很慘。

    關(guān)于資料2,這個(gè)資料倒是沒(méi)問(wèn)題,但是得弄明白才行。

    關(guān)于資料1,這個(gè)資料非常重要,但是很不好理解,要是沒(méi)有按照它所指定的路線操作就會(huì)出莫名其妙的問(wèn)題。

 

    先解讀一下資料1Fig116,用以輔助理解,當(dāng)然諸位首先得看看User Manual,要不然俺說(shuō)了也是白說(shuō),解讀如下:

1、  程序設(shè)置S位到相關(guān)寄存器,控制器會(huì)嘗試著去獲得I2C的操作權(quán),獲得特權(quán)后就會(huì)發(fā)送起始信號(hào)。

2、  成功完成起始信號(hào)的發(fā)送后控制器會(huì)產(chǎn)生中斷并返回0X08(注意不要理解錯(cuò)了,此返回并不是指中斷程序返回,而是指控制器的狀態(tài)寄存器的信息,下同)。

3、  程序?qū)懭?/SPAN>SLA+W信息到相關(guān)寄存器。

4、  發(fā)送成功后會(huì)產(chǎn)生中斷并返回0X18。

5、  程序?qū)懭胍l(fā)送的數(shù)據(jù)到到相關(guān)寄存器。

6、  發(fā)送成功后會(huì)產(chǎn)生中斷并返回0X28。

7、  如果還要繼續(xù)發(fā)送請(qǐng)回到5,否則寫(xiě)入P到相關(guān)寄存器。

8、  7時(shí),如果數(shù)據(jù)已經(jīng)發(fā)送完但是并不想寫(xiě)P以停止I2C操作,而需要繼續(xù)進(jìn)行別的操作。舉個(gè)例子,比如在讀取RTC的時(shí)間信息時(shí),先寫(xiě)入要訪問(wèn)的寄存器地址信息,然后在讀出數(shù)據(jù)信息,這是一個(gè)連貫的動(dòng)作,并不需要插入P操作的,具體請(qǐng)查看RTC數(shù)據(jù)手冊(cè)。那么這個(gè)時(shí)候程序再次設(shè)置S位到相關(guān)寄存器,使得控制器發(fā)送起始信號(hào)。

9、  上一步再次發(fā)送S成功后會(huì)產(chǎn)生中斷并返回0X10。此時(shí)程序?qū)懭?/SPAN>SLA+R信息到相關(guān)寄存器。

10、              接下來(lái)就轉(zhuǎn)到了Fig117了。

 

    接下來(lái),解讀一下Fig117

1、  程序設(shè)置S位到相關(guān)寄存器,控制器會(huì)嘗試著發(fā)送起始信號(hào)。

2、  成功完成起始信號(hào)的發(fā)送后控制器會(huì)產(chǎn)生中斷并返回0X08

3、  程序?qū)懭?/SPAN>SLA+R信息到相關(guān)寄存器。

4、  發(fā)送成功后會(huì)產(chǎn)生中斷并返回0X40,注意Fig11610條也就是這里的第4條。這個(gè)時(shí)候我們?cè)撟鍪裁戳四兀@然是需要讀取數(shù)據(jù)。但是請(qǐng)注意,并不是現(xiàn)在就讀取數(shù)據(jù),因?yàn)楸緱l的0X40僅僅表示了SLA+R發(fā)送完畢了,我們想要的其它數(shù)據(jù)還在后頭呢,中斷程序退出后控制器才會(huì)產(chǎn)生時(shí)鐘去外部I2C器件那里取數(shù)據(jù)。

5、  如上所述,當(dāng)讀取數(shù)據(jù)成功后控制器會(huì)產(chǎn)生中斷并返回0X50,這時(shí)就可以從控制器的數(shù)據(jù)寄存器拷貝數(shù)據(jù)了。根據(jù)I2C協(xié)議,此時(shí)主機(jī)還需要向從機(jī)提供應(yīng)答信號(hào),如果接下來(lái)還需要讀取數(shù)據(jù),那么應(yīng)答ACK,否則應(yīng)答NO ACK。如果應(yīng)答ACK,請(qǐng)繼續(xù)第5條,否則就是第6條的事情了。應(yīng)答操作由程序完成。

6、  如果之前應(yīng)答的是NO ACK,應(yīng)答完后控制器會(huì)產(chǎn)生中斷并返回0X58。寫(xiě)入P到相關(guān)寄存器完成此次I2C操作。

 

以上兩篇解讀僅以狀態(tài)遷移圖的主線為例,其它分支因?yàn)楸容^簡(jiǎn)單所以沒(méi)有做解讀,編程的時(shí)候需要考慮其它分支情況。

關(guān)于資料1就說(shuō)這么多,一定要先把這個(gè)狀態(tài)遷移圖搞明白,要不然會(huì)死得不明不白。資料1理解透了,看資料2就輕松許多了,無(wú)非是一些細(xì)節(jié)嘛。記住一條就是了,該設(shè)置的位要設(shè)置,該清除的位要清除,不能多也不能少,會(huì)帶來(lái)什么問(wèn)題俺也不清楚,沒(méi)有逐個(gè)測(cè)試,調(diào)試的過(guò)程發(fā)現(xiàn)不正確的設(shè)置會(huì)導(dǎo)致?tīng)顟B(tài)遷移不按規(guī)定的路徑走。

在調(diào)試的過(guò)程中可以通過(guò)跟蹤中斷程序中讀來(lái)的狀態(tài)碼來(lái)確定狀態(tài)遷移路徑,要是路徑不對(duì)多半就是俺在上一個(gè)段落中提到的原因了。還有一點(diǎn)尤其注意,有些I2C器件存在超時(shí)的問(wèn)題,就是說(shuō)一次完整的I2C操作(從S開(kāi)始算起,以P作為結(jié)束)需要在規(guī)定的時(shí)間內(nèi)完成,所以諸位千萬(wàn)不要在中斷程序里設(shè)置斷點(diǎn)來(lái)觀察寄存器信息,除非你能保證你眼睛夠犀利手腳夠麻利能夠在超時(shí)時(shí)間之內(nèi)完成想要做的事情。

 

OK,該打住了,就說(shuō)這么多,不要向我要源代碼,不是本狼不夠OPEN,是因?yàn)榘匙约憾几悴坏健?/SPAN>

 

       聯(lián)系我:y_y_z_l  愛(ài)她 163.com

       版權(quán)聲明:歡迎轉(zhuǎn)載,但請(qǐng)保留本文的完整性。

 

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
返回頂部