DMA学习
来源:互联网 发布:js 滚动字幕特效 编辑:程序博客网 时间:2024/06/06 06:52
一、通过串口发送解析为什么需要DMA
之前的程序串口如果要发送一个字符串,就需要调用cpu不断对UTXH0输入字符,达到输出字符串。
但是这样占用了太多CPU的时间,显然是一个低效率的方式。所以可以用DMA,让CPU告诉DMA哪些数据需要对I/O口操作,DMA照着执行就好了。
这样就可以释放CPU的使用。
二、DMA控制器
2.1 通道数
The S3C2440A supports four-channel DMA controller located between the system bus and the peripheral bus.
2.2 请求源
四个通道分别可以设置不同的请求源:
2.3 基本时序
nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输。
2.4 工作模式
Demond模式:
如果DMA完成一次请求后如果Request仍然有效,那么DMA就认为这是下一次DMA请求,并立即开始下一次的传输
Handshake模式:
DMA完成一次请求后等待Request信号无效,如果Request无效,DMA会无效ACK两个时钟周期,再等待下一次Request。
三、2440DMA程序设计
这样在main.c中调用dma_init()和dma_start();并不能实现hello world!。
在uart.c中的发送模式需要修改成DMA模式
之前的程序串口如果要发送一个字符串,就需要调用cpu不断对UTXH0输入字符,达到输出字符串。
但是这样占用了太多CPU的时间,显然是一个低效率的方式。所以可以用DMA,让CPU告诉DMA哪些数据需要对I/O口操作,DMA照着执行就好了。
这样就可以释放CPU的使用。
二、DMA控制器
2.1 通道数
The S3C2440A supports four-channel DMA controller located between the system bus and the peripheral bus.
2.2 请求源
四个通道分别可以设置不同的请求源:
2.3 基本时序
nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输。
2.4 工作模式
Demond模式:
如果DMA完成一次请求后如果Request仍然有效,那么DMA就认为这是下一次DMA请求,并立即开始下一次的传输
Handshake模式:
DMA完成一次请求后等待Request信号无效,如果Request无效,DMA会无效ACK两个时钟周期,再等待下一次Request。
三、2440DMA程序设计
- #define DISRC0 *((volatile unsigned long*)0x4B000000)
- #define DISRCC0 *((volatile unsigned long*)0x4B000004)
- #define DIDST0 *((volatile unsigned long*)0x4B000008)
- #define DIDSTC0 *((volatile unsigned long*)0x4B00000C)
- #define DCON0 *((volatile unsigned long*)0x4B000010)
- #define DMASKTRIG0 *((volatile unsigned long*)0x4B000020)
- #define UTXH0 (volatile unsigned long*)0x50000020
- char *buf = "Hello World!";
- void dma_init()
- {
- //初始化原地址
- DISRC0 = (unsigned int)buf; //源地址
- DISRCC0 = (0<<1)|(0<<0);
- //初始化目的地址
- DIDST0 = UTXH0; //目的地址,串口的地址
- DIDSTC0 = (0<<2)|(1<<1)|(1<<0);
- DCON0 = (1<<24)|(1<<23)|(1<<22)|(12<<0);
- }
- void dma_start()
- {
- DMASKTRIG0 = (1<<1);
- }
在uart.c中的发送模式需要修改成DMA模式
- void uart_init()
- {
- //1.配置引脚功能
- GPHCON &= ~(0xf<<4);
- GPHCON |= (0xa<<4);
- //2.1设置数据格式
- ULCON0 = 0b11;
- //2.2设置工作模式
- //UCON0 = 0b0101;中断轮循
- UCON0 = 0b1001;
- //3.设置波特率
- UBRDIV0 = (int)(PCLK / (BAUD *16) - 1);
- }
0
上一篇:串口学习
下一篇:像素深度BPP
相关热门文章
- SHTML是什么_SSI有什么用...
- 查看linux中某个端口(port)...
- 卡尔曼滤波的原理说明...
- shell中字符串操作
- 关于java中的“错误:找不到或...
给主人留下些什么吧!~~
评论热议
阅读全文
0 0
- DMA学习
- DMA基础学习一
- STM32 DMA学习
- DMA控制器的学习
- STM32-DMA学习笔记
- STM32407学习之DMA
- 关于DMA的学习
- DMA学习资料
- STM32 DMA学习
- 3dMA学习笔记
- CC2540 DMA学习
- 学习DMA原理
- 学习Stm32--DMA
- stm32学习之DMA
- DMA基础(ARM学习2)
- 基于stm32f103zet6的DMA学习
- Linux DMA 驱动学习总结
- STM32F4 HAL库DMA学习
- java基础第十一天 异常
- openresty动态扩容支持持久化(完整版)
- 检测SQLServer复制订阅进度
- 串口学习
- Memcached ++++ exception thrown while trying to get object from cache for key
- DMA学习
- 像素深度BPP
- 设置使Linux下双击文件夹时不要每次都打开一个新窗口
- 大学IT类社团主页
- LCD学习
- 触摸屏学习
- spring boot environmentaware接口实现环境变量读取和属性对象的绑定
- GDB和coredump
- Linux应用程序地址布局
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
散步赏析
散步ppt课件
散步的拼音
美学散步
散步课件
散步课文
散步作者
仿写散步
散步原文
散步图片
散步反思
去散步英文
散步解析
散步的作者
散步教案ppt
晚饭后散步
走路散步
什么地散步
散步说课稿
龙应台散步
海边散步
散步 龙应台
作文散步
散步 英语
闲庭散步
散步的英语
吃完饭散步
课文散步
散步的时间
散步咏凉天
什么的散步
散步 英文
散步导入语
散步感悟
散步时间
散步日记
散步板书
散步遐想
散步的作文
散步热量
散步道