<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式系統中實(shí)時(shí)時(shí)問(wèn)的獲取

嵌入式系統中實(shí)時(shí)時(shí)問(wèn)的獲取

作者: 時(shí)間:2009-05-05 來(lái)源:網(wǎng)絡(luò ) 收藏

Linux中有三種類(lèi)型的設備:字符設備、塊設備和網(wǎng)絡(luò )設備。字符設備是指發(fā)送和接收數據以字符的形式進(jìn)行,無(wú)需緩沖直接存取,在對字符設備發(fā)出讀寫(xiě)請求后,實(shí)際的硬件I/0隨即發(fā)生;而塊設備則是對數據緩沖區進(jìn)行讀寫(xiě)并可以隨機訪(fǎng)問(wèn),操作是以塊為單位。而網(wǎng)絡(luò )設備與字符設備、塊設備有很大的不同,用于對網(wǎng)絡(luò )設備的控制和管理。DSl302顯然屬于字符設備。
2.6版本的Linux內核和2.4版本存在很大的不同,在模塊的開(kāi)發(fā)和設計上也是如此。在這里使用的內核版本是Linux一2.6.13。首先,驅動(dòng)程序作為一個(gè)模塊可以動(dòng)態(tài)加載進(jìn)內核也可以動(dòng)態(tài)的從內核中卸載掉,在加載和卸載的過(guò)程際伴隨的是驅動(dòng)程序向內核的注冊與注銷(xiāo)。在驅動(dòng)程序的代碼中會(huì )有兩個(gè)函數分別在模塊加載和卸載過(guò)程中調用DSl302_init()、DSl302_exit(),在其中再調用register_chrdev()、unregister_chrdev()用以向內核注冊和注銷(xiāo)一個(gè)設備驅動(dòng)程序。在2.6內核版本中,用如下方法聲明這兩個(gè)函數給內核:
Module_init(DS1302_init):
Module_exit(DSl302_exit):
在DSl302_init()函數中除調用字符設備的注冊函數外,還有一個(gè)重要任務(wù),就是配置需要用到的三條I/0口線(xiàn):PBO、PBl0、PBll。配置過(guò)程包括:B端口控制器時(shí)鐘使能、通用I/O口使能、輸出使能、上拉電阻使能、三個(gè)口線(xiàn)上的同步數據輸出使能,另外通過(guò)置PIOB_CODR寄存器使三個(gè)引腳輸出低電平。代碼如下:

本文引用地址:http://dyxdggzs.com/article/152515.htm


其中va_sys是一個(gè)結構體,包含了AT9lRM9200處理器內的全部寄存器,通過(guò)一條語(yǔ)句:AT91PS_SYS va_sys=(AT91PS SYS)AT91C_VA_BASE_SYS,把所有寄存器的最低地址賦給va_sys,這樣結構體中的寄存器名稱(chēng)就和實(shí)際的地址對應起來(lái)了。注意:這里用到的地址都是經(jīng)過(guò)映射過(guò)的虛擬地址,在實(shí)際運行中會(huì )通過(guò)處理器內部的MMU單元轉換為實(shí)際的物理地址發(fā)往地址總線(xiàn)。上述代碼中的AT91C_PI0_PBO等等是一些常數的宏定義用于寄存器賦值,比如:#define AT9lC_PIO_PBO(10),它們定義在A(yíng)T91RM9200.h頭文件中。
在驅動(dòng)程序中,file_operations是一個(gè)重要的結構體,通過(guò)它把針對設備的具體操作注冊給內核的統一接口。結構體中全是函數指針,DSl302驅動(dòng)程序中用到的函數有:open、release、ioctl,用于設備的打開(kāi)與釋放、設備的讀寫(xiě)以及設備的控制。對DSl302的讀寫(xiě)都是在dsl302_ioctl()中調用相應的讀寫(xiě)函數實(shí)現的。
下面具體分析一下驅動(dòng)程序中向DSl302發(fā)送單個(gè)字


代碼中用到的at91_set_gpi0_value()函數定義在內核的Gpio.c文件中,最終是對10控制器的PIO_SODR(置位輸出數據寄存器)或PIO_CODR(清零輸出數據寄存器)賦值以使相應引腳輸出需要的電平。
經(jīng)過(guò)測試,短時(shí)間內誤差不明顯,但時(shí)鐘芯片存在積累誤差并且易受環(huán)境影響,連續幾天運行下來(lái),誤差有數秒之多。所以,需要通過(guò)某種方法定期使用標準時(shí)間向時(shí)鐘芯片對時(shí),以消除誤差。下面要介紹的GPS接收機方案就可以做到這點(diǎn)。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>