完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明.docx

上传人:b****2 文档编号:23476853 上传时间:2023-05-17 格式:DOCX 页数:15 大小:83.94KB
下载 相关 举报
完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明.docx_第1页
第1页 / 共15页
完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明.docx_第2页
第2页 / 共15页
完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明.docx_第3页
第3页 / 共15页
完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明.docx_第4页
第4页 / 共15页
完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明.docx

《完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明.docx》由会员分享,可在线阅读,更多相关《完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明.docx(15页珍藏版)》请在冰豆网上搜索。

完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明.docx

完整word版TMS320C6678的EMIF16多核程序烧写的软件使用说明

 

TMS320C6678的EMIF16多核程序烧写

软件使用说明

 

图表目录

 

符号和缩略词说明

DSP:

数字信号处理器(DigitalSignalProcessor)

SPI:

串行设备接口(SerialPeripheralInterface)

EMIF16:

外部存储器接口(ExternalMemoryInterface)

DDR3:

外部存储器

PLL:

锁相环

L2SRAM:

二级静态存储器

IPC:

核间通信(InterprocessorCommunications)

TMS320C6678的EMIF16多核程序烧写软件使用说明

1概述

1.1范围

本文档包括:

TMS320C6678的EMIF16多核程序烧写软件使用说明。

1.2目的

指导C6678的EMIF16多核程序烧写过程。

1.3设计依据

[1].TMS320C6678MulticoreFixedandFloating-PointDigitalSignalProcessordatamanual,德州仪器

[2].KeyStoneArchitectureBootloaderUserGuide,德州仪器

1.4背景

a)本项目的任务提出者:

雷达所9号楼课题组

b)开发者:

边小艳

c)用户:

课题组内部

1.5开发环境和运行环境

开发工具:

CCStudiov5.1。

运行的硬件环境:

TMS320C6678芯片,EMIF16外挂并行NorFlash,NorFlash容量为32MB,可选型号如Numonyx生产的JS28F256P,Spansion生产的S29NS256等。

2任务概述

TMS320C6678的EMIF16多核程序烧写主要包括三个部分:

多核的待烧写工程,烧写转换工具以及烧写工程。

三个部分之间的联系如下图所示:

图1TMS320C6678的EMIF16多核加载总体框图

多核的待烧写工程:

core0的待烧写工程除了完成自身的处理任务外,还要实现加载其它待加载的核,因此需要在core0的待烧写工程中增添加载这部分程序,其它核的待烧写工程不需要添加,若多核是同一个工程,则需要在core0的处理程序中添加加载程序。

具体请看第3节。

烧写转换工具:

在路径EMIFBootUtility\hex_ge6678_EMIFBoot中的EMIFboot_out2bin.bat是各核的代码转换工具,实现将各核的.out文件转换成.bin文件,八个核使用同一个转换工具,但是在转换之前需要将.out文件重命名,具体使用方法请参看第4节。

烧写工程:

将待烧写的核的.bin文件通过EMIF16接口烧写到外接NorFlash中去,具体请看第5节。

3多核的待烧写工程说明

3.1core0待烧写工程说明

在core0的待烧写工程中,除了完成自身的任务之外,还要作为主核去加载其他的核,因此,加载这部分作为一个单独的模块整理在一个文件夹core0_Pjt_Use中,对于core0的待烧写工程,只要把这个文件夹放到此工程中,并调用加载函数Core0_EMIF16_BOOT()即可。

3.1.1工程文件说明

在core0_Pjt_Use文件夹主要有如下文件:

表1core0_Pjt_Use文件函数说明

文件名

功能、用途

包含的函数

函数功能

EMIFboot.c

包含加载多核的函数

Core0_EMIF16_BOOT()

初始化EMIF16接口,加载其它需要加载的核,在主函数中直接被调用

Init_DDR3_C6678.c

包含DDR3接口初始化函数

Init_DDR3()

初始化DDR3接口

InitPLL_C6678.c

包含PLL的初始化函数

InitMainPLL()

初始化PLL

core0_boot.c

包含加载单核的函数

Core0_Boot_Secondarycore()

Core0从Flash中读出某个核的代码并按段加载

core0_boot_othercores()

将Flash中的数据写到其他核的L2中

flash_nor.c

包含对flash的擦除、烧写的基本函数

NOR_init()

初始化NorFlash

NOR_erase()

擦除一定长度的NORFlash

NOR_writeBytes()

向NorFlash中写入一定长度的数据

KeyStone_EMIF16_Init.c

包含EMIF16接口的初始化函数

EMIF_init()

配置EMIF16接口的寄存器

KeyStone_EMIF16_init()

初始化EMIF16接口

EMIF_NOR_FLASH_test.c

包含对flash擦除、烧写的用户可调用函数

NOR_FLASH_erase_blocks()

擦除flash的某块区域

NOR_FLASH_write_block()

烧写flash的某块区域

NOR_FLASH_read_block()

读取flash的某块区域

bootload.asm

包含core0自身加载的汇编函数

boot()

从flash中读取core0的代码按段加载,并跳到入口地址

C6678.cmd

链接命令文件

存储器空间配置和段的配置,主要是为.bootload段的分配

3.1.2程序流程图

上电后,core0待烧写程序的执行过程如下:

图2core0待烧写程序的执行过程

 

注:

如上图所示,

(1)中的Romcode是C6678出厂时固化在Rom(从0x20B00000到0x20B1FFFF)中的一段代码,不是由用户编的,用户不能改变,下面的

(2)(3)(4)(5)过程是由用户编的。

3.1.3操作步骤

当core0需要加载其他核时,需要做的步骤是:

1)将core0_Pjt_Use文件夹放到待烧写工程的文件夹中。

2)在CCSv5.1环境下,将core0_Pjt_Use文件夹中的inc的绝对路径添加到propertiesC/C++BuildSettingIncludeOption的搜寻路径中。

3)在待烧写主程序main中调用EMIFboot.c中的加载函数Core0_EMIF16_BOOT()。

4)在EMIFboot.c中定义各核的代码烧写到NorFlash中的地址(加载时的源地址)。

在7个核的工程全不相同的情况下,需要将7个核的代码烧到7块不同的空间,这里为每个核预定义的Flash空间分配如下:

表1预定义的八个核的Flash空间分配

核名

NorFlash

起始地址

NorFlash

结束地址

预留空间大小

Core1

0x70200000

0x703FFFFF

2MB

Core2

0x70400000

0x705FFFFF

2MB

Core3

0x70600000

0x707FFFFF

2MB

Core4

0x70800000

0x709FFFFF

2MB

Core5

0x70A00000

0x70BFFFFF

2MB

Core6

0x70C00000

0x70DFFFFF

2MB

Core7

0x70E00000

0x70FFFFFF

2MB

 

若某些核的代码相同,则需要烧写到Flash的同一块空间,为了统一,这里规定:

相同代码都烧到核号小的Flash空间(由表一分配的),例如core1、core5、core7的代码相同,则它们三个的烧写地址是0x70200000。

若某些核不需要加载,则定义加载地址无效,无效值为0x5a5a5a5a。

5)core0_Pjt_Use文件夹中有加载时用到的bootload.asm文件和c6678.cmd文件,可以将C6678.cmd替代原工程中的.cmd文件,但若想用自己的.cmd文件,则可以按照c6678.cmd文件进行改正,需要注意的几点是:

a)在待烧写工程的.cmd文件中需要加上下面两句,作用是将汇编函数所在的段.bootload段放在内存的起始地址处。

BOOT(RWX):

org=0x00800000len=0x00000400

.bootload>BOOT//.bootload是在bootload.asm文件中定义的段

b)若工程的输出文件格式是ELF格式(在工程的Properties->CCSGeneral->Outputformat下)

,则需要在.cmd文件开始处加上:

--export=boot

此句的作用是说明被ELF的obj文件输出的符号。

若不加此句,则bootload.asm中的汇编函数不会输出,即在.map文件中看到的BOOT空间没有被用到。

若输出文件格式是COFF格式,则不需要加此句,否则编译出错。

c)若工程是用SYSBIOS进行存储空间的配置,则需要在SYSBIOS自动生成的.cmd中加上下面三句(可以参看example_pjt\C6678_EMIFboot_8cores_sysbios\Debug\configPkg\linker.cmd):

--export=boot//(放到MEMORY伪指令上面)

BOOT(RWX):

org=0x00800000len=0x00000400//(放到MEMORY伪指令里面)

.bootload>BOOT//(放到SECTION伪指令里)

3.2core1~core7待烧写工程说明

对于core1到core7的待烧写工程,若想正确加载,只需编写正确的.cmd文件,不管7个核是同一个工程还是不同工程,L2SRAM不要用GlobalL2,需要用LocalL2,比如0x11800000需改成0x00800000。

4EMIF16加载转换工具说明

4.1使用说明

在路径EMIFBootUtility\hex_ge6678_EMIFBoot中的EMIFboot_out2bin.bat是各核的代码转换工具,它的作用是将各核的待烧写工程的.out文件转换为.bin文件。

在转换之前,需要将.out文件重命名,对于core0的.out文件,命名为core0.out;对于其它7个核的.out文件,命名的规则是:

若core1~core7的待烧写工程全不相同,即有7个不同的.out文件,则将各核的.out文件命名为:

corex.out(x=1…7),即core1.out、core2.out、…….core7.out;若有些核的工程相同,即共同拥有一个.out文件,则将.out文件命名成其中核号小的名字,即若core1、core2、core4的.out相同,则将.out命名为:

core1.out。

重命名后,双击EMIFboot_out2bin.bat,按照DOS窗口的提示,依次点任意键,最后生成的.bin文件名字同.out文件名是对应的,最后将core0和其它核的.bin文件复制到烧写工程的文件夹中。

注:

此工具所使用的十六进制转换工具C66x_hex6x.exe同C6455的加载所用的hex6x.exe不一样,前者即可以转换ELF格式的.out文件,又可以转换COFF格式的.out文件,但是后者的hex6x.exe只能转换COFF格式的.out文件,鉴于最新的编译器都是默认ELF格式的输出文件,因此一律使用最新的C66x_hex6x.exe。

4.2生成文件格式说明

由于.bin文件不便于用户查看代码格式,因此为了方便用户更清楚的了解各核的代码经过转换后的格式,在工具中同时生成了.dat文件,可以参看EMIFBootUtility\hex_ge6678_EMIFBoot中生成的core0.dat和coreN.dat。

4.2.1

core0的.dat文件的格式

.dat文件头信息

1KB引导代码(.bootload段)

入口地址

Section1size

Section1addr

Section1data

Section2size

D

Section2addr

Section2data

.

.

.

LastSectionsize

LastSectionaddr

LastSectiondata

2------

 

E

 

图3core0的.dat文件格式

如上图所示:

A:

代表.dat的头信息,一般格式是:

165118000000008001。

B:

代表1KB引导代码,由待烧写工程中的bootload.asm文件中的汇编函数转换而来。

C:

待烧写工程开始运行时的入口地址。

D:

待烧写工程的各个段的格式,主要有.text、.cinit、.const、.switch等初始化段(initialized),没有未初始化段(uninitialized),具体跟工程有关,可以参看EMIFBootUtility中的core0.map文件或待烧写工程的.map文件,它们都是相互对应的。

注:

此文件限定core0的实际代码量在128KB以内,小于128KB时此工具自动在.dat后补0,若实际代码量超过128KB,可以修改此工具中EMIFboot_COFF2hex_core0.cmd中的len项,把它改到大于实际的代码量。

4.2.2

A

core1~core7的.dat文件的格式

B

.dat文件头信息

C

D部分总的代码字数(行数)

程序入口地址

Section1size

Section1addr

Section1data

Section2size

D

Section2addr

Section2data

.

.

.

LastSectionsize

LastSectionaddr

LastSectiondata

图4core1~core7的.dat文件格式

如上图所示:

A:

代表.dat的头信息,一般格式是:

165118000000001fb4。

B:

代表D部分总的字数(行数),即代码所有段的总大小,不包括入口地址,这个信息主要用于判断加载是否结束。

C:

待烧写工程开始运行时的入口地址。

D:

待烧写工程的各个段的格式,主要有.text、.cinit、.const、.switch等初始化段(initialized),没有未初始化段(uninitialized),具体跟工程有关,可以参看EMIFbootUtility\hex_ge6678_EMIFBoot中的coreN.map文件或待烧写工程的.map文件,它们都是相互对应的。

注:

此文件对代码量没有限定,最后生成的.dat文件的数据长度就是实际的代码量。

5烧写工程说明

5.1工程文件说明

文件夹c6678_EMIF_IntelNorFlash_Burn是将8个核的代码烧写到NorFlash的工程,此工程只需要core0执行即可。

其中的各个文件说明如下:

 

表2烧写工程文件的函数说明

文件名

功能、用途

包含的函数

函数功能

EMIF_main.c

包含主函数

main()

初始化外设,烧写8个核的代码

InitPLL_C6678.c

包含PLL的初始化函数

InitMainPLL()

初始化PLL

flash_nor.c

包含对flash的擦除、烧写的基本函数

NOR_init()

初始化NorFlash

NOR_erase()

擦除一定长度的NORFlash

NOR_writeBytes()

向NorFlash中写入一定长度的数据

KeyStone_EMIF16_Init.c

包含EMIF16接口的初始化函数

EMIF_init()

配置EMIF16接口的寄存器

KeyStone_EMIF16_init()

初始化EMIF16接口

EMIF_NOR_FLASH_test.c

包含对flash擦除、烧写的用户可调用函数

NOR_FLASH_erase_blocks()

擦除flash的某块区域

NOR_FLASH_write_block()

烧写flash的某块区域

NOR_FLASH_read_block()

读取flash的某块区域

5.2程序流程图

此烧写工程是将各核的.bin文件的数据烧写到NorFlash中去,对于core0来说,其.bin文件是必须要烧写的,而且烧写地址固定为0x70000000。

对于其它核core1~core7,由于它们的待烧写代码的情况很多,比如有些核的代码相同,有些核的代码不同,相同代码就烧到同一块空间,不同代码烧到不同空间,因此预定义core1~core7的Flash烧写地址,即为每个核的代码都分配一块Flash存储空间(见表1),然后由用户决定实际的烧写地址,为了统一,这里规定:

相同代码都烧到预定义的核号小的Flash空间(由表1分配的,不包括core0),例如core1、core5、core7的代码相同,则它们三个的烧写地址是core1的flash空间0x70200000(注意不管core1~core7的待烧写工程跟core0的是不是同一个,core1~core7的代码不能烧到core0的预定义空间),为了避免相同代码烧写多次,这里加入判断,若用户定义的某个核的实际烧写地址不是预定义的地址,则不烧写。

比如core1和core4的代码相同,则用户定义core1和core4的Flash烧写地址是core1的Flash空间0x70200000,则执行core1的代码烧写,由于core4的跟预定义的不相同,则不执行core4的烧写,因此只烧写一次。

以烧写core1的代码为例,流程图如下:

 

图5core1代码烧写流程图

6BootMode设定

烧写完毕,为了验证加载是否成功,需要将加载方式设置成EMIF16加载,C6678芯片专有BootModepin[12:

0]控制加载方式,对于EMIF16boot,BootModepin[12:

0]=0b0000000100000,如下表所示:

表3BootModepins定义

BootModePins

12

11

10

9

8

7

6

5

4

3

2

1

0

PLLMult

DeviceConfiguration

BootDevice

000

0000100

000

BootModepins[12:

0]与GPIO[13:

1]共享管脚,因此,可以通过GPIO[13:

1]来控制BootModepins[12:

0],具体到开发板上,可以查看是否由拨码开关或FPGA程序来控制。

设置完成后,可以通过CCS查看DEVSTAT寄存器(地址为0x02620020)是否为0x41。

如下表所示:

表4DEVSTAT寄存器[13:

0]的含义

13

12

11

10

9

8

7

6

5

4

3

2

1

0

BootModepins[12:

0]

LENDIAN

0000000100000

1

7加载成功检验

按照上述步骤操作完成之后,将板卡断电并重新上电之后,为了检验是否加载成功,最好是按例子example_pjt中那样,在待烧写的工程中加上Timer点灯程序,上电后若LED灯闪,则说明加载成功。

也可以将CCS与C6678连接上之后,看PC指针的值,若PC指针的值在ROM里(0x20B00000到0x20B1FFFF),则说明加载不成功,若PC指针的值在内存范围(如0x00830000),则说明加载成功。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1