国产一区二区三精品久久久无广告,中文无码伦av中文字幕,久久99久久99精品免视看看,亚洲a∨无码精品色午夜

驅動程序設計范例6篇

前言:中文期刊網精心挑選了驅動程序設計范文供你參考和學習,希望我們的參考范文能激發你的文章創作靈感,歡迎閱讀。

驅動程序設計范文1

關鍵詞:PCI; vxworks;驅動程序;運動控制卡

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2012)29-6966-03

VxWorks是目前世界上用戶數量最大的實時嵌入式操作系統, 它具有高度可剪裁的微內核結構、高效的多任務調度、靈活的任務間通信手段、快速靈活的I/O系統、確定的微妙級中斷延遲時間等優點。

本文介紹了基于PCI 接口規范的通用運動控制卡在VxWorks下的驅動程序的設計。對其設計驅動程序需要對實時操作系統、實時軟件設計、硬件設備有深入的了解。因此, 該設計不僅本身具有很高的應用價值, 也為實時驅動程序的設計提供了一個樣例。

1 系統組成

在基于微機的數據采集、處理與控制系統中,計算機接口卡常常是其中的關鍵硬件設備。目前在運動控制領域,各類運動控制卡得到廣泛運用,其中以工控機通過ISA或PCI等系統總線連接運動控制卡的主從式結構最為流行,由工控機發出控制指令和參數,控制卡根據接收到的指令及參數完成具體控制功能。由于PCI總線的高速和即插即用特性,使其取代ISA被廣泛應用于高速數據采集與傳輸等系統中,有效地解決了實時采集、實時傳輸和實時存儲等問題。

2 PCI 配置空間

PCI系統具有三種地址空間:存儲器空間、I/O空間和配置空間。每個PCI設備都有64個配置雙字用于實現配置寄存器,64個配置雙字分為兩部分,⑴PCI協議定義了開頭16個雙字的格式和用途,稱為設備的配置頭區域;⑵其它48個雙字的用途是由設備指定的。目前PCI協議定義了兩種頭區域格式,第1類配置頭區域用于定義PCI-PCI橋,而第0類配置頭區域用于定義其它PCI設備。所有的PCI設備,包括PCI-PCI橋都必須實現下述配置寄存器:廠商標志、設備標志、命令、狀態、分類碼、版本標志和頭區域類型寄存器。如表1所示為PCI配置寄存器。這些寄存器對編程訪問PCI設備至關重要,我們就是利用vendor ID 和device ID來枚舉出對應的設備,再進一步獲得設備的其他信息的。

3 驅動程序的開發

VxWorks 提供在指定目標系統上運行的板級支持包(BSP),本文選用的是針對pentium的板級支持包。VxWorks是支持PCI總線的,提供了一些庫函數專門用來訪問PCI設備。為了調用這些函數以方便開發,需要包含如下頭文件"iosLib.h"、"pciConfigLib.h"、"pciIntLib.h"、"sysLib.h"和"pciLocalBus.h",還需要導入sysOutLong()和sysInByte()等函數。在config.h里面定義INCLUDE_PCI以添加VxWorks對PCI的支持,還可以定義PCI_CFG_TYPE為PCI_CFG_FORCE、PCI_CFG_AUTO 或 PCI_CFG_NONE,我們一般定義為PCI_CFG_NONE,Vxworks只需把配置好的信息讀出來就可以了。

針對PCI 總線結構的數據采集模塊,其驅動程序的主要開發步驟如下:確定設備的PCI 配置信息確定設備的內部存儲器、寄存器基地址及中斷號設備初始化中斷服務程序設備各功能函數。以下按照程序執行的順序分步驟給出源代碼,并加以詳細的說明。

4 結束語

利用上文所述的方法編寫的驅動程序,達到了本項目所要求的性能指標,系統經過實際驗證是高速穩定可靠的,而且由于PCI總線的即插即用特性,不需要用戶去手動跳線,極大得方便了使用。

參考文獻:

[1] microsoft msdn[EB].2001.

驅動程序設計范文2

關鍵詞:MCP2515 嵌入式Linux 驅動 CAN

中圖分類號:TP336 文獻標識碼:A 文章編號:1007-9416(2016)04-0000-00

1系統硬件結構介紹

本系統的硬件平臺主要由OK2440開發板、基于MCP2515的CAN總線通信模塊和以STC89C52為控制器的CAN節點模塊組成。CAN通信模塊用來完成OK2440開發板和STC89C52控制的節點模塊之間的數據傳輸。

1.1 MCP2515功能簡介

MCP2515是一款獨立的CAN總線控制器,完全支持CAN V2.0B 技術規范。MCP2515 擁有六個驗收濾波寄存器和兩個驗收屏蔽寄存器,通過它們可以過濾掉總線上不需要的報文,從而減少MCU關于處理CAN總線上無用數據的開銷。MCP2515與MCU 的連接是通過業界標準串行外設接口來實現的。

1.2 TJA1050功能簡介

TJA1050 是介于CAN控制器和物理總線之間的一種符合ISO 11898標準的高速CAN收發器。其最高速率可達1Mbit/s,而且它的電磁抗干擾EMI性極高,至少可以連接110個節點。在實際電路中,可為物理總線提供差動發送和為CAN控制器提供差動接收。

2 MCP2515相關驅動程序設計

2.1 Linux設備驅動簡介

在Linux系統中,由于對硬件的操作必須處在特權模式下,在用戶工作模式下,程序一般不能直接和硬件進行通信。因此,設備驅動程序則承擔了用戶模式下硬件和用戶應用程序之間的通信工作,同時它還為應用程序和內核中其他的部分訪問這些設備提供了程序接口。大多數設備驅動程序可以在系統工作時,以動態方式進行加載,在不需要的時候又可以將其卸載掉。

2.2 MCP2515驅動程序設計

2.2.1 MCP2515驅動初始化函數

在MCP2515的驅動初始化函數中首先通過s3c2440_spi_ioremap()函數將S3C2440上的SPI寄存器的物理地址映射到內核空間,這樣才可以在驅動程序中訪問和配置S3C2440的SPI寄存器。在正確的配置S3C2410的SPI寄存器后,通過s3c2440_spi_init()來完成對S3C2440相關寄存器的賦值。然后通過s3c2440_irq_init()函數來完成中斷方面相關的設置。MCP2515_init()和MCP2515_dev_init()兩個函數主要是針對于MCP2515控制器進行相關的配置和為MCP2515設備驅動程序申請和初始化內存空間。最后通過MCP2515 _cdev_register(Device0)函數完成MCP2515在內核中的注冊。

2.2.2 MCP2515相關中斷函數的注冊

在CAN總線驅動程序中,CAN通信模塊接收和發送數據必須以中斷的方式與系統內核之間進行數據的交換,所以在MCP2515的驅動程序中必須用到內核中的相關中斷函數。對于MCP2515的中斷注冊函數request_irq(),如果此中斷注冊函數返回值為0則表示中斷注冊成功,返回負數則表示注冊失敗。

2.2.3 MCP2515的文件操作函數

MCP2515_fops中定義了很多與設備有關的操作函數,內核可以通來它來訪問與MCP2515操作有關的函數。在MCP2515的文件操作函數中,read()和write()兩個函數是用來完成讀寫CAN總線上數據的功能的,通過傳遞不同的參數給驅動程序中的read()和write(),我們可以讀取和寫入相應的數據。驅動中的CAN總線讀函數read()是整個驅動程序設計的難點,其中在函數的設計中采用了Linux內核阻塞機制。read()讀取完CAN總線上的數據后,通過驗收濾波寄存器和屏蔽濾波寄存器來決定總線上的數據幀是否存入到總線控制器相應的接收緩沖寄存器里。

2.2.4 MCP2515的卸載函數

當我們不需要繼續使用某個設備時,我們可以將這個設備從內核中卸載掉。在設備的卸載過程中,必須將其內核中所對應的設備號釋放掉。在模塊的卸載函數中,我們通過調用int unregister_chrdev_region(unsigned int major,const char *name)函數來完成設備驅動的卸載。此函數的兩個參數分別對應設備文件的主設備號和設備名。在卸載模塊時,Linux內核會把設備名與內核中已注冊的設備名稱進行對比,如果兩者相等,則完成設備的卸載,反之則卸載失敗。MCP2515的驅動卸載函數主要是完成MCP2515驅動在內核中所占用的中斷的釋放和MCP2515在內核中的注銷。

3 結語

本文重點討論了S3C2440中MCP2515的驅動程序設計方法,并詳細介紹了Linux系統下如何開發MCP2515的驅動程序的方法。實驗結果表明,本文所設計的Linux下MCP2515驅動程序可以在OK2440開發板上正常運行,基本可以完成CAN總線上數據的正常發送與接收,測試結果符合論文的要求。本文提到的基于Linux下MCP2515驅動程序的開發,對其他Linux驅動程序的開發具有一定的啟示作用。

參考文獻

[1]宋寶華.Linux設備驅動開發詳解[M].北京:人民郵電出版社,2008.

[2]楊慶華,張景元.單片機和MCP2515的CAN總線通信模塊設計[J].單片機與嵌入式系統應用,2007.

[3]劉淼.嵌入式系統接口設計與Linux驅動程序開發[M].北京:北京航空航天大學出版社,2006.

驅動程序設計范文3

關鍵詞:DSP;TMS320C6416;PCI Linux2.6;驅動程序;DMA

中圖分類號:TP368.11 文獻標識碼:A文章編號:1007-9599(2012)04-0000-02

一、引言

數字信號處理器(DSP)在通訊、語音圖像處理、數據加密等各方面得到越來越廣泛的應用。TI C6000系列DSP芯片內嵌PCI接口,支持主/從模式的讀寫,以33MHz的工作頻率和32位地址/數據總線進行數據傳輸,理論上最高可以支持132MByte/s的數據傳輸,在速度上遠遠超過DSP常用的HPI、McBSP總線,完全可以滿足傳輸實時性的要求。

本文在Linux2.6內核下,以TMS320C6416 DSP數據加密卡為平臺,研究了PCI設備驅動程序的開發方法。首先介紹了常規的以IO內存方式對DSP進行讀寫操作的方法,接著結合DSP芯片特點,提出了一種基于DMA傳輸方式的DSP加密卡控制方法,與常規方法比,顯著地提高了傳輸速度,具有較高的應用價值。

二、TMS320C6416的PCI接口

TMS320C6416是一款TI公司生產的DSP芯片,屬于C6000系列。C6000系列DSP片內集成了一個主/從模式的PCI接口,可以通過PCI總線實現主機與DSP的互連。TMS320C6416的PCI接口由EDMA的地址產生硬件與DSP相連,支持PCI接口規范2.2版本[1]。

(一)PCI數據訪問

DSP內嵌PCI主要包含三類寄存器:PCI配置寄存器、PCI I/O寄存器以及存儲器映射寄存器。

PCI主機通過3個基地址空間(Base0-2)能夠訪問DSP全部的存儲器映射空間。如圖1所示,Base0空間定義了一段可預取4Mbytes的DSP存儲器空間。Base1定義了8Mbytes不可預取的存儲器空間。Base2定義了16Byte的I/O空間。當主機上電啟動后,主機操作系統執行配置事務,將DSP的內存和I/O區域映射到主機處理器的地址空間,此段空間的物理地址,可以通過讀取BASE0-2寄存器獲得[2]。

三、Linux驅動程序開發

Linux下對TMS320C6416加密卡進行驅動程序開發,要完成的工作主要包括:對PCI設備的查找、初始化、卸載,對字符設備的數據讀寫和控制,中斷處理等[3]。

(一)PCI設備初始化

在Linux2.6內核中,使用pci_driver結構體來定義PCI驅動。設備查找時通過id_table結構體中的的VENDER_ID、DEVICE_ID來區別不同的設備,對于TMS320C6416芯片,VENDER_ID和DEVICE_ID分別為0x104c、0xa106。

pci_driver結構體中的probe()函數向內核提供了對硬件進行探測并初始化的接口。probe()函數完成的功能有:

1.讀取DSP加密卡Base0-2空間基地址和中斷號,通過pci_read_config_dword()函數實現;

2.將IO內存空間映射到Linux內核虛擬地址空間。通過ioremap()函數實現;

3.申請DSP加密卡中斷服務程序。通過request_irq()函數實現;

4.申請DSP加密卡的主設備號,注冊DSP加密卡字符設備驅動程序。通過cdev_init()、cdev_add()函數實現。

初始化完成后,可以通過設置DSPP寄存器,訪問BASE0空間讀取DSP內存資源,基于I/O內存方式進行PCI數據讀寫關鍵代碼如下:

static ssize_t dsp_read(struct file *fp, char *buf, size_t size, loff_t *f_pos)

{

outl(*f_pos, dsp_dev.iospace+IO_DSPP_OFFSET); //設置DSPP寄存器

copy_to_user(buf,dsp_dev.bar0, size); //拷貝DSP內存至主機

}

在實際使用中, TMS320C6416 PCI接口可以采用DMA方式進行數據操作,通過DMA控制器直接傳輸I/O數據,可大大提高與主機通信的吞吐量。

(二)基于DMA傳輸的加密卡控制

在Linux2.6內核中,file_operations結構體中的ioctl()函數向應用程序提供了對硬件進行命令控制的接口。以DSP加密卡加解密控制命令為例,加密卡加密命令要完成的操作是:通過DMA讀操作將主機數據發送給DSP加密卡,等待DSP加密卡將數據加密完畢后,通過DMA寫操作將加密數據回傳給主機。詳細步驟如下:

1.主機調用內核函數get_free_page()申請DMA空間,調用virt_to_bus()函數將內核空間虛擬地址轉換成PCI總線地址,將此地址寫入到DSP端PCIMA寄存器中;

2.主機訪問Base1空間,調用writel()函數修改DSP端PCIMA、DSPMA寄存器配置DMA傳輸源地址、目的地址,修改DSP端PCIMC寄存器設置DMA傳輸方向并啟動DMA傳輸[4];

3.DMA傳輸完成后,DSP端響應MASTER OK中斷,在中斷中釋放信號量,開始數據加密操作。加密操作完成后,使用DMA方式將產生的密文數據回送給主機,并給主機發送中斷;

4.PC機響應 中斷,將密文數據拷貝至用戶空間。

(三)用戶態設備訪問

Linux系統下可通過使用命令insmod將驅動程序編譯生成的.ko文件插入到內核中,從而實現驅動程序的模塊化動態加載。使用mknod命令創建由主、次設備號確定的加密卡設備文件,然后就可以像操作普通文件一樣來操作DSP加密卡設備。打開設備文件后,就可以實現對設備進行諸如數據讀寫、設備控制等操作。

四、測試結果

在主機上編寫測試程序,設置DSP的EMIF工作在100 MHz/133 MHz時鐘,數據線為32位。PCI總線工作在33MHz時鐘,使用DMA方式進行連續的數據讀寫,傳輸1GB的數據,測得DSP主模式下DMA方式數據寫操作速度為90Mbytes/s,讀操作速度為70MBytes/s,實驗證明,所開發的驅動程序使用良好穩定,傳輸高效,滿足高速數據傳輸和高速數據處理的需要。

參考文獻:

[1]Texas Instruments.TMS320C6000 DSP Peripheral Component Interconnect(PCI)Reference Guide[Z].2007:20221

[2][美]Jonathan C,Alessandro R.LINUX設備驅動程序(第2版)[M].北京:中國電力出版社,2006

[3]宋寶華,華清遠見.LINUX設備驅動開發詳解[M].北京:人民郵電出版社,2010

[4]李靜,趙保軍.基于TMS320C6416內嵌PCI設備驅動程序開發[J].微機發展,2005(10):135-137

驅動程序設計范文4

嵌入式系統指的是為執行特定的功能而內置硬件和軟件的電子控制系統。換言之,內置的是微處理器而不是一簡單的單回路裝置。即通過這些微處理器的運作從而執行所需的操作并管理程序的系統。

嵌入式系統開始應用于汽車、航天、航空、軍事、醫療裝備和工程制御等工業方面,現在應用范圍擴大到家電產品、移動電話等,從而密切聯系著我們的生活。特別是使智能手機和互聯網接入成為可能的智能TV、超便攜平板電腦、具有遠程監控功能的...等已成為市場的主流。像智能手機,和小型綜合無線通信電話機一樣的新形態的產品的出世,使手機不到二三年已發展到一個新的范例。因為現階段已經沒有未配備微處理器和軟的家電類產品,且現在軟件和硬件方面技能的要求越來越高,所以說從這兩方面來看的話,端嵌入式系統的發展速度將會猛增。

而目前的大中專院校,尤其本科階段以上的高等院校,嵌入式系統工程人才培養相對落后。在這種情況下,許多高校為自動化、電子信息、計算機等專業設置了嵌入式系統等課程,但大部分高校的嵌入式系統實驗都是基于ARM7的實驗平臺,已不能滿足嵌入式系統教學發展的需要。

二、HBE-EMPOSⅢ-SV210簡介

HBE-EMPOSⅢ-SV210是使用ARM公司的CortexTM-A8 Core,基于最新三星應用的S5PV210處理器,提供其各種功能及應用,開發的嵌入式平臺。HBE-EMPOSⅢ-SV210適用處理器中提供的多樣化的功能,可對處理器系統核心功能進行學習,以及內置了以實際生活中興起應用的多樣化設備。從HBE-EMPOSⅢ-SV210中理解以其連接設備的構造及驅動原理,可進行學習處理器與設備的應用,也是活用其他選配模塊,多樣化的設備及通信環境一起可進行實驗練習的平臺。

三、基于HBE-EMPOSⅢ-SV210的嵌入式驅動實驗

在HBE-EMPOSⅢ-SV210中可完成的驅動程序設計有: LED 設備驅動程序、7-Segment 設備驅動程序、TextLCD 設備驅動程序、Dot Matrix 設備驅動程序、KeyPad 設備驅動程序、DIP Switch 設備驅動程序、OLED 設備驅動程序、Buzzer 設備驅動程序、GPIO-Button 設備驅動程序。

四、嵌入式驅動實驗實例—蜂鳴器

HBE-EMPOSIII-SV210的Buzzer Controller通過由16bit構成的Buzzer_Ctrl_Reg (Buzzer Control Register) 控制。通過向 Buzzer_Ctrl_Reg 0 bit中寫入 0 或者 1、可以關閉或打開 Buzzer。

下圖表現了 Buzzer Control Register 的數據位構造。

Buzzer Control Register (read/write)

設備驅動程序通過 close 函數關閉時,利用 iounmap() 函數釋放物理地址和虛擬地址。在 open() 函數中注冊的 I/O 區域也釋放。

通過 write 函數向設備驅動程序中寫值時。驅動程序值寫在映射的 (*addr) 存儲空址中,空址 Buzzer。(0:off, 1:on)

rmmod 命令執行時被執行的例程。使用 unregister_chrdev() 函數釋放字符設備驅動程序。

module_init 是內核裝載 (insmod 執行時) 時指定內核調用的函數的宏,module_exit 是內核卸載 (rmmod 執行時) 時指定內核調用的函數的宏。

建立為了使用設備驅動程序的應用程序buz_test.c。

在buz_test.c代碼中,利用 open 函數打開設備驅動程序。如果 /dev/buzzer 驅動程序正常運行,用戶輸入的數據值通過 write() 函數控制 Buzzer。(相關代碼略,可以查閱實驗箱配套指導手冊)

實驗步驟:

1)編譯

現在,創建 Makefile 來編譯兩個文件。編譯后多數的文件被生成。在這里,來觀察研究 buzzer.ko 和 buz_test 這兩個文件。buzzer.ko 是設備驅動程序目標文件,buz_test 是執行文件。

接下來,需要將模塊插入到內核中。插入命令是 insmod,通過 mknod 裝載設備驅動程序。Mknod 使用時,使用的主編號可以作為 insmod 命令語使用時出現的編號使用。主編號可以在 insmod 后查看 /var/log/messages 來了解。

如果設備驅動程序移植完成,運行 buz_test 程序,控制 Buzzer。./buz_test 1控制蜂鳴器發聲,./buz_test 0關閉蜂鳴器。

五、總結

嵌入式驅動程序設計作為知識更新速度極快、教學內容越來越多的一門課程,需要教師在不斷的教學實踐和教學探索過程中,結合相應的實驗設備,不斷發現適合本校學生的教學方法和教學模式。

參考文獻:

[1]鄧春健,李文生,楊亮,劉偉.“ARM 嵌入式系統”課程教學方法研究[J].計算機教,2010(3):94-96.

[2]邱鐵,吳國偉,劉曉艷.基于應用的高校嵌入式系統方向培養模式[J].計算機教育,2011(4):1-4.

[3]趙建勇,鄔惠峰,嵌入式實驗教學中液晶屏驅動實驗創新與實踐[J].杭州電子 科技大學學報(社會科學版), 2011(4):74-76.

[4]渠麗巖.讓學生在快樂中學習:談案例教學法在“單片機原理與應用”教學中 的應用[J].計算機教育,2009(18):93-95.

驅動程序設計范文5

關鍵詞:程序設計教學 分組 任務驅動程序設計課程要求學生具有較強的邏輯思維和細心制作的能力,計算機真實地檢驗學生的程序是否做得出來而且有無錯漏,這些要求使許多初學程序設計的學生有畏難情緒;傳統的大班式教學從講理論到上機編程驗證程序的教學方法,往往使學生所做的程序達不到學習內容要求的結果,學生編程練習錯漏多,學習效果參差不齊,制作軟件的創造能力得不到提升,為此我們上程序設計課采用任務驅動教學法。

“任務驅動”是一種建立在建構主義學習理論基礎上的教學方法,它將再現式教學轉變為探究式學習,學生的學習活動必須與大的任務或問題相結合,以探索問題來引動和維持學習者學習的興趣和動機,教師創建真實的教學環境,讓學生帶著真實的任務學習;在任務驅動教學法中學生必須擁有學習的主動權,教師則不斷地挑戰和激勵學生學習取得進步。

在程序設計課程的教學中,教師采用任務驅動教學法大多是把任務布置給學生并作簡單講解后,由學生自己看書學習完成任務,學生的創新能力和獨立分析問題、解決問題的能力明顯提高,但這種教學法也有缺陷,主要是學生自學太多,總體學習效率較低,學生各自為證統一性差,而且沒有改變不同層次學生學習的問題,鑒于這些原因,我們可把“任務驅動”和“分組”兩種教學法結合起來應用,教學效果會更好。

一、分組

1、分組前的工作

分組前要對全班各個學生的學習能力和知識基礎有全面深入的了解,要發現和培養學生中的學習帶頭人,這個過程往往要占去全部課程學習時間的1/3左右,在分組前的教學可用不分組的任務驅動教學法或講解——上機——點評歸納的教學法,邊教學邊了解學生,同時教學的進行使學生打下一定的理論基礎和制作技能。

2、怎樣分組

一個班級有幾十個學生,可分為若干個學習小組,但分組數不宜超過5組,組數太多使每組人數太少不便于對學生作統一要求,教師兼顧太多組亦會顧此失彼;每個小組要確立一至二名學習帶頭人作為學習小組長,同時兼顧學生間的友情和合作,方便互相學習,好中差三類學生適當搭配完成分組。

二、任務驅動下的分組學習

1、設置任務

教師精心設置任務是教學成功的第一步,如果要學習的新知識點多,我們可把教材中的每一章設計成一個大任務,再將大任務分為若干小任務,每一節又由一個或幾個小任務組成;在教材和各種參考資料中會有許多練習題,任務驅動學習要求精選習題配合新知識點學習,而不是做大量習題的“題海戰術”;如果已經把大多數的新知識點學完,我們就要設置綜合程序設計任務,培養學生綜合運用知識技能進行程序開發設計的能力。

對于同一章節的學習或同一部分內容所設置的任務,任務可準備多個,便于把任務分配到各個學習小組使用。

2、任務的分配

在分配任務到各個小組之前,教師應招集各個小組長進行研討學習,小組長在教師的提點下提出自己學習并完成任務的思路,教師甚至可以讓小組長先行去完成任務,使小組長能更好地帶領全組同學完成任務。當這些準備工作做好后,就可以把任務分發到各個小組的學生中去,要讓每個學生都明確完成任務要用到的新知識點和任務要求所要達到的目的,使他們有的放矢去學習并完成任務。各個小組間的任務可以相同,也可以不同。如果任務相同,在學生學習完成同一任務的過程中,教師把各個小組完成任務的優劣進行對比講評,在各個小組之間形成競爭,提高學習效率,同時使對全班學生的統一要求達到更好的效果。如果各個小組的任務不同,可以使全班分小組學習應用不同的知識點,各個小組完成任務后進行小組之間的交叉對比學習,最終使各個小組都能完成多個任務,全班學生接觸到更廣闊的知識面,取得更高的學習效率。

3、任務的完成

完成任務的過程就是學生學習運用知識點進行程序設計的過程,在這個過程中學生是學習的主角,因為教師在之前已經培訓了各個小組長,他們在各個小組學生學習完成任務的過程中要起到以點帶面的作用,其實由已經學會了的學生去教那些正在學習的學生會有不錯的教學效果。教師在這個過程中要做的就是督促和鼓勵學生去完成任務,當然,對于學生的典型問題教師可以分小組或在全班進行講解,保證不會因為“卡殼”造成學習效率的降低。

當各個小組的任務完成到一定程度時,教師要及時調用學生的程序,在全班進行演示點評,造成班級中各個小組之間一種競爭為了更好地完成任務的態勢,同時也是小組之間相互借鑒學習的機會。通過這樣的學習并完成任務的過程,各個學生按任務要求所做的作品既有個人的創造性,又能達到任務要求的統一標準,學生作品的水平普遍比其它教學方法要高得多。

4、任務的總結和測試

驅動程序設計范文6

關鍵詞:S3C4510B;HDLC;驅動程序

中圖分類號:TP316文獻標識碼:A文章編號:1009-3044(2007)06-11606-03

1 引言

HDLC作為一種基于點到點/多點的數據鏈路層協議,常常用來連接路由器和網關等網絡設備。三星公司生產的S3C4510B微處理器是當前應用非常廣泛的嵌入式微處理器,良好的性價比和強大的通信與網絡協議處理能力以及豐富的通信接口支持使其非常適合構建VOIP網關;特別是其具有HDLC功能模塊,因此可以通過它的一個HDLC接口來為VOIP網關和信令網之間提供鏈路支持。VOIP作為一種基于IP的數據傳輸技術,廣泛地利用Internet全球互連環境,將傳統的PSTN電話網和Internet網絡合二為一,因此可以有效地降低系統成本和管理成本。作為一種高效且經濟的數據和話音通信方式,它是當前技術研究和開發的熱點。本文介紹如何在S3C4510B開發板上實現HDLC控制器的驅動程序,從而為信令網和網關之間提供鏈路支持。

2 HDLC簡介

HDLC是一個在同步網上傳輸數據并面向位的數據鏈路層協議,具有透明傳輸、可靠性高、傳輸速率高以及靈活性高等特點。它采用點對點或多點(多路播送或一對多)連接的主/從結構,要求每個從站都唯一的地址,從站只有在允許通信時才能且只能和主站通信,這就消除了串行線路上由于幾個從站同時發送引起沖突的可能性。其它的通用的二層協議如SS#7、AppleTalk、LAPB、LAPD等都是基于HDLC及其幀結構的。HDLC幀結構如圖1所示。

圖1 HDLC幀結構

Flag (F):標志位,每個HDLC幀以8位序列(01111110)標志幀的開始和結束,這是HDLC中僅有的兩個包含連續六個1的可能組合。為了避免在其它域中出現這種組合,HDLC采用了一種叫作位插入的辦法實現組合,即每發現有連接五個1時便在下一位自動插入一個0,接收器在收到連續五個1之后又自動刪去插入的0。標志位除了標志幀的開始和結束外,還可用作時鐘同步,接收設備不斷地搜尋標志位,以實現幀同步,從而保證接收部分對后續字段的正確識別。另外,在幀與幀的空載期間,可以連續發送這種標志序列,用作時間填充。

Address (A) Field:目的地址位,用于指示報文發往何站。每個從站必須有唯一的地址,主站必須知道每個從站的指定地址。全“1”構成的地址在HDLC中定義為廣播地址,全“0”構成的地址在

HDLC中定義為無站地址,用于測試數據鏈路的狀態。

Control (C) Field:控制位,用于系統初始化、標志幀的序號,并在報文發送完成后通知從站響應,

對以前發送幀進行應答。尾隨控制段的信息通常用于報文傳輸、出錯報告和其它各種功能,這些功能由控制段的格式完成。有三種格式可供使用:報文格式、監控格式和無序號格式。

Information (I) Field:信息域,是可選的。如果信息存在,它必須有8位整數數量的長度。

Frame Check Sequence (FCS) Field:幀校驗位,長度為16位,幀校驗序列用于對幀進行循環冗余校驗,其校驗范圍從地址字段的第一比特到信息字段的最后一比特的序列,并且規定為了透明傳輸而插入的“0”不在校驗范圍內。

HDLC常被用來向X.25、ISDN和幀中繼網等提供信令和控制數據鏈路。

3 S3C4510B及其HDLC模塊

S3C4540B是三星公司生產的一種通用的16/32位嵌入式網絡控制器。它是以RISC體系結構為基礎并在片內集成有微處理器和多種外設接口的專用通信芯片,具有強大的通信和網絡協議處理能力,可廣泛應用于各種通信和網絡產品中。它主要由ARM7TDMI內核、2個通道的HDLC控制器、I2C總線和2個串行通道接口、一個MAC控制模塊組成,提供10MHz/100MHz以太網的自適應連接,對于網絡產品的開發設計提供了靈活的支持。

S3C4510B的HDLC(High- level Digital Link Controller)控制器擁有2個串行通道。HDLC模塊支持符合SDLC標準和HDLC標準的CPU/數據通道接口,包含2個DMA引擎;支持使用對應幀的緩沖區描述符結構,而且可以靈活地配置通道物理編碼模式(NRZ,FM,MAN),選擇本地或者外部時鐘;支持通過鎖相環路從接收數據流提取時鐘信號。

圖2是S3C4510B HDLC控制器功能結構,主要包括總線仲裁單元、DMA控制器、8字(1字=32 bit)的發送接收(Tx/Rx)FIFO、狀態/控制寄存器和物理收發器。總線仲裁單元負責向CPU申請系統總線;DMA控制器使用緩沖描述符在無CPU干預下控制數據幀的收發;8字FIFO結構對CPU和串行接口的數據進行立即存儲;物理收發器控制HDLC通道的運行模式、編解碼等;狀態/控制寄存器是運行的核心,程序設計人員通過設置,檢測這些寄存器控制數據的收發。

注:A/B為地址總線,D/B為數據總線,C為控制線

圖2 S3C4510B的HDLC模塊

4 驅動程序的設計思想及其實現

這里選擇uClinux作為本CPU板的操作系統。uClinux是一種可移植、可裁減的嵌入式操作系統,以其良好的可靠性和開放性被廣泛應用。因此,程序的設計必須按照這個操作系統的結構來構建。本文的主要目的是使用S3C4510B處理器的HDLC功能模塊,以支持uClinux操作系統下的HDLC通信,所以程序的設計主要圍繞這個目的進行,在此并沒有按照傳統驅動的模式構建驅動程序,而是直接對硬件進行操作。當驅動程序運行時,首先要進行HDLC通道的初始化,然后才開始執行收發功能,在這當中要加上中斷控制。按照這個程序的基本流程,具體的實現分為下面幾步

4.1 HDLC通道初始化

HDLC通道的初始化分為七個步驟;①HDLC通道復位,恢復其默認配置;②設置工作模式寄存器(HMODE)來配置HDLC工作模式;③設置控制寄存器(HCON)來控制HDLC通道的工作;④設置中斷控制寄存器(HINT)來控制HDLC通道的中斷產生;⑤設置站址寄存器(HSAR0-HSAR3)和站址屏蔽寄存器(HMASK),以完成接收操作的地址比較功能;⑥建立DMA方式的發送和接收BUFFER描述符鏈表結構,并初始化DMA發送BUFFER描述符指針寄存器(HDMATxPTR)和DMA接收BUFFER描述符指針寄存器(HDMARxPTR);⑦使能HDLC通道的收發功能。

4.2 HDLC通道數據發送及中斷處理的實現

4.2.1數據發送

DMA方式下HDLC通道的數據發送通過以下幾個步驟實現:

(1)讀取發送幀描述符指針寄存器HDMATxPTR,得到當前發送幀描述符的地址,進而得到整個發送幀描述符的內容。

(2)得到發送幀描述符中幀數據BUFFER起始地址。

(3)將準備好的HDLC幀拷貝到BUFFER中。

(4)設置當前幀描述符中的相應控制位。

(5)將發送幀描述符的OWERSHIP位設置為DMA所有。

(6)使能HDLC的DMA發送。

完成上面各步驟后,HDLC通道的DMA機制會自動將BUFFER中的數據拷貝到HDLC通道TxFIFO中發送出去。一幀發送完畢后,S3C4510B自動將已使用的發送BUFFER描述符的OWERSHIP位設置為CPU所有,并將幀描述符指針寄存器HDMATxPTR中的內容更新為下一個未使用的發送BUFFER描述符地址。

4.2.2 數據發送的中斷處理

當一幀數據通過DMA方式發送完畢,或者發送過程中出現了可引起中斷的異常情況,此時軟件會進入中斷處理程序。引起中斷的情況由中斷控制寄存器的設置決定。在編程實現中,HDLC通道的中斷處理主要完成以下工作:

(1)進入中斷后,首先清除S3C4510B中斷指示寄存器INTPEND中相應的標志位。

(2)如果DMA發送成功,則進行數據幀發送成功狀態計數,并清除HDLC通道狀態寄存HSTAT中的相應狀態位。如果發送出現異常,則完成相應的異常狀態計數,并清除HDLC通道狀態寄存器HSTAT中的相應位。其中有兩個異常會影響以后的DMA操作,a.發送下沖異常(TxU),發生此異常時,處理器會自動禁止DMA發送功能,因此下一次發送時必須重新使能DMA發送功能;b.下一個發送幀描述符指針為空異常(DTxNL),發生此異常時,說明建立的DMA發送BUFFER描述符鏈表結構出現了錯誤,因此需要重新初始化DMA發送BUFFER描述符鏈表結構。

(3)做完上述處理可關閉HDLC通道的DMA發送功能,等待有數據需要發送時再重新打開,也可以不關閉。

4.3 HDLC通道數據接收及中斷處理的實現

4.3.1 數據接收

DMA方式下HDLC通道的數據接收工作主要在HDLC通道初始化和DMA接收中斷處理中完成.在編程實現中,HDLC通道數據接收主要完成以下工作:

(1)通道初始化階段,我們建立并初始化了HDLC接收BUFFER描述符鏈表結構,并將鏈表頭節點的地址寫入到HDLC接收BUFFER描述符指針寄存器HDMARxPTR,這是正確完成DMA方式接收的前提,下面的工作都是在這個前提下自動完成的。

(2)當有數據到來時,DMA機制會從HDMARxPTR指向的接收BUFFER描述符中找到接收BUFFER起始地址,然后把收到的數據寫入到BUFFER中。

(3)如果接收無誤,S3C4510B自動更新HDMARxPTR寄存器的值,使其指向下一個還未使用的接收BUFFER描述符,以備下一次接收使用。使用過的接收BUFFER描述符的OWERSHIP位將自動設置為CPU所有,因此為了能再次使用這個接收BUFFER描述符,必須將它的OWERSHIP位重置為DMA所有。

4.3.2數據接收的中斷處理

DMA方式下HDLC通道接收完一幀數據,或者接收過程中出現了可引起中斷的異常情況,此時軟件會進入中斷處理程序。引起中斷的情況由中斷控制寄存器的設置決定。在我們的編程中,HDLC通道接收中斷處理主要完成以下工作:

(1)進入中斷后,首先清除S3C4510B中斷指示寄存器INTPEND中相應的標志位。

(2)如果DMA接收正確,則進行數據幀接收成功狀態計數,并清除HDLC通道狀態寄存器HSTAT中的相應狀態位。對接收到的數據幀作相應的處理后,要重新將是用過的接收BUFFER描述符的OWERSHIP位設置為DMA所有。

(3)如果接收出現異常,則完成相應的異常狀態計數,并清除HDLC通道狀態寄存器HSTAT

中的相應位。其中有兩個異常會影響以后的DMA操作,a.DMA接收BUFFER描述符不屬于DMA所有(DRxNO);b.DMA接收BUFFER描述符指針空(DRxNL)。發生這兩個異常時,說明接收BUFFER描述符雙向環形鏈表結構出現錯誤,處理器會自動禁止DMA發送功能,因此建議重構接收BUFFER描述符雙向環形鏈表結構并重新使能DMA發送功能。

5 總結

S3C4510B是一款性價比很高的ARM處理器,功能豐富,編程簡單,并且可以配合幾種嵌入式實時操作系統,如pSOS,NUCLEUS等。我們使用S3C4510B和uClinux操作系統,完成了底層控制軟件,經過調試,該軟件性能穩定。

隨著各種電子,通訊產品對性能要求的日益提高,基于先進的ARM架構的各種32位微處理器也將得到越來越廣泛的應用。因此,掌握了ARM處理器的使用和編程方法,必然能在工作中事半功倍,得到良好的結果和收益。

參考文獻:

[1]三星公司.著.三星S3C4510B用戶手冊[M].北京:北京三星公司,1999.

[2]李駒光.ARM應用系統開發詳解[M].北京:清華大學出版社,2004.

主站蜘蛛池模板: 午夜精品久久久久久久99热| 国产精品麻豆va在线播放| 国产精品一区二区久久不卡| 九九国产精品无码免费视频| 色丁香婷婷综合久久| 亚洲精品自在在线观看| 久久久久成人精品无码| 亚洲无线码在线一区观看| 99久久亚洲综合精品成人| 午夜精品久久久久9999高清| 国产精品麻豆成人av电影艾秋| 日本熟妇色xxxxx日本免费看| 日韩亚洲精品国产第二页| 草草浮力地址线路①屁屁影院| 麻豆一二三区精品蜜桃| 色欲色香天天天综合网www| 免费人成再在线观看视频| 非洲黑人性xxxx精品| 日本少妇裸体做爰高潮片| 99久久婷婷国产综合精品青草免费| 久久精品亚洲中文字幕无码麻豆| 自偷自拍亚洲综合精品第一页| 亚洲欧美日韩综合一区二区| 国产精品视频网国产| 国内精品久久久久久不卡影院| 国模精品一区二区三区| 国语对白做受xxxxx在线中国| 亚洲av无码潮喷在线观看| 国产亚洲精品久久久久久动漫| 亚洲最大av资源网在线观看| 亚洲精品欧美日韩一区| 中文字幕无码乱人伦免费| 日韩精品免费无码专区| 小??戳进?无遮视频| 亚洲欧美丝袜精品久久中文字幕| 亚洲国产日韩a在线播放| 国产精品人妻久久毛片高清无卡| 少妇伦子伦情品无吗| 99热成人精品国产免费| 成人免费观看的a级毛片| 日本欧美大码a在线观看|