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)
注册成功
在这里插入图片描述

相关文章
|
25天前
stm32f4外设学习篇(代码集合)(三)
stm32f4外设学习篇(代码集合)
|
25天前
|
芯片
stm32f4外设学习篇(代码集合)(一)
stm32f4外设学习篇(代码集合)
|
7月前
|
Linux Shell
内核调试之devmem直接读写寄存器
内核调试之devmem直接读写寄存器
|
9月前
|
Linux
Linux驱动操作地址(寄存器)的一些方式
Linux驱动操作地址(寄存器)的一些方式
111 0
|
SoC C语言
内核笔记](五)——devmem读写寄存器调试
内核笔记](五)——devmem读写寄存器调试
1055 0
|
C语言 芯片
复习单片机:中断系统(内含1.中断概念+2 中断结构及相关寄存器)(注:相关寄存器是重点)
复习单片机:中断系统(内含1.中断概念+2 中断结构及相关寄存器)(注:相关寄存器是重点)
206 0
复习单片机:中断系统(内含1.中断概念+2 中断结构及相关寄存器)(注:相关寄存器是重点)
|
存储 内存技术
STM32:DMA直接存储器存储(内含:1.DMA简介+2.存储器映像+3.DMA框图+4.DMA基本结构图+5.数据宽度对齐+6.两种经典转运情景)
STM32:DMA直接存储器存储(内含:1.DMA简介+2.存储器映像+3.DMA框图+4.DMA基本结构图+5.数据宽度对齐+6.两种经典转运情景)
220 0
STM32:DMA直接存储器存储(内含:1.DMA简介+2.存储器映像+3.DMA框图+4.DMA基本结构图+5.数据宽度对齐+6.两种经典转运情景)
SMT32:DMA代码部分(内含:1.接线图/实物图+2.代码部分+3.补充的DMA数据传输部分库函数)
SMT32:DMA代码部分(内含:1.接线图/实物图+2.代码部分+3.补充的DMA数据传输部分库函数)
114 0
SMT32:DMA代码部分(内含:1.接线图/实物图+2.代码部分+3.补充的DMA数据传输部分库函数)
|
关系型数据库 Windows
驱动开发:内核读取SSDT表基址
在前面的章节`《X86驱动:挂接SSDT内核钩子》`我们通过代码的方式直接读取 `KeServiceDescriptorTable` 这个被导出的表结构从而可以直接读取到SSDT表的基址,而在Win64系统中 `KeServiceDescriptorTable` 这个表并没有被导出,所以我们必须手动搜索到它的地址。
238 0
驱动开发:内核读取SSDT表基址