tq2440 的dma裸機驅動

2021-07-04 11:17:39 字數 1396 閱讀 9047

dma是一種提高cpu效率的工具。如果讓cpu去負責搬運資料,效率是十分低下的,因為在這個過程中,cpu就只能做這麼一件事。因此dma就應運而生。只要告訴dma,要搬運的資料源位址,以及要搬運到**去的位址,何種方式,使能它,dma就會獲取匯流排控制權,自動地搬運資料,從而解放cpu,提高效率。

tq2440的dma裸機驅動,按以下方式進行初始化:

//初始化原位址

//初始化目的位址

//dma 控制方式初始化

//使能dma

參照2440晶元手冊,dma共有4個通道,我們選擇將字串資料傳輸到串列埠上(uart0),對應通道ch-0.

each dma channel has nine control registers.ch-0 有9個暫存器,但在本次裸機驅動中,並不需要全部用上。(用到再來細究)

disrcn 是乙個source register ,需要給它傳遞資料源位址;

disrccn 是source control register ,通過對此register進行操作,控制某些方式。

它的[0]位為 select the address increment ,賦值為0,表示disrcn在傳輸完一次之後,位址會增加,指向下乙個位址單元

第[1]位為選擇source的匯流排結構,我們要傳遞的資料在記憶體中,記憶體是ahb匯流排,故在這兒select  0.

didstn 是乙個 destination register,傳遞給它的值,應該是乙個位址,此處應為我們的uart0的傳送緩衝區位址,utxh0。

didstc0 ,destination control register ,控制方式用。

第[2]位,但傳送剩餘個數為0時,發生一次中斷,因此select 0

第[1]位,uart0 處在apb匯流排上,因此選擇1

第[0]位,uart0的utxh0位址應該固定住,因為我們定向輸出到串列埠,所以select 1

第三步,dma控制方式初始化

dconn control register .

[24-26]位,select dma request source for each dma,此處為001,uart0

[23]  位 為,1.

[22] ,dma傳送完畢後就關閉,故選 1.

[20-21],預設傳送位元組,byte。

[19-0],傳送的資料個數

第四步,使能dma,dmaskirign,把該暫存器的第[1]位置 1 。

一下為裸機的一些**。

11 char *buf = "hello world!\n";

12 void dma_init()

13 27

28 void dma_start()

29

《TQ2440載入Hello world驅動模組》

經過將近乙個月都時間終於按照手冊把linux核心移植完了,接下來要開始驅動模組的移植了,在網上查了一些資料,總結如下 目標平台 tq2440 arm9 核心版本 linux 2.6.25 前提 宿主機上已安裝交叉編譯工具,因為這個在linux核心移植的時候就使用過了,這裡就不說了。進入正題 1 首先...

TQ2440裸機實驗(鍵盤和LED結合)

import main area init,code,readonly 程式入口的地方 entry start ldr r0,0x56000010 watchdog暫存器位址 mov r1,0x0 str r1,r0 寫入0,禁止watchdog,否則cpu會不斷重啟 ldr sp,1024 4 設...

TQ2440背光控制

控制lcd背光就是控制s3c2440的lcd控制的lcd pwren腳lcdcon5暫存器pwren位控制lcd是否輸出。對linux 2.6.30.4核心進行移植。新建乙個backlight.c檔案放到 drivers video 目錄下。內容如下 include include include ...