<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è) > 嵌入式系統 > 設計應用 > 基于s3c2410和嵌入式Linux的D/A轉換的實(shí)現

基于s3c2410和嵌入式Linux的D/A轉換的實(shí)現

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

1 引言

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

應用系統中,特別是智能儀器、儀表、機電設備及裝置控制中,需要使用A/D將模擬的電量信號為數字信號進(jìn)行處理,而后再將處理的結果通過(guò)為模擬量對被控過(guò)程和對象的控制[1]。

ARM920T內核的是一款低功耗,高性?xún)r(jià)比的處理器[2]。這款處理器內部集成了多種控制接口,自帶8路10位的A/D轉換器[3],用于支持對于觸摸屏輸入的控制,而且足以滿(mǎn)足外部模擬量采集的需要,但是內部沒(méi)有集成轉換器,因此在上述應用中,就需要采用獨立的轉換芯片與配合,滿(mǎn)足應用的需要。而一款通用的10位串行器,可以滿(mǎn)足一般應用對于分辨率和精度的要求,并且采用串行通信,芯片面積小,占用的處理器管腳數少,因此本文中以s32410外接,并操作系統,的功能。

2 系統硬件電路

2.1 10位的[4]

MAX504是MAXIUM公司推出的低功耗,電壓輸出,10位串行數字/模擬轉換芯片,支持+5V單供電和±5V雙供電方式,并且該芯片對于包括偏移、增益和線(xiàn)性誤差在內的各項誤差均以調整,所以應用非常簡(jiǎn)單,不需要再度校正。

MAX504采用的是三線(xiàn)串行接口,與SPI,QSPI和Microwire標準均兼容。MAX504可通過(guò)寫(xiě)入兩個(gè)8位長(cháng)的數據進(jìn)行編程,其寫(xiě)入的先后順序為,4個(gè)填充位,10個(gè)數據位和最低兩位的0。此處,最高4位的填充位只有當MAX504采用菊花鏈方式連接時(shí)必須寫(xiě)入,而最低的兩位0則一定需要寫(xiě)入。當且僅當CS片選有效時(shí),數據在SCLK的上升沿逐位打入片內的16位移位寄存器,并在CS上升沿,將有效的10位數據(第2~第11位)傳送到D/A轉換寄存器中,修改原寄存器內容。

MAX504芯片為14管腳的DIP或者SO封裝形式,除電源和地管腳外,管腳可以分為兩組,一組與處理器相連接,另一組管腳的不同連接可以改變MAX504的工作模式。

MAX504具有三種工作模式,分別是單極性輸出,雙極性輸出和四象限乘法器。通過(guò)將MAX504的REIN,VOUT ,BIPOFF和RFB幾個(gè)管腳的不同連接方式,可以根據需要將MAX504定義為需要的工作模式。

2.2 MAX504與S3c2410的連接

MAX504與處理器之間可以使用SPI,QSPI和Microwire中的任何一種串行通信方式,而s3c2410帶有兩個(gè)SPI接口,所以MAX504與s32410之間通過(guò)SPI進(jìn)行連接非常方便。電路如圖所示

圖2.1 電路連接原理圖

MAX504與處理器連接的主要管腳有四個(gè),分別是:

(1) DIN―數據輸入端,該管腳用于接收串行通信數據信號,直接與s3c2410的MOSI管腳連接即可。MOSIn(n可以為0或1,分別對應兩個(gè)SPI口)管腳,s3c2410作為SPI串行通信的主模塊使用,該管腳由s3c2410輸出信號,MAX504作為通信的從設備進(jìn)行數據的接收。

(2) SCLK―串行時(shí)鐘輸入端,該管腳用于接收串行通信的時(shí)鐘信號,以便串行通信過(guò)程中的通信雙方的同步,直接與s3c2410的SPI時(shí)鐘輸出管腳SPICLK連接即可。

(3) CS―片選管腳,該管腳為低電平有效,只有當CS有效時(shí),MAX504接收數據,并在CS失效時(shí),開(kāi)始進(jìn)行數據轉換。本電路中,使用s3c2410的一根外部I/O管腳進(jìn)行控制。

(4) CLR―清除端,該管腳也是低電平有效,可將MAX504的轉換數據寄存器復位清零,本電路,使用s3c2410的另一個(gè)外部I/O腳進(jìn)行控制。

該電路中,采用的是單極性工作模式,輸出電壓范圍為0~2VREF,參考電壓VREF由片內電路形成,為2.048V,故該電路的輸出電壓范圍為0~4.096V。

3 系統的編程

3.1 簡(jiǎn)介

目前系統為了更好的適應高效,穩定,可移植的需要,廣泛地應用了嵌入式操作系統進(jìn)行資源管理。因其開(kāi)放性特點(diǎn),成為在嵌入式系統中應用最為廣泛的操作系統。包括RT-linux,µClinux以及ARM處理器使用的ARM-Linux等多種適應不同應用需要的版本。

ARM-Linux將Linux內核移植到各種ARM處理器上,因此,在開(kāi)發(fā)ARM處理器的應用系統時(shí),如果對于實(shí)時(shí)性的要求不是很?chē)栏?,且處理器又支持MMU時(shí),采用ARM-Linux作為操作系統可以縮短開(kāi)發(fā)周期,降低開(kāi)發(fā)成本。

3.2 D/A驅動(dòng)的實(shí)現

考慮到一個(gè)嵌入式應用系統中,不僅僅包含A/D,D/A轉換,還包括其他,如通信,顯示,輸入等等功能,所以在實(shí)現D/A轉換功能時(shí),是基于嵌入式操作系統的,以作為操作系統。在操作外設時(shí),將外設分為三種類(lèi)型的設備進(jìn)行操作,即:字符型、塊設備和網(wǎng)絡(luò )設備[5]。在支持D/A操作時(shí),將D/A設備作為字符型設備,需要編寫(xiě)相應的。

s3c2410-da.h>主要包含的內容就是對文件結構體open, ctrl,realse的重定向函數的編寫(xiě),即定向為s3c2410_da_open,s3c2410_da_ctrl,s3c2410_da_close。這三個(gè)函數的作

用分別為:

(1)s3c2410_da_open:所做的工作非常簡(jiǎn)單,就是增加模塊使用的計數值,通過(guò)該值可以體現邏輯上當先打開(kāi)da端口的任務(wù)數。

(2)s3c2410_da_close:該函數進(jìn)行的處理與open剛好相反,將模塊使用計數值減一,表明使用結束。

圖3.1 驅動(dòng)核心函數s3c2410_da_ctrl流程圖

(3)s3c2410_da_ctrl:該函數為核心函數,函數定義為static int_exio_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg),函數功能為:由cmd參數指出D/A操作類(lèi)型,arg為操作使用的參數,根據cmd和arg,可以根據通道號,對多個(gè)D/A通道進(jìn)行清空操作和數據寫(xiě)入操作。

函數流程如圖3.1所示,應用程序進(jìn)行系統調用后,進(jìn)入內核態(tài),運行該函數實(shí)現對DA的操作,DA_ENABLE,使能s3c2410用于控制Max504的外部I/O,使CS低電平有效,選中D/A。之后,根據cmd指定的操作類(lèi)型,對不同的D/A設備進(jìn)行數據傳送操作和寄存器清空操作。對D/A的數據寫(xiě)入,這里是通過(guò)s3c2410的SPI口進(jìn)行的,s3c2410的兩個(gè)SPI口,在D/A應用中,需要操作的SPI寄存器主要是SPICON和SPITDAT,設置SPICON,使s3c2410工作于主模式,將發(fā)送給MAX504進(jìn)行轉換的數據寫(xiě)入SPITDAT,SPITDAT為8位的寄存器,而MAX504是10位D/A轉換器,所以需要發(fā)送兩次,并且MAX504接收的16位數據,要求最低兩位一定為00。數據經(jīng)SPI傳送后,MAX504并不立即進(jìn)行數據轉換,而是在CS片選上升沿才開(kāi)始數據轉換,DA_DISABLE的作用就是使s3c2410連接MAX504-CLR管腳的外部I/O端失效,此時(shí)D/A開(kāi)始進(jìn)行數據轉換,系統調用結束。

將寫(xiě)好的庫,進(jìn)行加載,加載到Linux核中,應用程序就可以像操作文件一樣操作D/A設備了。

3.3應用程序設計示例

有了底層驅動(dòng)的支持,用戶(hù)可以根據自己的需要編寫(xiě)D/A轉換應用程序,而不需要關(guān)心MAX504和s3c2410的硬件特征,這樣就使的應用程序的編寫(xiě)非常的簡(jiǎn)單。這里以一個(gè)簡(jiǎn)單的應用程序為例,說(shuō)明其程序編寫(xiě)方法,流程圖如圖所示。該應用程序,可以根據用戶(hù)輸入的D/A轉換器的編號和電壓,由MAX504的Vout管腳輸出該電壓。

首先,由于按上述電路,MAX504的滿(mǎn)量程輸出電壓為4.096V,所以用戶(hù)要求輸出的電壓應在該范圍內,將用戶(hù)輸入的電壓值,用下面語(yǔ)句轉換為數字量:

value=(unsigned int)((v*1024.0f)/Max504_FULL);

得到D/A轉換的數字量后,調用ioctl,首先將指定D/A的寄存器清空:

ioctl(da_fd, DA_IOCTRL_CLR, 0);//清D/A0

而后調用ioctl,對待轉換的數字量進(jìn)行D/A轉換:

ioctl(da_fd, DA0_IOCTRL_WRITE, value);

轉換結束后,將設備釋放即可。

圖3.2 應用程序流程圖

4結束語(yǔ)

本文針對主流嵌入式處理器-基于A(yíng)RM920T內核的s3c2410,以D/A小型外設實(shí)際開(kāi)發(fā)過(guò)程為引,在硬件連接電路的基礎上,詳細地說(shuō)明了嵌入式Linux操作系統的外設驅動(dòng)開(kāi)發(fā)方法,給出了基于該處理器和Linux操作系統的外設驅動(dòng)開(kāi)發(fā)流程,既可直接用于工程應用,同時(shí)又為其他嵌入式系統的開(kāi)發(fā)提供參考。

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>