打印
[研电赛技术支持]

USBFS/HS Firmware Library User Guide

[复制链接]
楼主: 和下土
手机看帖
扫描二维码
随时随地手机跟帖
41
和下土|  楼主 | 2020-11-28 23:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
42
和下土|  楼主 | 2020-11-28 23:56 | 只看该作者
基本的配置流程是在基本传输的配置流程基础上添加相关不连续传输的配置,包括传输数
据量 n,地址跳转偏移,不连续传输使能,以及选定源地址不连续还是目的地址不连续。
可以直接调用 DMA_NonSeqInit 函数实现不连续传输的配置。

使用特权

评论回复
43
和下土|  楼主 | 2020-11-28 23:56 | 只看该作者

使用特权

评论回复
44
和下土|  楼主 | 2020-11-28 23:57 | 只看该作者
重复传输
该传输可以指定数量的数据后,源地址或目标地址将回到初始配置的地址。当一段指定
ram 或者连续几个寄存器与存储器之间的数据交换,可选择重复传输模式。
重复传输的具体样例可以参照 DDL 的 DMA 模块样例 dmac_repeat。
基本的配置流程是在基本传输的配置流程基础上添加相关重复传输的配置,包括重复数据
量 n,重复传输使能,以及选定源地址重复还是目的地址重复。可以直接调用
DMA_RepeatInit 函数实现不连续传输的配置

使用特权

评论回复
45
和下土|  楼主 | 2020-11-28 23:58 | 只看该作者

使用特权

评论回复
46
和下土|  楼主 | 2020-11-28 23:58 | 只看该作者
连锁传输
该传输当一个描述符的最后一次传输结束时,LLP 指定的下一个描述符将被从存储器中载
入通道配置寄存器。等待下一次传输请求输入,开始新描述符的第一次传输。或者根据寄
存器 DMA_CHxCTLx.LLPRUN 的设置,在载入新描述符后直接开始第一次传输。

使用特权

评论回复
47
和下土|  楼主 | 2020-11-28 23:59 | 只看该作者
连锁传输的具体样例可以参照 DDL 的 DMA 模块样例 dmac_link_list_pointer

使用特权

评论回复
48
和下土|  楼主 | 2020-11-29 11:36 | 只看该作者

使用特权

评论回复
49
和下土|  楼主 | 2020-11-29 11:38 | 只看该作者
传输提前终止
传输过程中通道使能寄存器 DMA_CHEN.CHENx 保持有效,非连锁传输时,数据控制寄
存器 DMA_DTCTLx 设定的传输次数完成后自动置为无效,连锁传输时,最后一次传输的
传输次数完成后自动置为无效。传输过程中如果软件写 DMA_CHENCLR.CHENCLRx 为
1,则 DMA 将在完成当次数据读写后终止传输。

使用特权

评论回复
50
和下土|  楼主 | 2020-11-29 11:43 | 只看该作者
4 样例代码
4.1 代码介绍
用户可根据上述的工作流程编写自己的代码来学习验证该模块,也可以直接通过华大半导体的
网站下载到设备驱动库(Device Driver Library, DDL)的样例代码并使用其中的 DMA 的样例
进行验证

使用特权

评论回复
51
和下土|  楼主 | 2020-11-29 11:43 | 只看该作者
以下部分简要介绍本 AN 基于 DDL 的 DMA 模块样例 dmac_base 代码所涉及的各项配置。
1) 初始化 LED
/* Initialize LED */
LedInit();

使用特权

评论回复
52
和下土|  楼主 | 2020-11-29 11:44 | 只看该作者
使能 DMA 外设时钟:CLK_FcgPeriphClockCmd(CLK_FCG_DMA, Enable);

使用特权

评论回复
53
和下土|  楼主 | 2020-11-29 11:44 | 只看该作者
初始化 DMA 配置:
/* Config DMA */
stcDmaChCfg.u32DataWidth = DMA_DATAWIDTH_32BIT;
stcDmaChCfg.u32BlockSize = DMA_BLKSIZE;
stcDmaChCfg.u32TransferCnt = DMA_TRNCNT;
stcDmaChCfg.u32SrcAddr = (uint32_t)(&u32SrcBuf[0]);
stcDmaChCfg.u32DesAddr = (uint32_t)(&u32DstBuf[0]);
stcDmaChCfg.u32SrcInc = DMA_SRCADDRINC_INC;
stcDmaChCfg.u32DesInc = DMA_DESADDRINC_INC;
DMA_ChannelCfg(DMA_CH, &stcDmaChCfg);

使用特权

评论回复
54
和下土|  楼主 | 2020-11-29 11:45 | 只看该作者
使能 DMA 及其通
/* Enable DMA. */
DMA_Cmd(Enable);
/* Enable DMA channel0. */
DMA_ChannelCmd(DMA_CH ,Enable);
道:

使用特权

评论回复
55
和下土|  楼主 | 2020-11-29 11:46 | 只看该作者
设置 DMA 触发源:
/* Enable AOS clock */
CLK_FcgPeriphClockCmd(CLK_FCG_AOS, Enable);
/* Set DMA trigger source */
DMA_SetTriggerSrc(DMA_CH, EVT_AOS_STRG);AOS_SW_Trigger();

使用特权

评论回复
56
和下土|  楼主 | 2020-11-29 11:47 | 只看该作者
比较 DMA 源、目标缓存数据:
u8CmpRet = memcmp(u32DstBuf, u32ExpectDstBufData, sizeof(u32DstBuf));
if(0 == u8CmpRet)
{
LED_G_ON(); /* Meet the expected */
}
else
{
LED_R_ON(); /* Don't meet the expected */
}

使用特权

评论回复
57
和下土|  楼主 | 2020-11-29 11:48 | 只看该作者
代码运行
用户可以通过华大半导体的网站下载到 HC32M120 的 DDL 的样例代码(dmac_base),并配
合评估用板(EV-HC32M120-LQFP48-050-V1.1)运行相关代码学习使用 DMA 模块。

使用特权

评论回复
58
和下土|  楼主 | 2020-11-29 11:48 | 只看该作者
以下部分主要介绍如何在评估板上运行 DMA 样例代码并观察结果:
- 确认安装正确的 IAR EWARM v7.7 工具(请从 IAR 官方网站下载相应的安装包,并参考用
户手册进行安装)。
- 从华大半导体网站下载 HC32M120 DDL 代码。

使用特权

评论回复
59
和下土|  楼主 | 2020-11-29 11:49 | 只看该作者
- 下载并运行 dmac\ dmac_base\中的工程文件:
1) 打开 dmac_base\工程,并打开‘main.c’如下视图:

使用特权

评论回复
60
和下土|  楼主 | 2020-11-29 11:49 | 只看该作者

使用特权

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

本版积分规则