娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

S3C2440 DMA 驅動示例

發布者:溫暖的擁抱最新更新時間:2024-07-23 來源: cnblogs關鍵字:S3C2440  DMA 手機看文章 掃描二維碼
隨時隨地手機看文章

將 DMA 抽象為一個字符設備,在初始化函數中調用


void *dma_alloc_writecombine(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp)

函數來分配兩段物理地址連續的空間,一段作為源空間,一段作為目的空間。


然后將物理地址進行 ioremap 供驅動使用,最后調用 register_chrdev 來注冊這個字符設備。


DMA 的 regs:

#define DMA0_BASE_ADDR  0x4B000000

#define DMA1_BASE_ADDR  0x4B000040

#define DMA2_BASE_ADDR  0x4B000080

#define DMA3_BASE_ADDR  0x4B0000C0


struct s3c_dma_regs {

unsigned long disrc;

unsigned long disrcc;

unsigned long didst;

unsigned long didstc;

unsigned long dcon;

unsigned long dstat;

unsigned long dcsrc;

unsigned long dcdst;

unsigned long dmasktrig;

};

配置 DMA(通過 ioctl 調用)

    ev_dma = 0;


    /* 把源,目的,長度告訴 DMA */

    dma_regs->disrc      = src_phys;            /* 源的物理地址 */

    dma_regs->disrcc     = (0<<1) | (0<<0);     /* 源位于 AHB 總線, 源地址遞增 */

    dma_regs->didst      = dst_phys;            /* 目的的物理地址 */

    dma_regs->didstc     = (0<<2) | (0<<1) | (0<<0);     /* 目的位于 AHB 總線, 目的地址遞增 */

    dma_regs->dcon       = (1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(0<<20)|(BUF_SIZE<<0);  /* 使能中斷,單個傳輸,軟件觸發, */

    

    /* 啟動 DMA */

    dma_regs->dmasktrig  = (1<<1) | (1<<0);

    

    /* 如何知道 DMA 什么時候完成 ? */

    /* 休眠 */

    wait_event_interruptible(dma_waitq, ev_dma);

    

    if (memcmp(src, dst, BUF_SIZE) == 0)

    {

    printk('MEM_CPY_DMA OKn');

    }

    else

    {

    printk('MEM_CPY_DMA ERRORn');

    }

當 DMA 開始工作時會休眠一段時間,直到復制完成后觸發中斷來喚醒。


static irqreturn_t s3c_dma_irq(int irq, void *devid)

{

/* 喚醒 */

ev_dma = 1;

    wake_up_interruptible(&dma_waitq);   /* 喚醒休眠的進程 */

return IRQ_HANDLED;

}

可能這樣的實驗并不會看出 DMA 的作用,我們可以與普通的復制做一下速度上的對比。例如用 memcpy 來與 DMA PK 一下速度就能看出效果來。


關鍵字:S3C2440  DMA 引用地址:S3C2440 DMA 驅動示例

上一篇:S3C2440時鐘體系
下一篇:s3c2440的IIS的控制模塊

推薦閱讀最新更新時間:2025-04-23 18:16

關于STM32串口使用DMA的教程
1 前言 直接存儲器訪問(Direct Memory Access),簡稱DMA。DMA是CPU一個用于數據從一個地址空間到另一地址空間“搬運”(拷貝)的組件,數據拷貝過程不需CPU干預,數據拷貝結束則通知CPU處理。 因此,大量數據拷貝時,使用DMA可以釋放CPU資源。DMA數據拷貝過程,典型的有: 內存— 內存,內存間拷貝 外設— 內存,如uart、spi、i2c等總線接收數據過程 內存— 外設,如uart、spi、i2c等總線發送數據過程 2 串口有必要使用DMA嗎 串口(uart)是一種低速的串行異步通信,適用于低速通信場景,通常使用的波特率小于或等于115200bps。 對于小于或者等于
[單片機]
關于STM32串口使用<font color='red'>DMA</font>的教程
s3c2440裸機開發調試環境(MDK4.72,Jlink v8,mini2440)
我的開發環境:windows 7 32位,J-linkv8,mini2440開發板一塊。最后選擇了:MDK4.72版本,J-ink v8的當前最新版本J-linkARM v4.94。 1)打開Keil uVision4新建一個工程: 2)新建一個目錄用于存放我們的工程文件,這樣我用新建一個test目錄:并且取工程名為test并保存: 3)接下來選擇CUP database:我們選擇samsung的S3C2440A,點擊OK;之后會出現第二個圖問你是否拷貝'S3C2440.s'到工程文件夾并加入到工程里,S3C2440.s是啟動代碼我們選擇YES 4)然后我們需要對S3C2440.s進行一些
[單片機]
<font color='red'>s3c2440</font>裸機開發調試環境(MDK4.72,Jlink v8,mini2440)
mini2440 簡單的dma工作原理實驗
以驅動方式測試dma的工作原理,用戶層程序不停調用ioctl觸發驅動里面完成的dma操作,把內存的數據塊從一個連續地址搬到另一個連續地址,然后用memcmp測試搬移后的數據和搬移前是不是完全一樣。 簡單的驅動代碼: #include linux/module.h #include linux/kernel.h #include linux/device.h #include linux/fs.h #include linux/mm.h #include linux/init.h #include linux/delay.h #include linux/interrupt.h #include linux/
[單片機]
mini2440 簡單的<font color='red'>dma</font>工作原理實驗
s3c2440裸機-異常中斷(二. und未定義指令異常)
1._und(未定義指令異常)介紹 我們之前分析過5種異常,那么如何進入未定義指令異常,當然是cpu讀取指令發生異常,出現了指令解析異常。 我們先來看下當cpu解析到什么樣的指令才會觸發未定義指令異常呢? 從上面的arm指令格式中可知,只要指令碼屬于劃線的格式,就屬于未定義指令異常。 2.匯編向c函數傳參 我們知道匯編給C語言函數傳參是通過r0,r1,...通過堆棧的方式去傳遞的參數,比如r0=1, r1=2;那么在被調用的c函數中argv0就是r0, argv1就是r1...,那么我們如果通過匯編給C函數傳遞字符串呢? 我們可以通過這樣聲明und_string為一個字符串: und_string: .string unde
[單片機]
<font color='red'>s3c2440</font>裸機-異常中斷(二. und未定義指令異常)
STM32的ADC多路采集 DMA傳輸 數據錯位
解決方法:不要采用連續轉換模式 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; 需要時才實施轉換 ADC_SoftwareStartConvCmd(ADC1, ENABLE); 轉換后取消轉換 ADC_SoftwareStartConvCmd(ADC1, DISABLE); 經過測試能夠解決stm32 adc dma多通道采樣 數據錯位. DMA為循環模式更改為非循環模式,將開啟DMA傳輸和開啟ADC規則轉換這兩句話單獨拿出。 每一次DMA傳輸都在特定條件下,由我們自己開啟。在每一次DMA傳輸完成進入中斷之前 都將AD轉換器和DMA傳輸關閉,切換通道完成之
[單片機]
STM32的ADC多路采集 <font color='red'>DMA</font>傳輸 數據錯位
U-boot在S3C2440上的移植詳解(五)
一、移植環境 主 機:VMWare--Fedora 9 開發板:Mini2440--64MB Nand,Kernel:2.6.30.4 編譯器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2009.08.tar.bz2 二、移植步驟 9)實現u-boot對yaffs/yaffs2文件系統下載的支持。 注意:此篇對Nand的操作是基于MTD架構方式,在“u-boot-2009.08在2440上的移植詳解(三)”中講到過。 通常一個Nnad Flash存儲設備由若干塊組成,1個塊由若干頁組成。一般128MB以下容量的Nand Flash芯片,一頁大小為528B,被依次分為2
[單片機]
U-boot在<font color='red'>S3C2440</font>上的移植詳解(五)
S3C2440的中斷寄存器的分類及中斷的過程分析
S3C2440一共有60個中斷源,其中有15個子中斷源,它們與SUBSRCPND寄存器中的每一位相對應,其他45個中斷源與SRCPND中的每一位相對應。要注意的是EINT4~7對應的是同一位SRCPND,而EINT8~23對應的也是SRCPND一位。 1 S3C2440的中斷寄存器 中斷分兩大類:外部中斷和內部中斷。 1.1 外部中斷寄存器 24個外部中斷占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用這些腳做中斷輸入,則必須配置引腳為中斷,并且不要上拉。具體可參考datesheet數據手冊。 寄存器: EXTINT0-EXTINT2:分別設置EINT0—EINT7、E
[單片機]
<font color='red'>S3C2440</font>的中斷寄存器的分類及中斷的過程分析
S3C2440開發板學習——openjtag下載BootLoader
首先,將oflash.exe和FTD2XX.dll放置于C:WindowsSystem32文件夾中,使Dos可以執行oflash命令; 其次,在DOS命令中進入BootLoader所在的文件夾,使用cd+絕對路徑,選擇uboot.bin的文件路徑; 然后,執行oflash命令,選擇eeprom、IC、address、下載程序(u-boot.bin)等參數; 最后,啟動程序程序通過openjtag口,將程序下載到開發板。 注意問題: 1、nand/nor flash的異同。相似點:nor flash 和nand flash均屬于eeprom,可以進行反復的程序擦拭和讀寫。區別點
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 阳信县| 安新县| 武义县| 孝义市| 永新县| 遵化市| 聂荣县| 福泉市| 二连浩特市| 建平县| 察雅县| 科技| 都兰县| 商城县| 逊克县| 宜宾县| 通辽市| 东兰县| 石屏县| 龙泉市| 雷州市| 博客| 报价| 财经| 屏东市| 沛县| 休宁县| 长丰县| 铜陵市| 抚顺县| 山东省| 禹州市| 沾化县| 依兰县| 怀远县| 桦甸市| 科技| 曲阳县| 军事| 武胜县| 罗平县|