[STM32F1] DMA读GPIO的bitband出现传输错误

[复制链接]
 楼主| 楚天 发表于 2013-12-23 14:50 | 显示全部楼层 |阅读模式
如题,发现读取正常的地址就没问题。一旦读取bitband就出现传输错误。
调试跟踪DMA设置,DMA-CPAR7:0x42210124,DMA-CMAR7:0x22004600
是否DMA不支持Bitbanding寻址?
huzi2099 发表于 2013-12-23 14:53 | 显示全部楼层
DMA寄存器可以位寻址,你怎么写的?另外也可能是仿真器的问题.
 楼主| 楚天 发表于 2013-12-23 15:10 | 显示全部楼层
如果把DMA_CPAR设置成0x40010808则没有问题。如果改成(uint32_t)BITBAND_ALIAS_ADDRESS(0x40010808,9)即0x42210124则出现传输错误。
 楼主| 楚天 发表于 2013-12-23 16:22 | 显示全部楼层
改为中断方式就可以了。
static        unsigned short        sCnt        =        0;
        if(TIM_GetITStatus(TIM2,TIM_IT_CC2) != RESET)
        {
                TIM_ClearITPendingBit(TIM2,TIM_IT_CC2);
                *(uint32_t *)((uint32_t)BITBAND_ALIAS_ADDRESS((uint32_t)cKey,0) + sCnt * 4)        =        *(uint32_t *)((uint32_t)BITBAND_ALIAS_ADDRESS(0x40010808,9));
                if(++sCnt >= 256)
                        sCnt        =        0;
        }
 楼主| 楚天 发表于 2013-12-23 16:25 | 显示全部楼层
1、用0x40010809作为DMA的设备地址,DMA可以工作。
2、用中断且用bitbanding也可以工作。
所以,似乎可以得出一个不太严谨的结论:STM32F103的DMA不能够读取Bitbanding的GPIO地址?
haov000 发表于 2013-12-23 16:47 | 显示全部楼层
**中DMA好像不支持bitband的位操作
 楼主| 楚天 发表于 2013-12-23 17:27 | 显示全部楼层
但是香版在一个关于DMA的回复中说是支持的。
 楼主| 楚天 发表于 2013-12-24 09:10 来自手机 | 显示全部楼层
st放年假,技术支持都跑路了。艾瑞那边说DMA访问bitbanding时会因为地址类型错误而产生TE似乎有点牵强啊。
 楼主| 楚天 发表于 2013-12-24 09:20 | 显示全部楼层

这个图片中GPIO的bitbanding地址计算错了啊。
 楼主| 楚天 发表于 2013-12-24 09:21 | 显示全部楼层
0x1080c x 32应该是0x210180才对,按照公式,结果应该是0x42210180.
ahuzjh 发表于 2013-12-24 09:53 | 显示全部楼层
我是来学习的,看看大神们的讨论吸取经验。
 楼主| 楚天 发表于 2013-12-25 12:40 | 显示全部楼层
能找到的关于DMA的和bitbanding的资料中都没有明确指出DMA不支持bitbanding的文字。但是又调试不出来。ST的电话又没人接听。。。
 楼主| 楚天 发表于 2013-12-28 16:02 | 显示全部楼层
试验发现,DMA不支持设备或内存的bitbanding访问。不论什么数据宽度。只要开始传输就出现TE错误。
 楼主| 楚天 发表于 2021-8-18 11:06 | 显示全部楼层
哈哈N年前的事了.
明确一下吧,RM0008 Rev 21  page53明确指出"only available for Cortex®-M3accesses, not from other bus masters (e.g. DMA)"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

58

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

3

主题

58

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部