DMA寄存器与代码结合文档笔记

简介: DMA寄存器与代码结合文档笔记

关键点,查找文档,找出DMA要用到的寄存器,然后通过struct结构体描述这些寄存器,再通过ioremap映射地址,配置寄存器,
申请中断。

参考的文档S3C2440.pdf

S3C2440A SPECIAL REGISTERS

下面的内容是从文档的第一章中找到的,对应的代码如下
在这里插入图片描述

DMA章节

在这里插入图片描述
在这里插入图片描述
因此初始化:(根据寄存器的描述,配置相关寄存器,仔细看还比较简单,关键是理解文档的意思)

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);

寄存器配置

可以参考下面的写法
在这里插入图片描述

代码

顺势定义 : static volatile struct s3c_dma_regs *dma_regs;
相关的操作,物理地址映射:

define DMA0_BASE_ADDR 0x4B000000

define DMA1_BASE_ADDR 0x4B000040

define DMA2_BASE_ADDR 0x4B000080

define DMA3_BASE_ADDR 0x4B0000C0

dma_regs = ==ioremap==(DMA3_BASE_ADDR, sizeof(struct s3c_dma_regs));

中断处理

IRQ_DMA3 是应该linux系统中定义的
在这里插入图片描述

查看中断的使用情况

在这里插入图片描述
request_irq(IRQ_DMA3, s3c_dma_irq, 0, "s3c_dma", 1)
注册成功
在这里插入图片描述

相关文章
|
6月前
|
C语言 芯片 内存技术
STM32F103标准外设库——寄存器 (二)
STM32F103标准外设库——寄存器 (二)
206 1
STM32F103标准外设库——寄存器 (二)
|
20天前
【寄存器开发速成】半小时入门STM32寄存器开发(二)
【寄存器开发速成】半小时入门STM32寄存器开发(二)
|
20天前
|
芯片
【寄存器开发速成】半小时入门STM32寄存器开发(一)
【寄存器开发速成】半小时入门STM32寄存器开发(一)
|
3月前
|
开发框架 C语言 开发者
STM32寄存器操作、模板构建
【8月更文挑战第23天】本文档介绍STM32中的寄存器操作方法与模板构建技巧。寄存器是STM32控制内外设的核心,通过直接读写特定内存地址来进行操作。以配置GPIO为例,需定位寄存器地址并写入适当值。文档还提供了一个基本的代码模板,包括包含头文件、时钟配置、外设初始化及主函数流程,帮助开发者快速搭建开发框架,并强调了参考手册的重要性以确保正确使用。
8086 汇编笔记(十):标志寄存器
8086 汇编笔记(十):标志寄存器
|
4月前
stm32f407探索者开发板(九)——寄存器地址名称映射
stm32f407探索者开发板(九)——寄存器地址名称映射
|
6月前
|
存储
8086 汇编笔记(二):寄存器(内存访问)
8086 汇编笔记(二):寄存器(内存访问)
|
6月前
LabVIEW编程NI 6602计数器DMA冲突例程与相关资料
LabVIEW编程NI 6602计数器DMA冲突例程与相关资料
53 7
|
Windows
[笔记] Windows内核课程:保护模式《二》段寄存器介绍
[笔记] Windows内核课程:保护模式《二》段寄存器介绍
|
Linux
Linux驱动操作地址(寄存器)的一些方式
Linux驱动操作地址(寄存器)的一些方式
152 0