打印

TIMx 的DMA传送wemti1

[复制链接]
2137|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蒸钱会|  楼主 | 2009-2-10 22:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DMA, TI, mx, mt, DM
沙发
蒸钱会|  楼主 | 2009-2-10 22:40 | 只看该作者

问题1 TIMx_DCR定义难以理解

技术参考文档
英文P319/619,中文P254/524

Bits 12:8 DBL[4:0]: DMA Burst Length.
This 5-bits vector defines the length of DMA transfers (the timer recognizes a burst transfer
when a read or a write access is done to the TIMx_DMAR address), i.e. the number of bytes to
be transferred.
00000: 1 byte,
00001: 2 bytes,
00010: 3 bytes,
...
10001: 18 bytes


DBL[4:0]: DMA连续传送长度
这些位定义了DMA在连续模式下的传送长度(当对TIMx_DMAR寄存器进行读或写时,定时器则进行一次连续传送),即:定义传输的次数,传输可以是半字(双字节)或字节:
00000:1次传输
00001:2次传输
00010:3次传输
......
......
10001:18次传输


另见208/524

DBL[4:0]: DMA连续传送长度
这些位定义了DMA在连续模式下的传送长度(当对TIMx_DMAR寄存器进行读或写时,定时器则进行一次连续传送),即:定义传输的次数,传输可以是半字(双字节)或字节:
00000:1次传输
00001:2次传输
00010:3次传输
......
......
10001:18次传输
例:我们考虑这样的传输:DBL=7,DBA=TIM2_CR1
- 如果DBL=7,DBA=TIM2_CR1表示待传输数据的地址,那么传输的地址由下式给出:
(TIMx_CR1的地址) + DBA + (DMA索引), 其中 DMA索引 = DBL
其中(TIMx_CR1的地址) + DBA再加上7,给出了将要写入或者读出数据的地址,这样数据的传输将发生在从地址(TIMx_CR1的地址) + DBA开始的7个寄存器。
根据DMA数据长度的设置,可能发生以下情况:
- 如果设置数据为半字(16位),那么数据就会传输给全部7个寄存器。
- 如果设置数据为字节,数据仍然会传输给全部7个寄存器:第一个寄存器包含第一个MSB字节,第二个寄存器包含第一个LSB字节,以此类推。因此对于定时器,用户必须指定由DMA传输的数据宽度。





使用特权

评论回复
板凳
蒸钱会|  楼主 | 2009-2-10 22:46 | 只看该作者

高手赐教

捕获结束时,用DMA连续传送CCR1和CCR2,按照说明设置很难得到正确的CCR2数据,得到的是0.
单独读取一个数据CCR1或CCR2数据没问题,想来想去可能是TIMx_DCR的设置问题,但原文太难理解,设了多次无果.

使用特权

评论回复
地板
香水城| | 2009-2-11 08:16 | 只看该作者

这部分用于初始化,不是用于传送数据

使用特权

评论回复
5
蒸钱会|  楼主 | 2009-2-11 18:10 | 只看该作者

DMA作初始化未免大材小用,真正用的地方倒回避

使用特权

评论回复
6
香水城| | 2009-2-11 18:43 | 只看该作者

真正传输数据的部分要看DMA那一章

怎么叫回避呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

54

帖子

0

粉丝