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

18.DMA-6410

發布者:科技革新者最新更新時間:2024-10-31 來源: cnblogs關鍵字:DMA 手機看文章 掃描二維碼
隨時隨地手機看文章

對于6410的DMA控制器和2440的DMA控制器有很大不一樣。

S3C6410中DMA操作步驟:

1、決定使用安全DMAC(SDMAC)還是通用DMAC(DMAC);

2、開啟DMAC控制,設置DMAC_Configuration寄存器

3、清除傳輸結束中斷寄存器和錯誤中斷寄存器;

4、選擇合適的優先級通道;

5、設置通道的源數據地址和目的數據地址(設置DMACC_SrcAddr和DMACC_DestAddr);

6、設置通道控制寄存器0(設置DMACC_Control0);

7、設置通道控制寄存器1,(傳輸大小,設置DMACC_Control1);

8、設置通道配置寄存器;(設置DMACC_Configuration)

9、使能相應通道(設置DMACC_Configuratoin);

 

1、決定使用安全DMAC(SDMAC)還是通用DMAC(DMAC);

在6410的DMA控制器里有四個控制器:

這里使用的是UART0的源,而該源可以還有的控制器有兩個:DMA0和SMDA0:

那么到底使用的哪個寄存器呢?是通過DMA_SEL這個寄存器來進行選擇的:

這里使用的是UART0,然后是通過SDMA0寄存器控制的。所以設置DMA_SEL的值為0即可:

 

2、開啟DMAC控制,設置DMAC_Configuration寄存器;

第一步選擇好了DMA寄存器后,接著就是使能DMA控制。使能是通過DMAC_Configuration寄存器:

由該寄存器的描述知道,要使能DMA只需將DMAC_Configuration寄存器的[0]位設置為1即可:

3、設置通道的源數據地址和目的數據地址(設置DMACC_SrcAddr和DMACC_DestAddr);

這一步跟2440是一樣的,都是設置DMA的源寄存器和DMA的目的寄存器。由于我們這里是將內存里的字符串送到串口,所以源寄存器地址是在內存,目的寄存器的地址是在串口0中寄存器的地址。實現代碼:

寄存器DMACC0SrcAddr參數:

 

4、設置通道控制寄存器0(設置DMACC_Control0);

[25]位中,由于我們的串口是外設,所以[25]位的值是1。然后在我們的源地址寄存器里,當輸出一個字符是,是會增長里面的參數,然后繼續輸出的。所以[26]位的值是1。[31]位是中斷的運行位,也是設置位1。最后設置的參數:

5、設置通道控制寄存器1,(傳輸大小,設置DMACC_Control1);

主要是設置傳輸數據的大小的:

實現:

6、設置通道配置寄存器;(設置DMACC_Configuration)

    

在上面的寄存器里,要考慮的位是[6]位、[11]位、[14]、[15]位。其中[6]位是選擇DMA的目的地址是不是一個外設,我們這里是串口,就是一個外設,所以是1。[11]位是流控制位和tranfer type:

我們這里是從內存到串口,所以是001.

[14]位和[15]位是中斷屏蔽的,設置為1.

最后實現的函數:

7、使能相應通道(設置DMACC_Configuratoin);

 

上面就設置好了使能6410的DMA通道的操作。在main.c調用:

Make編譯:


關鍵字:DMA 引用地址:18.DMA-6410

上一篇:19.液晶屏的原理
下一篇:17.DMA-2440

推薦閱讀最新更新時間:2025-06-07 23:47

Ubuntu下移植內核到OK6410開發板
環境:Win7+virsualBox+ubuntu12.04+ok6410開發板 一,下載源碼:我這里下載的版本是--linux-3.12.7 http://www.kernel.org/ 二,解壓內核: tar -xvf linux-3.12.7-tar.xz 三,更改權限(最好賦予全部權限) sudo chmod -R 777 linux-3.12.7/* 四,修改源碼(針對基于smdk6410架構的ok6410開發板) 1,在arch/arm/mach-s3c64xx/目錄下的mach-smdk6410.c 復制一份在當前文件下命名為mach-ok6410.c wu@wu-VirtualBox:/opt
[單片機]
Ubuntu下移植內核到OK<font color='red'>6410</font>開發板
Linux-2.6.39在Tiny6410上的移植 - 外設驅動移植
Linux內核版本號:linux 2.6.39 交叉編譯工具:arm-linux-gcc 4.5.1 Linux內核下載:www.kernel.org 開發板:友善之臂Tiny6410 LCD:友善之臂S70 一、移植LED驅動 打開arch/arm/mach-s3c64xx/mach-mini6410.c添加下列代碼: 1 static struct gpio_led tiny6410_gpio_led = { 2 = { 3 .name = led1 , //設備名 4 .gpio = S3C64XX_GPK(4), //GPK4 5 .act
[單片機]
開發環境搭建 (一) OK6410A 開發環境 3 更改環境 FAIL
從nand中 的 u-boot(1.1.6) 啟動 u-boot load sd卡中 第1個分區(被格式化為fat16)的kernel(4.0),然后kernel 啟動. kernel 掛載 sd卡中的第2個分區(被格式化為ext3)為根文件系統,并執行 /linuxrc /linuxrc 作為 進程1 啟動 u-boot 與 啟動模式 uboot(1.1.6) 的配置 forlinx_nand_ram256_config sd卡分區1(從0開始,32M),fat16,存儲kernel , setenv bootcmd fatload mmc 0:1 0x50008000 zImage; bootm
[單片機]
OK6410A 開發板 (八) 37 linux-5.11 OK6410A 內存管理第五階段
vmalloc vmalloc_init for_each_possible_cpu(i) { // vfree_deferred 類型變量的 鏈表 和 工作任務 free_work // free_work用于vfree執行時延遲異步釋放vmalloc內存 struct vfree_deferred *p; ... // vmap_block_queue 類型變量的鏈表和鎖 // vmap_block_queue 是 非連續內存塊隊列管理結構 struct vmap_block_queue *vbq; ... } // 將vmalloc_init之前的過程中分配的vma
[單片機]
OK6410A 開發板 (八) 52 linux-5.11 OK6410A linux內存管理相關配置
arm32 要不要配置 CONFIG_HIGHMEM 前提為 vmalloc_min 為 0xf000 0000 , 且 內核空間大小:用戶空間大小 = 1:3 如果內存 = 768MB 想全部內存做 線性映射 不配置CONFIG_HIGHMEM //配置了也無所謂,如果是 vmalloc(基于vmap)會做映射,這樣就是雙重映射(同一個物理頁,線性映射一次,vmap映射一次) 想一部分內存 做 線性映射,一部分做高端內存映射 配置 CONFIG_HIGHMEM 并將 vmalloc_min 設置為比0xf000 0000更低的值(具體取決于一部分與另一部分的比例) // 舉個例子,內存有7
[單片機]
linux中觸摸屏驅動的實現(3)——基于s3c6410處理器
1、上一篇分析的是兩個中斷處理函數中的其中一個觸摸屏中斷,現在來分析另外一個ADC中斷,對應的中斷函數是stylus_action。當觸摸屏在自動X/Y位置轉換模式和獨立的X/Y位置轉換模式時,當坐標數據轉換之后會產生IRQ_ADC中斷,進而調用stylus_action函數,此函數源碼如下: static irqreturn_t stylus_action(int irqno, void *param) { unsigned long data0; unsigned long data1; //printk( stylus_action.n ); data0 = readl(ts_base+S3C_ADCDAT0);
[單片機]
基于S3C6410的ARM11學習(十一) DDR初始化
之前的程序都是在內部的stepping stone中運行的。但是stepping stone的大小是很小的。ARM11只有8K的大小。這么小的空間,要運行大型程序肯定是不行的。所以就需要外部的存儲器。ARM11的外部存儲器用的是ddr。所以就要對ddr進行初始化,同時將代碼拷貝到ddr中。 先看看S3C6410以nandflash的啟動。在上電的時候,CPU會自動把外部的nandflash的前8k數據拷貝到內部的stepping stone中。Stepping stone的地址是從0x0c000000開始的。然后CPU將stepping stone給映射到0x00000000地址處,然后CPU跳轉到0地址處執行第一條代
[單片機]
基于S3C<font color='red'>6410</font>的ARM11學習(十一) DDR初始化
STM32 DMA
DMA,全稱為:Direct Memory Access,即直接存儲器訪問,DMA 傳輸將數據從一個地址空間復制到另外一個地址空間。當 CPU 初始化這個傳輸動作,傳輸動作本身是由DMA 控制器 來實行和完成。典型的例子就是移動一個外部內存的區塊到芯片內部更快的內存區。像是這樣的操作并沒有讓處理器工作拖延,反而可以被重新排程去處理其他的工作。 DMA 傳輸對于高效能嵌入式系統算法和網絡是很重要的。DMA 傳輸方式無需 CPU 直接控制傳輸,也沒有中斷處理方式那樣保留現場和恢復現場的過程,通過硬件為 RAM 與 I/O 設備開辟一條直接傳送數據的通路,能使 CPU 的效率大為提高。DMA 是個非常好的功能,它不但能減輕 CPU 負擔
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 鲜城| 防城港市| 汝城县| 中宁县| 浙江省| 永嘉县| 壤塘县| 烟台市| 华蓥市| 桃园县| 修文县| 朔州市| 铜鼓县| 周至县| 江华| 兴化市| 灌南县| 临沭县| 竹山县| 砀山县| 平阴县| 玉环县| 延寿县| 永吉县| 清水河县| 抚顺县| 锡林浩特市| 宁津县| 珲春市| 浦城县| 旌德县| 高清| 普定县| 成都市| 长沙市| 赣州市| 深水埗区| 洞头县| 西宁市| 自贡市| 鹤岗市|