ADI Blackfin DSP处理器-BF533的开发详解13:LDF内存分配的详解(含源代码)

article/2025/11/6 16:19:59

硬件准备

ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器

软件准备

Visual DSP++软件

硬件链接

在这里插入图片描述

功能介绍

ADSP上的LDF(Linker Description Files)连接器描述文件是处理器用来进行资源分配的文件,通过对LDF文件的修改,可以分配自己需要的空间片断。通常情况下,不需要对LDF文件进行修改,通过简单指令即可使用LDF文件分配的空间,本章介绍一下如何通过LDF文件指定代码使用内存。

LDF 文件的生成

用 Visual DSP++ 软件,连接好板卡,打开要添加 LDF 文件的工程,在工程名上按鼠标右键,选择“工程选项”。

在这里插入图片描述

在弹出窗口中选择“add Startup Code/LDF”

在这里插入图片描述

选择“Add an LDF and startup code”后,在左边窗口会出现关于 LDF 的选项操作。

在这里插入图片描述

如图,把使用外部 SDRAM 选项勾上,选择与板卡 SDRAM 容量匹配的选项,ADSP-EDU-BF533 板卡的 SDRAM容量为 32MB。选好后点“确定”。

在这里插入图片描述

在弹出的选择框上选择“是”

在这里插入图片描述

在工程里会自动添加 LDF 及其相关文件

在这里插入图片描述

LDF 文件说明

使用图形打开,在 LDF 文件上进行双击鼠标左键,或者按右键在弹出菜单中按下图选择,会弹出 LDF 文件的图形界面。

在这里插入图片描述

图形界面分左右两个窗口,左边为 LDF 文件分配的空间片断的标识符。右边为 DSP 整个空间的分配地址和使用情况。从左边的标识符中可以看到 SDRAM 区域分为 sdram0,sdram0_bank1, sdram0_bank2, sdram0_bank3 等区域,如果要使用 SDRAM 的空间,就可以通过这些描述符来定义。

在这里插入图片描述

可以点击右上角放大按钮,将内存分布放大,观察当前内存使用情况。

在这里插入图片描述

使用代码打开

在 LDF 文件上按右键在弹出菜单中按下图选择,会以代码方式打开文件。

在这里插入图片描述

在代码中,可以找到如下图代码,该代码是指定 DSP 所使用空间的大小分配表,可以根据需要修改其空间分配的大小。

在这里插入图片描述

搜索“MEM_SDRAM0_BANK1”,可以找到如下代码,该代码中调用了很多库函数,来定义空间功能,最后对该空间片断做了标识符映射,其标识符为“sdram0_bank1”,通过调用该标识符,可以使用该空间。如果自己定义一个
空间片断,可以在上面的空间地址中定义一个空间片断的地址区域,注意不要使空间重复,然后复制下面的代码,建立一个自定义空间的功能描述,修改为自己定义的描述符即可。

在这里插入图片描述

在 LDF 文件定义空间时,常在空间片断描述符后面看到“ZERO_INIT”标志,该标志表示在编译代码时,将该段空间清为 0,也可以不对该空间操作,其标识符写作“NO_INIT” 将 sdram0_bank0 初始化时数据清为 0:

在这里插入图片描述

在正常使用时,原则上不建议大家来修改 LDF 的代码,以免因为 LDF 文件问题,为开发后期来带麻烦。

如何使用 LDF 文件定义的空间

要在代码中使用 LDF 文件定义的空间,可以通过“section(“ *** ”)”指令来定义,“***”代表空间片断标识符,即用图形界面打开,在左边窗口中看到的空间片断名称。

如定义一个数组“buffer[10000]”,将其放到“sdram0_bank1”的空间地址中,可以定义如下:

在这里插入图片描述

在 VDSP 软件上,打开 memory 查看窗口

在这里插入图片描述

在窗口中输入定义的数组名称,按“回车”键,找到内存中该数组定义的位置。

在这里插入图片描述

从上图中可以看到,buffer 这个数组被定义在了 0x800000 这个地址区域,通过下图可以看出,这个地址位于sdram0_bank1 的起始地址。

在这里插入图片描述

除了将一个数组定义在指定的空间片断,还可以指定一个函数,定义在指定的片断,其定义方法是在函数前面加入定义使用空间的指令。

通过 memory 查看器,可以看到在默认情况下,“Set_PLL” 函数是定义在地址 0xffa00a1c 地址,该代码断位于“L1_CODE”地址。

在这里插入图片描述

现指定“Set_PLL”函数将其放入“sdram0_bank2”空间

在这里插入图片描述

在 Visual DSP++ 软件上,如果定义的数组过大,超过了 L1 的空间,即使不使用“section”指令指定放置在SDRAM 空间,系统也会自动将该数组放置在 SDRAM 空间中,但前提是必须使用该工程生成 LDF 文件。

对于早期的 VDSP 软件版本,则没有该功能,必须指定数组放置的空间。如果该工程没有自动生成 LDF 文件,也可以拷贝其他的 LDF 文件到该工程文件夹下,然后添加到该工程中,同样可以通过“section”指令指定使用。

代码实现功能

代码实现了通过工程生成 LDF 文件,通过“section”指令定义一个数组和一个函数的空间,通过 memory 查看器查看该数组和函数定义的空间地址。运行代码,代码会将变量 i 生成的数据写入 buffer 数组内。

可以看到通“section”指令指定的数组和函数位于内存中位置的变化。

完整代码

#include <cdefBF533.h>

section(“sdram0_bank1”) unsigned char buffer[100000];

section(“sdram0_bank2”)
void Set_PLL(unsigned int pmsel,unsigned int pssel)
{
unsigned int new_PLL_CTL;
*pPLL_DIV = pssel;
asm(“ssync;”);
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm(“ssync;”);
asm(“idle;”);
}
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

void main(void)
{
unsigned int i;

Set_PLL(16,4);
Init_EBIU();	
Init_SDRAM();
for(i=0;i<1000;i++)buffer[i] = i;return 0;  	

}


http://chatgpt.dhexx.cn/article/dxZdS0D8.shtml

相关文章

M4内核的FPU/DSP使用总结

FPU简介 近年&#xff0c;在Cortex-M3之后ARM公司又推出Cortex-M4内核&#xff0c;ARM Cortex-M4处理器是由ARM专门开发的最新嵌入式处理器&#xff0c;在M3的基础上强化了运算能力&#xff0c;新加了浮点、DSP、并行计算等。Cortex-M4处理器的最大亮点之一&#xff0c;也是本文…

【STM32F407的DSP教程】第37章 STM32F407的FIR低通滤波器实现(支持逐个数据的实时滤波)

完整版教程下载地址&#xff1a;http://www.armbbs.cn/forum.php?modviewthread&tid94547 第37章 STM32F407的FIR低通滤波器实现&#xff08;支持逐个数据的实时滤波&#xff09; 本章节讲解FIR低通滤波器实现。 目录 37.1 初学者重要提示 37.2 低通滤波器介绍…

【STM32F429的DSP教程】第41章 FIR滤波器的群延迟(重要)

完整版教程下载地址&#xff1a;http://www.armbbs.cn/forum.php?modviewthread&tid94547 第41章 FIR滤波器的群延迟&#xff08;重要&#xff09; 本章节为大家介绍FIR滤波器的群延迟问题。 目录 41.1 FIR滤波后的群延迟 41.2 总结 41.1 FIR滤波后的群延迟 波…

STM32F407 DSP+FPU进行FFT变换(2)

STM32F407 DSPFPU进行FFT变换 接着上一篇继续&#xff0c;要用FFT运算的话&#xff0c;F4有FPU和DSP库&#xff0c;可以很方便让我们去对数据进行傅氏变换。首先得配置好DSP库和FPU。 配置DPS库和FPU CubeMX一般是默认配置开启FPU&#xff0c;但是DSP库需要自己去添加。这里…

【STM32F407的DSP教程】第41章 FIR滤波器的群延迟(重要)

完整版教程下载地址&#xff1a;http://www.armbbs.cn/forum.php?modviewthread&tid94547 第41章 FIR滤波器的群延迟&#xff08;重要&#xff09; 本章节为大家介绍FIR滤波器的群延迟问题。 目录 41.1 FIR滤波后的群延迟 41.2 总结 41.1 FIR滤波后的群延迟 波…

Powell算法、Powell修正算法_matlab仿真

1.鲍威尔基本算法的运算流程 1.采用坐标轮转法顺次沿n个坐标轴方向[e1,e2,...,en]进行一维搜索。然后以初始点X(0)和终点Xn(1)构成一个新的方向S(1)&#xff0c;并以此方向为搜索方向在做一维搜索得到极小值点X(n1)(1)。 2.去初始点X0(2)X(n1)(1)&#xff0c;并去掉元搜索方向组…

SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型(将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab)验证算法可行性和实时性

SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型&#xff08;将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab&#xff09;验证算法可行性和实时性。 对于数字信号处理很有用。 ID:73400638006173885书院街登山的兰瓜

非极大值抑制算法(NMS)及python实现

在目标检测中&#xff0c;常会利用非极大值抑制算法(NMS)对生成的大量候选框进行后处理&#xff0c;去除冗余的候选框&#xff0c;得到最具代表性的结果&#xff0c;以加快目标检测的效率。即如下图所示&#xff0c;消除多余的候选框&#xff0c;找到最佳的bbox。 NMS算法过程…

ADI Blackfin DSP处理器-BF533的开发详解24:触摸屏的实现和应用(含源代码)

硬件准备** ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 使用到硬件模块原理图 功能介绍 四线电阻式触摸屏&#xff0c;拿笔和指甲划拉的&#xff0c;不是现在的容性触摸屏。 ADSP-EDU-BF53x 板卡的 …

ADI Blackfin DSP处理器-BF533的开发详解8:Timer定时器的驱动和应用(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 接口功能介绍 ADSP-BF53x 上有 3 个通用定时器&#xff0c;每个定时器有三种模式&#xff1a; 脉冲宽度调制模式&#xff08;PWM_OUT&#xff0…

【信号处理】CFO估计技术(Matlab代码实现)

目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 针对存在未知载波频偏&#xff08;CFO&#xff09;的线性调制分类&#xff0c;提出一种混合似似然比检测&#xff08;qHLRT&#xff09;分类器。并且通过使用多天线接收机来进一步增强分类性能。一种基于盲源分…

基于STM32F469 discovery kit 开发板的开发2

目录 基于STM32F469 discovery kit 开发板的开发2开发环境搭建keil安装F4的固件库keil配置st-link调试工具例程测试 基于STM32F469 discovery kit 开发板的开发2 开发环境搭建 在嵌入式开发中&#xff0c;常用的集成开发环境&#xff08;IDE&#xff09;常用的有keil或IAR&am…

ADI Blackfin DSP处理器-BF533的开发详解16:KEY按键的实现(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 实现原理 ADSP-EDU-BF53x 开发板上的按键连接到了 CPLD&#xff0c;通过 CPLD 将按键信号与 EBIU 总线和中断管脚 PF0 连接&…

matlab进行傅里叶分析

license需求&#xff1a;需要使用到simulink工具包simscape 1.在matlab的command window中输入power_fftscope命令,并按回车键&#xff0c;该操作会打开FFT分析的窗口 2.加载用于FFT分析的数据到matlab worksapce,该数据需要按照一定的格式显示才能被FFT分析窗口自动识别到。 …

ADI Blackfin DSP处理器-BF533的开发详解18:用触摸屏的例程来理解中断(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 硬件实现原理 ADSP-EDU-BF533 开发板上的中断资源连接到了 CPLD&#xff0c;并通过 CPLD 将中断信号连接到 PF0 触发&#xff0c…

【正点原子FPGA连载】第十三章QSPI Flash读写测试实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十三章QSPI Fl…

ADI Blackfin DSP处理器-BF533的开发详解3:GPIO(含源代码)

我们从最基础的GPIO开始&#xff0c;先讲外设&#xff0c;这玩意不管是单片机&#xff0c;还是ARM&#xff0c;又或是FPGA&#xff0c;甚至SOC的芯片&#xff0c;都有GPIO&#xff0c;有共性&#xff0c;就好理解&#xff0c;让我们看看在ADI的DSP里头&#xff0c;GPIO是怎么一…

Protobuf 简介

protobuf (protocol buffer) 是谷歌内部的混合语言数据标准。通过将结构化的数据进行序列化(串行化)&#xff0c;用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。通常说的protobuf包括以下三点&#xff1a; 是一种二进制数据交换格式。支持不…

【prony】基于prony算法的参数辨识matlab仿真

1.软件版本 matlab2013b 2.系统概述 建立如下被测信号: 被测信号中包含四个振荡模态,在数据窗宽度同样为10s的前提下,利用不同的采样频率做普罗尼计算。结果如表1所示。根据公式的基本表达式: 所以最后,进行估计得到的参数为:

ADI Blackfin DSP处理器-BF533的开发详解54:CVBS输出-DSP和CH7024的应用详解(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 CVBS OUT 视频输出 硬件实现原理 CVBS_OUT 子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT3 和 PORT4 上&#xff0c;板卡插入时&#xff0…