基于TMS320C67系列DSP的FLASH烧写和程序加载研究

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EMIF 总线加载。
TMS320C6701 加载方式选择由 HD[4:0]管脚在上电时状态决定,取部分内容见表 1
TMS320C671x 配置管脚
HD[4:0] (BOOTMODE[4:0])
存储器 映射 MAP0 MAP1 MAP1 MAP0
表 1 TMS320C670x 加载方式选择
电平
地址 0 处的存储器
程菜单 File->Data->Load),将存储好的 LOADER.dat、PMEM.dat、DMEM.dat 分别加载 SBSRAM 内,
地址分别为 0x00400000、0x00420000、0x00440000,长度不变;烧写程序的长度根据 len 设定,
功能是先擦除 FLASH,再烧写 SBSRAM 数据入 FLASH,三段数据的首地址位置分别在 0x01400000、
*DestAddr++ = *TempAddr++;
asm("
nop 5");
//开始运行匹配程序
219
asm(" asm(" asm(" asm(" asm(" asm(" asm(" }
mvk 0,b0"); mvkh 0,b0"); b b0"); nop 5"); nop"); nop"); nop");
int *DestAddr = (int*)0x00000000; // PMEM ADDR,目标程序首地址
Init_DSP();
for(i=0;i<0xf000/4;i++) // PMEM,长度 60k
{
Write_PMEM(DestAddr,1,TempAddr);
DestAddr++;
TempAddr++;
00000 01101 10101 11100
SDRAM,4 个 8 bit 芯片 内部 内部
1x 速度 SBSRAM
加载方式(BOOTMODE)
无 8 bit,ROM 加载 16 bit,ROM 加载 32-bit,ROM 加载
2.2 存储器映射方式选择和相关搬运程序编写
以 C6701 为例具体说明 C671x 存储器映射方式。C6701 片内存储器 IRAM 分为程序存储器 PMEM 和数据存储器 DMEM 两个独立的部分,长度均为 64kBytes。C6701 有 MAP0/MAP1 两种存储器映射 方式,通过设置 HD[4:0]来实现:
MEMORY
{
PMEM1:
org=0000f000h len=00001000h
PMEM2:
org=00000000h len=00000200h
SBSRAM: org=00400000h len=00040000h
DMEM:
org=80002000h len=00008000h
}
(4)打开烧写程序工程 C,该程序将 SBSRAM 内数据烧写至 FLASH;操作时,先加载数据(工
//程序结束后,回到地址 0 处运行
2.3 C670x 烧写程序
以 C6701 为例,说明 C670x 烧写程序的过程。这里目标程序、搬运程序、烧写程序分别建立
工程 A、B、C,使用 C670x 烧写程序具体操作阐述如下:
(1)使用 DSP(C670x)烧写 FLASH,连接 JTAG,系统加电,进入 CCS Emulator;;
0x01420000、0x01440000,长度分别为 64kB,60kB,len;见 2.2 搬运程序部分源代码。
217
Initialzation)。-c、-cr 选项可以通过 CCS 软件菜单 Project-Options 打开编译器设置对 话框,在 Linker 页中设置。这个选项对基于 JTAG 的开发关系不大,对于脱机运行的最终系 统关系很大,一般需要从 ROM/FLASH 加载的程序选择-c 选项。 由于 TMS320C670x 与 TMS320C671x 系列硬件结构不同,DSP 加载过程差别较大,下面分别加 以阐述。
(2)打开要烧写目标工程 A,加载工程程序(File->Load Program),存储数据(工程菜单
File->Data->Save),片内程序存储器、片内数据存储器数据分别存入 PMEM.dat、DMEM.dat,长
度分别为 60kB,len(需要观察 map 文件内容,定片内数据有效长度,len=片内数据存储器有效字
节数/4);设定工程 A 存储器空间分配如下, 实际使用片内程序存储器 PMEM64kB 的前 60KB:
MEMORY {
PMEM1: org=00000200h len=0000ee00h PMEM2: org=00000000h len=00000200h SBSRAM: org=00400000h len=00040000h DMEM: org=80000000h len=00008000h FLASH: org=01400000h len=001fffffh }
2 TMS320C670x 加载操作
2.1 加载方式选择(BOOTMODE)
不加载:直接由地址 0 处开始执行代码;
仿真器加载(Emulator Boot):使用仿真器,通过 JTAG 口加载;
主机加载(Host Boot):通过主机口 HPI 加载程序入 DSP,使用 DSPINT;
外部存储器接口加载(EMIF Boot):程序由外部存储器,通过 DMA/EDMA 方式,从
SP
.set B15
.global _Write_PMEM
_Write_PMEM:
STW .D2 B2,*B15--[1]
NBaidu NhomakorabeaP 5
STW .D2 A0,*B15--[1]
NOP 5
STW .D2 B0,*B15--[1]
NOP 5
MV A4,A0
MV B4,B2
NEXTR:
LDW *A6++(4),B0
的部分数据也烧入 FLASH。
需特别注意的事,搬运程序中,将 FLASH 程序拷贝至 PMEM 时,必须使用汇编语句搬移指令
MVC,只有 MVC 可以访问控制寄存器,这需要用汇编语言写一简单的搬移函数如 Write_PMEM()完
成一个地址向片内某地址写数。下面是汇编文件 Write_PMEM.asm。
218
(3)使用 MAP1 方式,如果目标程序使用如反三角函数 asin(),atan()等基于查找表方式的
函数,因为查找表放置在.cinit 段中,该数据段必须放在片内数据存储器中才能被数据存储器
控制器 DMC 访问(如将.cinit 放入 PMEM,主机加载工作正常;但烧写 FLASH 后,上电加载程序,
1 概述
1997 年,美国 TI 公司发布了新一代 DSPs 芯片 TMS320C6000,包括定点系列和浮点系列。其 中定点系列是 TMS320C62xx,浮点系列是 TMS320C67xx,二者互相兼容。TMS320C67 系列 DSP 具有 高速处理能力以及强大对外接口能力,工程应用很广泛,在军事通讯、电子对抗、雷达系统和制 导武器等需要高度智能化的应用领域,占有不可替代的优势。
TMS320C67 系列 DSP,片内没有集成用户可以使用的 ROM 存储器,用户程序必须存放在外挂 的程序存储器中。外挂的程序存储器通常选用容量大、存储速度快、功耗低、性价比高的 FLASH 存储器。
对程序存储器的编程(即离线编程)通常是通过通用编程器完成的,即用户将要写入的程序 转换成编程器能够接收的格式,再通过编程器写入存储器中。
基于 TMS320C67 系列 DSP 的 FLASH 烧写 和程序加载研究
平恒 郭戈
航天二院二部,北京 100854 【摘要】随着集成电路制造工艺的不断提高,芯片集成度越来越高,存储器向小型化、贴 片式发展。通过系统的DSP可直接对用户板上的存储器编程,这样不仅节省了通用编程器 及适配器的费用,还减少了频繁插拔存储器的麻烦,从而大量节省了系统开发时间,满足 了用户程序在线更新的要求。 【关键词】芯片集成; 烧写和程序; 加载研究
}
TempAddr = (int*)0x01440000; // FLASH ADDR,写入 FLASH 目的地址
DestAddr = (int*)0x80000000; // DRAM ADDR,目标程序首地址
for(i=0;i<0x1000/4;i++)
// DRAM,长度 0x1000 = 4kB
NOP 5
MVC B0,PDATA_O
STP *A0
ADD A0,4,A0
SUB B2,1,B2
[B2] B NEXTR
NOP 5
SUB B2,1,B2
[B2] B NEXTR
NOP 5
搬运工程 B 调用该函数:
void main()
{
int i;
int *TempAddr = (int*)0x01420000; // FLASH ADDR,写入 FLASH 目的地址
TMS320C67 系列 DSP 使用外部存储器接口 EMIF 直接烧写 FLASH,DSP 通过 FLASH 加载程序。 EMIF 寄存器配置可以参考相关资料,本文不加以描述,本文重点阐述工程上实现 DSP 烧写 FLASH 的过程和程序加载过程。首先对文中几个术语和相关选项进行说明:
目标程序:完成指定功能编写的程序; 搬运程序:在 DSP 上电或复位后,将程序由 ROM/FLASH 搬运至片内存储器或片外存储器,供 DSP CPU 执行的程序代码; 烧写程序:将片内/外存储器数据烧写至 FLASH 的程序; 目标程序、搬运程序、烧写程序可以分别建立工程,也可以合并为一个或两个工程; 连接器选项选择:其中关系程序加载的主要是-c/-cr 选项,它的选择关系到全局/静态变量 的初始化问题,需要用户自己设置。-c 选项用于设置运行时初始化全局变量(Run-time Autoinitialzation ), -cr 选 项 用 于 设 置 在 加 载 时 初 始 化 全 局 变 量 ( Load-time
( 3 ) 打 开 搬 运 工 程 B, 加 载 工 程 程 序 ( File->Load Program ), 存 储 数 据 ( 工 程 菜 单
File->Data->Save),片内 PMEM 数据存入 LOADER.dat,长度为 64kB;设定工程 B 存储器空间分配
如下, 实际只使用片内程序存储器的后 4KB:
MAP0,程序加载到片外 SDRAM/SBSRAM 中运行,运行速度较慢; MAP1,程序加载到片内程序存储器中运行,运行速度快。 ROM/FLASH 加载时,DMA 从 CE1 空间拷贝 64KB 数据到地址 0 处,长度有 64KB,一般情况下 资源足够用户使用。 工程应用中常用方法: (1)使用 MAP0 方式,配置好 HD[4:0],直接将目标工程程序存储器 SDRAM/SBSRAM 的 64kB 数据直接烧写至 FLASH 首地址处开始的 64kB 即可;作个烧写程序,功能是先擦除 FLASH,再烧写 SDRAM/SBSRAM 数据入 FLASH 即可,过程比较简单,使用 C 语言编写即可,可以参考 TI 公司的例 程,目录 ti\examples\dsk6211\board_util\flash\Dsp\flash_prog.pjt,本文不作介绍。 (2)使用 MAP1 方式,如果目标程序不使用如反三角函数 asin(),atan()等基于查找表方式 的函数,那么可以不使用搬运程序,直接将目标工程片内程序存储器 PMEM 的 64kB 数据直接烧写 至 FLASH 首地址处开始的 64kB 即可。这种方法与 1 相同,只是烧写数据换成 PMEM;
因为 DMC 访问不了 PMEM,会导致程序运行初始化时程序即跑飞(使用“-c”选项烧写)或会在
使用该函数时运算错误(“-cr”选项烧写))。而 C6701 自动加载 FLASH 的 64kB 程序放入片内程
序存储器 PMEM 中,所以需使用搬运程序搬运数据段内容,要将搬运程序和片内数据存储器 DMEM
随着集成电路制造工艺的不断提高,芯片集成度越来越高,存储器向小型化、贴片式发展。 从而使表面封装的存储器难以利用编程器编程。目前普遍采用的在系统编程 ISP(In System Programming)技术不需要编程器,通过系统的 DSP 可直接对用户板上的存储器编程,这样不仅节 省了通用编程器及适配器的费用,还减少了频繁插拔存储器的麻烦,从而大量节省了系统开发时 间,满足了用户程序在线更新的要求。
相关文档
最新文档