TMS320VC33系列讲座资料开发技巧

上传人:cel****460 文档编号:46610237 上传时间:2021-12-14 格式:DOC 页数:22 大小:492.50KB
收藏 版权申诉 举报 下载
TMS320VC33系列讲座资料开发技巧_第1页
第1页 / 共22页
TMS320VC33系列讲座资料开发技巧_第2页
第2页 / 共22页
TMS320VC33系列讲座资料开发技巧_第3页
第3页 / 共22页
资源描述:

《TMS320VC33系列讲座资料开发技巧》由会员分享,可在线阅读,更多相关《TMS320VC33系列讲座资料开发技巧(22页珍藏版)》请在装配图网上搜索。

1、TMS320VC33系列讲座资料开发技巧TMS320VC33系列讲座资料第一讲 VC33的电源设计这里主要结合实际项目来讲解VC33的最小系统设计,这一讲为电源电路设计,主要分为一下几个部分进行:DSP系统需要的电源种类 DSP系统电源供电的特殊要求:上电次序数字/模拟混合系统电源处理方法 电源电路设计与器件选型 电源在PCB设计时的一些注意事项1、给TI DSP供电,TI DSP有5类典型电源引脚:CPU核电源引脚,I/O电源引脚PLL电路电源引脚Flash编程电源引脚(仅C2000系列DSP有) 模拟电路电源引脚(仅C2000系列DSP有)2、上电次序,CPU内核先于I/O上电,后于I/O

2、掉电(TMS320F281X例外,刚好相反)CPU内核与I/O供电应尽可能同时,二者时间相差不能太长(一般不能>1s,否则会影响器件的寿命或损坏器件)为了保护DSP器件,应在内核电源与I/O电源之间加一肖特基二极管3、数字与模拟部分单独供电 最后通过磁珠接在一点即可 4、电源电路设计主要的考虑因素用哪种类型的电源器件:转换效率、成本和空间,输入电压,输出电压(输出电压是否可调、输出电压的路数)输出电流:控制/状态:EN控制、PowerGood状态5、电源器件选型,这里列出一些常用的LDO,供大家在设计时选择 双路输出 输入电压 输出电压 输出电流 辅助功能 TPS767D318: 5V

3、3.3V/1.8V 1A/1A EN TPS767D301: 5V 3.3V/可调 1A/1A EN单路输出 TPS76333: 5V 3.3V 150mA EN TPS76801: 5V 可调 1A EN、PG TPS75701: 5V 可调 3A EN、PG TPS75501: 5V 可调 5A EN、PG我在做VC33设计中用到的电源器件是双路输出的TPS767D318。实际中的连接电路大家可以参照Datasheet。6、电源在PCB时的注意事项:数字地、模拟地分开,单点连接,强烈推荐采用多层板,为电源和地分别安排专用的层。同层上的多个电源、地用隔离带分割,每个电源引脚附近放置10100

4、nF旁路滤波电容,以平滑电源的波动。在PCB四周均匀分布一些4.710uF大电容。旁路电容一般采用瓷片电容第二讲 VC33的复位监控与时钟电路设计一、复位监控电路设计:为了使系统被复位信号正确地初始化,复位信号的脉冲宽度必须至少10 个 H1周期以上(即当C3x 运行于33.33MHz 时需要600ns)。上电之后,系统的振荡器达到稳定工作状态需要20ms,甚至更长时间。一般上电复位时,在复位引脚上置一个100ms200ms 的低电平脉冲是比较合适的。简单的复位电路可以采用分离器件组合而成。我的设计中采用了MAXIM 公司的集成微处理器监控复位电路MAX706s,减少了监控电路的元器件和复杂性

5、,并同时实现了复位功能。与由分离器件组装的电路比较起来,提高了系统的可靠性和精确度。MAX706s 是可工作在3.3V 下的uP 监控电路,能够实现四个方面的功能: 在电路上电、掉电与异常时产生一个长达200ms 的复位信号; 有一个独立的看门狗,当1.6s 以上没触发看门狗输入WDI 时,看门狗输出信号WDO 变低; 有一个1.25V 的电压门槛检测器,用于掉电报警、电池欠压或监控高于 2.93V的电压; 一个低电平有效的手动输入MR,用以实现手动复位功能。大家设计复位电路时直接根据Datasheet来就可以了。MAX706s 的第7 脚复位输出连接到DSP 芯片的复位输入引脚,看门狗输入由

6、CPLD 中的逻辑控制,SW-WDT 开关可选择是否启用电路的看门狗功能。在调试系统的程序时,不将看门狗输出连接到MR脚,更易于程序的调试。(强烈建议DSP系统中用CPLD)二、时钟电路设计:在讲时钟电路设计前,先讲几个基本的概念。别小看这几个概念,很多人都没有弄清楚的。1、晶体Crystal:晶体谐振器的简称,是一种压电石英晶体器件,具有一个固有的谐振频率,在恰当的激励作用下,以其固有频率振荡。2、振荡电路Oscillator,为晶体提供激励和检测的电路。3、晶振Crystal Oscillator将晶体、振荡器和负载电容集成在一起,其输出直接为一方波时钟信号。4、锁相环电路PLL用于对输入

7、时钟信号进行分频或倍频的电路。TMS320C3x 的时钟,既可以在XOUT 和XIN 之间外接无源晶体利用片内振荡器得到,也可以利用外部时钟来提供。虽然使用片内的振荡器比较方便而且成本也较低,但由此得到的时钟频率不是很稳定,精确度不高。因此采用了外部有源晶振,晶振的时钟信号输入到DSP 芯片的EXTCLK 引脚。这时 DSP 芯片的XIN 引脚应该接地。VC33 片内有一个锁相环(PLL)电路。PLL 把由片内振荡器产生的时钟或由外部时钟源产生的时钟视作参考时钟,然后把这一参考时钟乘以一个比例系数后,再为芯片系统提供驱动时钟。因此,时钟源的频率可以比CPU 的频率低。PLL 的倍频系数与功耗状

8、态由引脚CLKMD0、CLKMD1 决定,共有四种模式。设计中将这两引脚接高电平,在12Mhz 的外部时钟下可得到 60Mhz的CPU 运行频率。第三讲一、存储器结构:VC33的总存储器空间是16M32位字。程序、数据和I/O空间都包含在这16M字地址空间中,允许在RAM或ROM中保存表、系数、程序代码或数据。这样,存储器利用最大并且可根据需要定位存储器空间,但应注意片内可供用户使用的存储空间只有RAM,片内的ROM在芯片出厂时已固化了引导程序,用户不能对其修改。VC33中可供用户使用的片内RAM共4块,RAM0和RAM1均为1K×32位,RAM2和RAM3各位16K×32

9、位,4块RAM的总容量为34K×32位。存储器还有一块64×32位的高速缓冲器(Cache)<这个以后单独做专题讲>,供指令快速译码使用,另有一块4K×32位的ROM,存放引导程序。大家注意了:上述RAM和Cache的位置是固定的,但ROM、中断向量以与被引导的外部程序的起始地址在16M空间中的位置是由用户设定的存储器工作方式决定的。大家看下面的关系(a)微处理器方式 (b)微计算机引导方式 -0h 中断矢量、复位向量、陷阱矢量 0h 存放引导程序的片内ROM03Fh 和保留单元(64) FFFh -040h 1000h 引导1 400000h 引导2

10、 外部存储空间(8M64K) 外部存储空间(8M4K)7FFFFFh 7FFFFFh -800000h 800000h RAM2(16K) RAM2(16K)803FFFh 803FFFh -804000h 804000h RAM3(16K) RAM3(16K)807FFFh 807FFFh -808000h 808000h 外围总线存储器映射 外围总线存储器映射 寄存器(16K) 寄存器(16K)8097FFh 8097FFh -809800h 809800h RAM0(1K) RAM0(1K)809BFFh 809BFFh -809C00h 809C00h RAM1(1K) 中断陷阱分支指

11、令 809FC1h 63809FFFh 809FFFh -80A000h 80A000h 外部存储空间(8M40K) FFF000h 引导3 外部存储空FFFFFFh FFFFFFh 间(8M40K)总之,微处理器方式和微计算机引导方式最大的差异在于是否允许引导,如果不引导,则为微处理器方式,否则就为微计算机引导方式。在大多数情况下,程序总是放在外部ROM中的,为了实现程序的高速运行,必须将用户程序由外部ROM装载到DSP内部的高速RAM中,所以必须采用微计算机引导方式,但引导成功后,为了避免中断向量的搬迁,可通过DSP的I/O口引脚将工作方式切换到微处理器方式。在实际中,大家可直接置为引导方

12、式,当然做板时也可以用跳线来选择是处理器方式还是引导方式。VC33存储器的扩展。这里我们主要以异步存储器为主。下面是异步存储器接口控制信号。片选:PAGE3:0读/写控制:STRB、R/W,等待就绪:RDY.注意的问题:a、硬件信号的正确连接;b、时序的相互匹配1、SRAM的扩展:常用的SRAM:CY7C1021V3312ZC(64K×16位、3.3V、12ns)CY7C1041V3312ZC(256K×16位、3.3V、12ns) IS61LV25616AL10T(256K×16位、3.3V、10ns)我用到的就是第三种,实际中我用两片SRAM扩展为32位的。其

13、他的信号线不用我教了吧,呵呵,这个大家都会连。2、FLASH的扩展:FLASH的基本操作:a、读FLASH存储单元数据;b、读FLASH状态信息;c、扇区擦除;d、整片擦除;e、写数据到FLASH存储单元中常用FLASH:SST39VF400A704CEK(256K×16、3.3V、70ns) Am29LV800B(1M×8位/512K×16位、3.3V、70ns)注意Bootloader的定位就可以了。片选接PAGE1。技巧提示:数据、地址线在PCB布线时的等价交换DSP外部存储器接口的数据总线为DDi,存储器芯片的数据总线为MDj.。DSP外部存储器接口的地址

14、总线为DAk。存储器芯片的地址总线为MAl。数据总线可以等价交换时:i不等于j地址总线可以等价交换时:k不等于l。注意了:SRAM的数据总线和地址总线可以等价交换,而FLASH的则不能。第四讲 VC33中CMD文件的写法呵呵,又来了哦!前段时间忙着本科生的毕业设计,没时间写,今天我们的讲课又开始咯。做好准备了吗:-)前面主要讲了一下DSP的硬件设计,让大家大致了解了一下。从今天开始,我将向大家介绍VC33的软件设计。这一讲向大家介绍VC33中CMD文件的写法。所谓CMD文件就是Command文件,即连接命令文件。1、段。一般来讲,通用目标文件格式(COFF)一般有三种:*.obj、*.lib和

15、*.out。1)汇编语言中的段1>未初始化段.bss定义变量存放空间.usect用户自定义未初始化段2>已初始化段.text可执行的指令码.data初始化数据或表格.sect用户自定义段.asect类上2)C语言中的段1>未初始化段.bss定义变量存放空间、存放全局、静态变量.stack存放C中的栈.system存放C中的堆(heap).const存放特殊的常数、字符2>初始化段.text指令代码.cinit存放全局/静态变量执行初始化的常数数据.switch存放C中switch语言产生的表格明白了吗?呵呵。慢慢来:-)2、CMD文件1)输入/输出定义:-l rts30

16、.lib -o DEMO1.out这两项可由菜单设置。2)MEMORY命令指令存储空间格式如下:MEMORY PAGE0 :name1atlr:Origin = C1,l = C2 PAGE1 : 举个例子:MEMORY RAM0 :O = 800000h ,l = 8000h /片内RAM0 RAM1 :O = 809800h ,l = 800h /片内RAM1 RAM_EX :O = A00000h ,l = 1000h /片外SRAM 3)SECTIONS描述“段”定义在哪个物理地址格式如下:SECTIONS name :propertry,propertry, 其中propertry属

17、性是什么?1>load定义段存放在何处 load =(或>) 800100h2>run定义段在何处运行 run =(或>) 800300h举个例子:SECTIONS .text :> RAM .bss :> RAM .stack :> RAM_EX 注意:伪指令MEMORY和SECTIONS只能大写!下面给出一个完整的CMD文件。-w-stack 400h-heap 400h-l rts30.libMEMORY RAM : o = 800000h, l = 8000h RAM1: o = 809800h, l = 800h SRAM: o = 1000

18、h, l = 3efffh FLASH: o = 400000h, l = 3fffffh SECTIONS .text: > RAM .data: > RAM .bss : > RAM .cinit: > RAM .stack:> RAM1 .const:> RAM 大家会了吗?总之,CMD 它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间。其实要是在支持BIOS的DSP中,根本不用写CMD文件,直接利用图像配置界面自动生成的CMD文件即可。但是像2407和VC33不支持BIOS的DSP,只能手写CMD文件了。第5讲由于VC33的资料

19、很少,将VC33的BootLoader讲得很详细的几乎没有,大家很多看了的都不明白怎么回事,我将介绍VC33 BootLoader的详细步骤,大家按照这个步骤来就OK了_。我们的目的是自启动点亮LED灯,那么我们得有两个工程文件,一个为led.mak,另一个为flash.mak,这里可以视flash工程文件为一个工具,仅仅将led工程中的某种文件导入到flash中,然后掉电重启后由flash装入RAM中运行,实现自启动。所以我们需要做的只是要生成某种文件即bin文件。先说明一下大体的步骤。1、在led工程中编写hex.cmd文件;2、通过hex30工具将.out文件转化为.hex文件;3、通过

20、hexbin工具将.hex文件转化为.bin文件。下面给出具体的操作:第一步:我们首先要明白hex.cmd文件里面包含哪些内容,我们应该怎么来写。下面是一个完整的hex.cmd文件。led.out /输入coff文件-o led.hex /输出hex文件-map led.mxp /输出mxp文件-i /设置为Intel格式的hex文件-boot -bootorg 0-cg 10f8h /设置全局控制寄存器-romwidth 8 /ROM字宽-memwidth 8 /Flash字宽-e 0x8001af /程序入口地址可以看出,输入的是led.out文件,输出的文件有led.hex和led.mx

21、p。这里几乎是固定的写法,我们仅仅需要做的是查看程序的入口地址,然后改过来就可以了。如何查看程序入口地址?在led工程文件中,执行Project>Option>linker,输入生成的map文件名led.map接下来,我们led工程中打开led.map文件可以看到,led程序的入口地址为80002e,所以只需要将上述hex.cmd中最后一项改为-e 80002e就行了。第二步:将out文件转化为hex文件。使用命令提示符,输入命令进行如下操作:这时我们看led工程中已经生成了led.hex文件了。第三步:将hex文件转化为bin文件。接着第二步输入如下命令: 回车后:这时

22、我们看到已经生成了led.bin文件了。第四步:最后一步就是将bin文件烧到Flash中,以实现自启动。下面的一个工程文件包含一个完整的Flash烧写程序,Flash型号为29LV800BA,如果大家的Flash型号也是这个或兼容的,可以下载运行,当出现“Please Input your file:”的提示时输入“led.bin”,烧写完毕出现提示“OK”。完整的Flash烧写程序第六讲VC33有两个特点:流水线操作、并发I/O和CPU操作。 流水线操作是体现VC33高性能的主要特征。任何一条指令都要经过取指令、译码、读操作数、执行等4个过程,对同一条指令不能同时进行上述4个过程的

23、操作,但可以对不同的指令同时进行这4种操作,即每一个CPU周期中,有4条指令分别处于取指令、译码、读操作数和执行阶段。这种作业方式就称为流水线操作。流水线作业不仅提高了运算和处理速度,同时也减少了总线拥挤的现象,提高了CPU的吞吐量。 VC33流水线结构的四个主要单元和他们的功能如下: (1)取指令单元(F):从寄存器中取指令字并更新程序计数器(PC)。 (2)译码单元(D):译码指令字并产生地址。而且,在间接寻址中译码单元控制ARn寄存器的修改,当发生栈操作时(PUSH/POP)修改栈指针。 (3)读操作数单元(R):从存储器或寄存器中读操作数。

24、60;(4)执行单元(E):从存储器或寄存器中读出操作数后,执行相应的操作,并向目的地址写结果。 上面这个图说明了流水线的结构,其中X、Y、W、Z代表具体的指令。我们从图中可以看出,在第m个周期,这四个阶段完全处于并行状态,即完全重叠在一起,从而进入了正常的流水线作业过程。 流水线操作中,DMA可能也要工作,这时,优先级顺序由高到低为:执行、读操作数、译码、取指令、DMA。尽管DMA控制器的优先级最低,但可以通过合适的数据结构使DMA与CPU的冲突最少甚至消除,这时因为DMA有它自己的数据和地址线。 我们可以看到,流水线操作真正工作是在第m个周期,即完全重叠。但是

25、如果遇到了跳转和资源竞争等特殊情况,那么流水线操作就有可能不能完全处于重叠,这种冲突往往导致一个或几个CPU周期中没有任何一条指令处于被执行的状态。第七讲DSP系统应用中FLASH在线编程方法-摘要:介绍了在TI公司TMS320VC33 DSP应用系统中,通过JTAG口对DSP外部FLASH存储器实现在线编程的方法,给出了DSP系统加电后的自动装载运行。FLASH存储器是一种高密度、非易失性的电可擦写存储器,存储量大,使用方便,适用于低功耗、高性能的系统。在高速DSP应用系统中,为了充分发挥DSP性能,在加电后需要将用户代码装载到高速RAM存储器中运行。下面介绍SST29LE020型FLASH

26、存储器的烧写方法,以与如何实现TMS320VC33上电后用户程序的自举引导(Bootload)。1 SST29LE020的特点与操作SST29LE020是SST公司生产的一种256K×8FLASH,它有10万次以上的擦写寿命,其内部分为2048个页面,每个页面128字节,页面写周期为5ms。如果页面中一个数据需要改变,则这个分区的所有数据必须重新装入。FLASH支持软件数据保护功能(Software Data Protection),当执行三字节DSP写指令时,保护功能将自动加上,任何后续的写操作必须带上三字节DSP写指令。SST29LE020的读操作与传统EPROM读操作一致;在进

27、行数据编程操作时,它支持内部定时(Internal Timer)、数据查询(Data#Polling)、跳变位(Toggle Bit)三种方式,以测试内部编程操作是否完成。FLASH软件擦除指令为6字节加载指令,该指令执行后,最多等待20ms整个芯片便被擦除,即将 FLASH每个数据位都恢复为1状态的全FF状态。SST29LE020软件指令序列可在SST公司的数据手册上查到,在FLASH编程之前,需对FLASH进行擦除,擦除操作需要六个总线周期。FLASH页面写操作在使用内部定时方式时的流程如图1所示。 2 TMS320VC33简介TMS320VC33是美国TI公司推出的 TMS32

28、0C3X系列的32位浮点数字信号处理器,它是在TMS320C31浮点DSP的基础上开发的一个价格更低的DSP,该产品具有高速、低功耗、低成本、易于开发等显著优点。TMS320VC33采用内部1.8V,外部3.3V供电,因而它的功耗比原有型号TMS320C31的功耗降低了大约一个整量级,而且能支持高达150M/FLOPS的运行速率。其主要特性如下:CPU是32bit的高性能CPU:可进行16/32b整数和32/40b的浮点操作;内含8个扩展精度寄存器;有2个地址发生器、8个辅助寄存器和2个辅助寄存器算术单元(ARAU)。片内存储器为32bit指令字、24bit地址线、34K×32b(1

29、.1Mb)的双静态RAM。外围接口具有启动程序装载功能;内含5倍频的锁相环(PLL)时钟发生器;片内存储器可映射外设,其中包括一个串行口、两个32bit定时器和一个DMA;具有四个内部译码页选,可大大简化TMS320VC33与I/O与存储器的接口。3 TMS320VC33程序引导功能TMS320VC33具有两种存储器映射方式,即MP (Microprocessor Mode)方式和MC/BL(Microcomputer/Bootloader Mode)方式,两种方式下中断向量的位置不同。常用的是MC方式。在该方式下,MCBL/MP引脚接高电平,内部ROM被映射到000FFF之间。这段ROM中今

30、有器件生产厂家固化的引导程序(BootLoader),该引导程序可以将DSP实时运行的程序和数据从外部低速ROM或串行口装入到高速 RAM中。TMS320VC33复位后即运行内部固化的引导程序,引导程序通过查询四个中断引脚来确定装入方式。这些引脚为低电平有效,查询顺序依次为INT3、INT0、INT1、INT2;当INT3有效时,为串行装入方式;当INT0有效时,从外部地址0x001000处装入(BOOT1);当INT1有效时,从外部地址0x400000处装入(BOOT2);当 INT2有效时,从外部地址0xfff000处装入(BOOT3)。TMS320VC33具有四个快速页选信号,用于对外部

31、地址空间寻址。使用外部存储器装入数据时,外部存储器数据头位置需包含以下信息:(1) 外部存储器宽度(8/16/32位);(2) 程序代码块的长度;(3) 装入数据的目的起始地址;(4) 存储器访问的定时控制参数。头信息之间是用户的程序代码,程序代码按低位在前、高位在后的顺序排列。程序代码之后,必须有一个全零字,即0x00000000,用以指示引导程序用户程序代码已结束。引导完成后,即从装入的目的地址处开始执行用户程序。4 FLASH在线编程方法TMS320VC33的调试使用CC for C3x/4X(Code COmposer)集成编程环境,通过JTAG头仿真用户板,用户代码先放在外部RAM中

32、调试,调试成功后,就可以将用户程序代码写入FLASH了。下面介绍在并行装入BOOT2方式下的在线编程方法。SST29LE020与TMS320VC33的连接方式比较简单,FLASH片选CE引脚直接连接至TMS320VC33的PAGE1引脚;FLASH的输出使能OE引脚的最简单的处理方法是采用跳线方式(当向FLASH写入数据时,接高电平;通常情况下,接地)。在调试用户程序时,需根据用户板的存储器空间分配制作CMD文件,假设用户扩展的外部RAM为32bit,起始地址为0x00c00000,长度为32K;外部FLASH起始地址为0x00400000(使用BOOT2方式),长度为256K。其CMD文件如

33、下:MEMORYINTRAM1:origin=0x00800000,length=0x00008000INTRAM2:origin=0x00809800,length=0x000007c1VEC:origin=0x00809fc1,length=0x3fEXTRAM:origin=0x00c00000,length=0x00008000/*32k*/FLASH:origin=0x00400000,length=0x00040000/*256*/SECTIONS/*用户程序代码与初始化数据放在外部RAM*/.vectors>VEC /*VC33规定的中断向量地址*/.text :LOAD=

34、EXTRAM.cinit>EXTRAM.data:RUN=EXTRAM.bss:RUN=INTRAM2.stack>INTRAM1第一步:在CC下编译后,装入用户.OUT文件,用户程序代码即被写入EXRAM空间。第二步:依据TMS320VC33的BOOT格式,并根据CC产生的用户.MAP文件找出程序入口地址、各加载块的入口地址以与长度,编写FLASH烧写文件。示例源程序清单如下:#define MEM_WIDE 0x00000008 /*Flash存储器宽度*/#define CG_REGISTER 0x000010c8 /*全局存储器配置参数*/#define ENTER_POI

35、NT 0x00c00064 /*程序代码入口地址*/volatile int *flash_add=(volatile int *)0x400000;/*外部Flash的映射地址*/#define BOOTORG 0xc00064 /*.MAP文件中的程序入口地址#define BOOTBLK 3/*.MAP 文件中的加载块数量*/#define BOOTSRC1_ADD 0x00809fc1 /*第1个加载块地址*/volatile int *bootblk1_add=(volatile int *)0x00809fc1;#define BOOTBLK1_LEN 0x3a /*第1个加载块长

36、度*/#define BOOTSRC2_ADD 0x00C00000 /*第2个加载块地址*/volatile int *bootblk2_add=(volatile int *)0x00c00000;#define BOOTBLAK2_LEN 0xa3 /*第2个加载块长度*/#define BOOTSRC3_ADD 0x00C000a3 /*第3个加载块地址*/volatile int *bootblk3_add=(volatile int *)0x00c000a3;#define BOOTBLK3_LEN 0x17 /*第3个加载块长度*/unsigned int flashaddnum

37、,bytenum;/*定义Flash地址与页面字节数变量*/void waite(int ms)/*软件 1ms子程序*/;void sdp_flash()/*软件数据保护子程序*/flash_add0x5555=0xaa;/*3字节芯片SDP指令*/flash_add0x2aaa=0x55;flash_add0x5555=0xa0;void era_flash()/*擦除芯片子程序*/flash_add0x5555=0xaa;/*6字节芯片擦除指令*/flash_add0x2aaa=0x55;flash_add0x5555=0x80;flash_add0x5555=0xaa;flash_ad

38、d0x2aaa=0x55;flash_add0x5555=0x10;waite(20); /*20ms等待芯片擦除完成*/void write_flash(int bootdata)/*写一个int型数据*/unsigned int i;for(i=0;i<3;i+) /*一个int型数分成四个字节写入*/if(bytenum=0) /*如果是页面第1个字节,先写SDP指令*/sdp_flash();flash_addflashaddnum=bootdata; /*向Flash地址写一个字节*/flashaddnum+; /*Flash地址加1*/bytenum+; /*页面字节加1*/

39、if(bytenum>127) /*一个页面写完,页面字节置0,等待11ms*/bytenum=0;waite(11);bootdata>>=8; /*待写数据右移8位*/void main() /*主程序*/unsigned int i,j,lenth;bytenum=0;flashaddnum=0; /*Flash地址与页面字节数置*/waite(1); /*等待1ms*/era_flash(); /*擦除Flash芯片*/write_flash(MEM_WIDE); /*写外部Flash存储器宽度*/write_flash(CG_REGISTER); /*写寄存器配置参

40、数*/write_flash(1); /*第1个boot的数据长度为1*/write_flash()ENTER_POINT; /*写入boot的目的地址*/write_flash(0); /*第1个boot的数据*/for(i=0;i<BOOTBLK;i+) /*分别烧写需要boot的数据块*/if(i=0) /*每个数据块烧写的起起2字节分别是长度和源地址*/lenth=BOOTBLK1_LEN;write_flash(BOOTHBLK1_LEN);write_flash(BOOTSRC1_ADD);else if(i=1)lenth=BOOTBLK2_LEN;write_flash(

41、BOOTBLK2_LEN);write_flash(BOOTSRC3_ADD);else;for(j=0;j<lenth;j+) /*将数据块内容写入Flash*/if(i=0)write_flashbootblk1_addj;else if(i=1)write_flash(bootblk2_addj);else if(i=2)write_flash(bootblk3_addj);else;write_flash(0); /*代码最后位置写全零*/write(10); /*等待10ms,保证Flash写完成*/第三步:修改.CMD文件SECTION段,将烧写程序链接到内部RAM区。.CM

42、D文件中SECTION段如下:SECTIONS/*Flash烧写代码与初始化数据放在TMS320VC33内部RAM*/.text:LOAD=INTRAM1.bss:RUN=INTRAM1.cinit>INTRAM1.stack>INTRAM1第四步:运行烧写程序,用户代码即被写入FLASH中,将FLASH的OE引脚跳线连通至的位置,利用CC可以查看FLASH存储器内容是否与要烧写的内部一致,并脱机检验。FLASH在线编程方法已在用户板上得到了验证,达到了预期的目的。通过JTAG仿真器对TMS320VC33用户系统外部FLASH的在线编程,可以省去HEX转换工具与EPROM编程器等工

43、具,且具有方便、易行的特点。该现场在线编程的方法可推广至其它系列DSP用户系统,是DSP开发中需要掌握的一项新技术。 第八讲从JTAG接口对DSP外部Flash的编程方法 -摘要:采用一种简单可行的方法,在TI公司TMS320C6X DSP集成开发环境CCS2.0下,通过JTAG口实现对DSP外部Flash可擦写存储器的在线编程; 将用户数据文件烧写到DSP的外部Flash中,并在TMS320C6711 DSP板上多次测试通过。关键词:嵌入式系统 DSP Flash JTAG 在线编程 CCS2.0引言在采用TI数字信号处理器(DSP)的嵌放式硬件系统开发完成,软件也有CCS2.0集成开发环境

44、下仿真测试通过后,怎样将编译、链接后生成的可执行文件(.Out),经过转换后的十六进制文件(.Hex)写入硬件系统的Flash存储器中,让系统脱机运行,这是许多DSP开发人员与初学者遇到并需要解决的问题。从JTAG接口对DSP外部Flash的编程方法不只一种。本文以TMS320C6711-150 DSK板为例,介绍“在线仿真状态下”对Flash的编程。1 Flash存储器的擦除Flash编程之前,应对Flash进行擦除,使其每个数据位都恢复为1状态,即全FF状态。对Flash的擦除操作需要6个总线周期,总线时序如图1。    从图1可知,各总线周期的操作为:第一总

45、线周期向2AAAH地址的存储单元写入数据55H;第二总线周期向2AAAH地址的存储单元写入数据55H;第三总线周期向5555H地址的存储单元写入数据80H;第四总线周期向5555H地址的存储单元写入数据AAH;第五总线周期向2AAAH地址的存储单元写入数据55H;第六总线周期向5555H地址的存储单元写入数据10H。完成上述操作后,Flash存储器被完全擦除,内部数据恢复为初始状态,全为FFH。在TMS320C6711中,用C语言完成上述操作为:void erase_flash()*(unsigned volatile char*)FLASH_ADR1=0x00aa;*(unsigned vo

46、latile char*)FLASH_ADR2=0x0055;*(unsigned volatile char*)FLASH_ADR1=0x0080;*(unsigned volatile char*)FLASH_ADR1=0x00aa;*(unsigned volatile char*)FLASH_ADR2=0x0055;*(unsigned volatile char*)FLASH_ADR1=0x0010;在TMS320C6711系统中,Flash所在地址段为CE1空间,其开始地址为0x90000000。这样,其中的FLASH_ADR1、FLASH_ADR2在头文件中被定义为:#defin

47、e FLASH_ADR1 0x90005555#define FLASH_ADR2 0x90002AAA需要说明的是,在对Flash进行擦除时,应对DSP与EMIF外存储器接口进行初始化,CE1空间定义为8位读写模式。初始化函数如下:void c6x11_dsk_init() /*DSP和EMIF初始化*/CSR=0x100; /*禁止所有中断*/IER=1; /*禁止除NMI外的所有中断*/ICR=0xffff; /*清除所有未完成的中断*/*(unsigned volatile int *)EMIF_GCR=0x3300;*(unsigned volatile int *)EMIF_CE0

48、=0x30;*(unsigned volatile int*)EMIF_CE1=0xffffff03;*(unsigned volatile int*)EMIF_SDCTRL=0x07227000;*(unsigned volatile int*)EMIF_SDRP=0x61a;*(unsigned volatile int*)EMIF_SDEXT=0x54529;2 Flash存储器的编程对Flash存储器进行字节编程之前,需要对它进行3个周期的编程指令操作,总线时序如图2。 从图2可知,各总线周期的操作如下:第一总线周期向5555H地址的存储单元写入数据AAH;第二总线周期向2A

49、AAH地址的存储单元写入数据55H;第三总线周期向5555H地址的存储单元写入数据A0H;第四总线周期向地址的存储单元写入编程数据;在TMS320C6711中,用C语言完成上述操作为:/*-*/*入口参数:pattern:数组,用于存储编程数据*/*/ start_address:所要编程的起始地址指针*/* page_size:所要编程的Flash的页面尺寸*/*出口参数:无*/*-*/void flash_page_prog(unsigned char pattern,unsigned volatile char *start_address,int page_size)volatile

50、int i;unsigned volatile char *flash_ptr=start_address;*(unsigned volatile char *)FLASH_ADR1=FLASH_KEY1;*(unsigned volatile char *)FLASH_ADR2=FLASH_KEY2;*(unsigned volatile char *)FLASH_ADR1=FLASH_KEY3;for(i=0;i<PAGE_SIZE;I+)< P>*flash_ptr+=patterni;其中,FLASH_KEY1、FLASH_KEY2、FLASH_KEY3的定义如下:#

51、define FLASH_KEY1 0xAA#define FLASH_KEY2 0x55#define FLASH_KEY3 0xA03 校验和的计算与编程原理(1)校验和的计算在程序中,应对Flash编程的正确性进行自动检查,把编程前数据的校验和编程后Flash中读出数据的校验和进行比较:如果相同,则编程成功;如果不相同,则编程失败。需要注意的是,在对Flash进行编程的过程中,不能用CCS2.0中的“VIEW/MEMORY”功能看Flash中的编程数据,这样会导致一会地址编程的失败。其C语言程序如下:/*-*/*入口参数:start_address:所要校验的起始地址*/* size_in_byte:所要校验的Flash数据字节数*/*出口参数:lchecksum:校验和 */*-*/int flash_checksum(int start_address,int size_in_byte)int i;int lchecksum;unsigned volatile char*flash_ptr=(unsigned volatile char*)start_address;i

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!