DMA 链表模式(LLI)深度解析

在进行一次 DMA 读或者写的时候,可以配置多个链表,从而当一个链表的数据传输完成时,会跳到下一个链表的起始地址,并继续传输数据,直到链表的下一个地址为 0。如果 DMA 使能了完成中断,则当 DMA 发送或者接收完成时,会进入完成中断。

那么有了这种 DMA 链表模式,我们就可以实现以下功能:

  • DMA 发送或者接收长度不限制
  • DMA 发送接收地址可以不连续
  • DMA 实现多种中断模式,半中断、3中断、4中断等等
  • DMA 实现循环功能

OK,那么当我们开始研究链表配置之前,我们需要了解一些前提: - 每个链表最多传输 4095 ,单位根据位宽决定 - 每个链表都可以触发中断

支持长度不限制

由于每个 dma 链表最多支持 4095,假设位宽用的是字节,那么一个链表最多传输 4095 字节,很显然这个不能满足我们需求,性能太低。那么如何提高传输长度呢?

我们可以使用多个链表,串接起来,这样就能够支持更大的传输长度了,并且传输的地址是连续的,dma 链表连接如图所示:

这个时候还有一个问题,当一个链表使用了 4095 字节,下一个链表是从 4095 的偏移开始,这个时候,就会产生非对齐的问题,如果是在 cache 场景下,是会有问题的。 因此,我们将 4095 减少到 4064,这样保证每个链表的首地址都是 32 字节对齐的。到这就实现了长度不限制的功能,具体实现参考 bflb_dma_lli_config 函数。

支持地址不连续

刚刚我们解决了长度限制问题,那么本身 dma 链表是支持地址不连续的,我们只需要把上面使用的多个链表当成一个大链表,然后两个大链表拼接,并且两个链表传输的首地址不连续,就可以实现地址不连续了。 具体实现参考 bflb_dma_channel_lli_reload 函数中的 bflb_dma_channel_lli_transfer_s。dma 链表连接如图所示:

支持多中断

完成了上述两步以后,多中断也就完成了。 当我们支持完长度不限制后,最后一个链表会开启中断,当传输完成最后一个链表时,就会触发中断。 当我们支持完地址不连续后,多个大链表(也就是长度不限制的链表的最后一个链表)完成都会触发中断,假设设定了三个传输 bflb_dma_channel_lli_transfer_s, 那么会触发三次 DMA 完成中断。

<think>嗯,用户想知道电子设计综合测评题目的具体内容。首先,我需要回忆一下相关的引用内容,特别是引用1、3里的信息。引用3提到了2017和2019题目,比如方波三角波振荡路,使用运放或555定时器。还有波形合成、滤波、积分器和分器这些部分。 用户可能需要了解测评题目的类型和典型示例。根据引用3,题目通常涉及波形的产生和变换,比如用单个运放产生方波三角波,或者用555生成方波。同时,综合测评可能包含多个模块,如加法器滤波器等,要求选手组合这些路完成任务。 另外,引用1提到仿真评估需要考虑动态响应,比如路的瞬态响应,这可能和测评题目中的实际应用有关。需要把这些知识点结合起来,给出具体的例子,比如2013题目可能涉及源设计,而2017题目更偏向信号处理。 用户可能还希望知道题目的结构,比如是否分步骤,是否涉及参数计算和调整,以及如何评估结果。引用3里提到不允许带脑,所以需要选手手动计算和调整路参数,这点也很重要,应该包含在回答中。 需要确保回答结构清晰,分点说明,比如题目类型、示例内容、技术要求等。同时,生成的相关问要围绕测评题目的其他面,如评分标准、备法等,这样用户能进一步探索。</think>### 电子设计综合测评题目示例与内容解析 #### 一、综合测评题目特点 全国大学生电子设计竞赛综合测评题目以**电路设计与波形处理**为核心,通常要求选手在限定时间内完成**多级路模块的搭建与联调**,实现特定信号生成、变换或测量功能。题目强调**系统级设计能力**和**参数计算精度**,常涉及以下技术点: 1. **波形产生**:方波三角波正弦波的单运放振荡电路设计(例如:用单个运放实现$f=1\,\text{kHz}$的方波-三角波发生器)[^3] 2. **波形变换**:积分器(方波三角波)、滤波器(合成信号分离)、分器(74LS74实现二分) 3. **信号合成**:同相加法器实现多波形叠加(需处理单源供的偏置问) 4. **参数测量**:率/幅度测量电路设计,要求误差小于$5\%$ #### 二、典型题目示例(以2017、2019为例) **题目要求**: > 使用指定元件设计系统,实现: > 1. 产生$f=500\,\text{Hz}$方波(幅值$6\,\text{V_{pp}}$) > 2. 将方波转换为同三角波(幅值$2\,\text{V_{pp}}$) > 3. 合成含有基波和三次谐波的信号 > 4. 通过滤波提取$1.5\,\text{kHz}$正弦波(幅值$3\,\text{V_{pp}}$) **实现案**: ```python # 系统级设计流程示意 1. 方波生成 → 2. 积分变换 → 3. 谐波合成 → 4. 带通滤波 ``` **关键技术点**: - 单运放方波-三角波振荡器设计(需满足:$$ f = \frac{1}{4RC\ln(1+2R_1/R_2)} $$) - 有源滤波器参数计算(例如:MFB滤波器中心率公式:$$ f_0 = \frac{1}{2\pi R\sqrt{C_1C_2}} $$) - 单加法器偏置设置(需保证:$$ V_{\text{offset}} \geq \frac{V_{\text{pp}}}{2} $$) #### 三、评分重点与技术要求 1. **核心指标**: - 波形率误差 ≤3% - 幅度误差 ≤5% - 波形失真度(THD) ≤5% 2. **进阶要求**: - 路稳定性(负载变化时保持指标) - 参数可调范围(例如率调节比≥1:10) - 系统功耗优化(参考2013源设计)[^1] 3. **实现限制**: - 仅允许使用指定型号运放(如LM324) - 禁止使用微控制器 - 分立元件数量限制(通常≤10个) #### 四、典型路结构 $$ \begin{cases} \text{方波发生器} & \rightarrow \text{积分器} \\ & \rightarrow \text{加法器} \rightarrow \text{滤波器} \\ \text{分器} & \end{cases} $$ 注:箭头表示信号流向,实际需配合阻抗匹配和缓冲路[^3]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮Adam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值