看完一本教材了,dsp原理,感觉学习dsp原理关键要了解寄存器,像c3000,有28个cpu寄存器,用来计算.19个外围寄存器,包括控制时钟/串口/dma.外围寄存器是映射在存储器地址的,不像cpu寄存器有自己的名字.
DMA(DirectMemoryAccess,直接内存存取),顾名思义DMA功能就是让设备可以绕过处理器,直接由内存来读取资料。
编译生成的obj和out文件,称为coff格式,组织方式是用段的形式.有text/data/bss等.
链接器的作用除了链接obj文件,还有分配存储器空间.通过命令MEMORY和SECTION.SECTION可以定义段的读取位置,运行位置,例如可以从rom读取text段,而在ram中运行.
hex6x.exe是用来把out文件转为16进制编码的bin文件,使之可以存在flash上面.out文件估计是二进制编码的,所以转换后文件小了很多,大概是1/8.
下面是用于hex6x的cmd文件.
NetVideoServer.out
-b
-memwidth 8
-boot
-bootorg 0x90000400
-bootsection .boot_load 0x90000000
ROMS
{
FLASH: org = 0x90000000, len = 0x100000, romwidth = 8, files = {NVS.bin}
}
这里好像flash的地址是0x90000000,而程序中烧到了0x42000000,不知道为什么.长度是1M,我的程序运行失败的原因是不是在这里呢?
EMIF为外部存储接口,通过EMIF接口可以灵活地和各种同步或异步存储器件无缝连接。通过EMIF可以将VC5509A的存储空间扩展到128 Mbit(SDRAM),存储空间共被分为CE0~CE3四个段,每段占用不同的地址。在EMIF的并行引导模式中,ROM固化的Bootloader程序是以0x200000为首地址开始加载程序。0x200000即为CE1空间的首地址,所以Flash必须接在DSP的CE1空间上。在加载时。EMIF的CE1空间已经默认配置成异步静态随机存储器(SRAM)接口,并且在时序上采用了最差情况设置(即最慢访问速度),充分保证了时间裕量,使得程序代码顺利地加载到DSP的内存中。
Bootloader在引导程序时,程序代码是以引导表格形式加载的。TMS320VC55x的引导表结构中包括了用户程序的代码段和数据段以及相应段在内存中的指定存储位置,此外还包括了程序人口地址、部分寄存器的配置值、可编程延时时间等信息。若要生成引导表,可用CCS最终编译生成的,out文件通过CCS自带的hex55.exe转换程序得到。将hex55.exe、.out文件、.0cmd文件放在同一个文件夹中,通过DOS命令调用hex55.exe。即可完成.out文件到hex格式的引导表文件的转化。.CMD文件用于提供引导表的相关配置信息.
下面是用于hex6x的cmd文件.
NetVideoServer.out
-b
-memwidth 8
-boot
-bootorg 0x90000400
-bootsection .boot_load 0x90000000
ROMS
{
FLASH: org = 0x90000000, len = 0x100000, romwidth = 8, files = {NVS.bin}
}
大于64k,所以要写一个二次引导的out文件,然后用hex转化(得到包含引导表的bin文件),然后拷在flash的前64k。
AT49LV1024的写操作只能将1变成0,而0变成1必须通过擦除操作进行。所以每次写Flash之前必须进行片擦除,使存储单元值变成0xFFFF,才能进行编程。所以,擦出程序要有足够延时。
二级搬移程序的编写方法
TMS320C64x开机只自动加载l KB程序代码到内部RAM,所以通常要编写二次搬移程序加载剩余程序代码。二级搬移程序的大小不能超过1 K字节,且必须用汇编语言编写。这一部分通常把中断向量表改一下就可以实现,主要包括如下步骤:
(1)系统中所用的中断向量表不要更改,只把复位中断跳到搬移程序处(通常紧接中断向量表后),而不直接跳到C程序的入口点c_int00处;
(2)在搬移程序中配置DSP的EMIFB全局控制寄存器(GBLCTL)和空间控制寄存器(CElCTL)。按TMS320C64x文档说明和所用Flash数据手册配置读写时序,由于选用16-bit宽的Flash,所以MY-TYPE要定义为16-bit异步接口,建好系统软件和硬件沟通的平台。
(3)参照map文件编写搬移程序;
(4)跳到C程序入口点c_int00处,完成搬移程序的编写。