收藏 分享(赏)

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

上传人:yjrm16270 文档编号:6834321 上传时间:2019-04-23 格式:DOC 页数:14 大小:147.36KB
下载 相关 举报
TMS320C6678的EMIF16多核程序烧写的软件使用说明.doc_第1页
第1页 / 共14页
TMS320C6678的EMIF16多核程序烧写的软件使用说明.doc_第2页
第2页 / 共14页
TMS320C6678的EMIF16多核程序烧写的软件使用说明.doc_第3页
第3页 / 共14页
TMS320C6678的EMIF16多核程序烧写的软件使用说明.doc_第4页
第4页 / 共14页
TMS320C6678的EMIF16多核程序烧写的软件使用说明.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、ITMS320C6678 的 EMIF16 多核程序烧写软件使用说明II目 录1 概述 .61.1 范围 .61.2 目的 .61.3 设计依据 .61.4 背景 .61.5 开发环境和运行环境 .62 任务概述 .63 多核的待烧写工程说明 .73.1 core0 待烧写工程说明 .73.1.1 工程文件说明 73.1.2 程序流程图 83.1.3 操作步骤 83.2 core1core7 待烧写工程说明 94 EMIF16 加载转换工具说明 104.1 使用说明 .104.2 生成文件格式说明 .104.2.1 core0 的.dat 文件的格式 .104.2.2 core1core7 的

2、.dat 文件的格式 115 烧写工程说明 .115.1 工程文件说明 .115.2 程序流程图 .126 Boot Mode 设定 137 加载成功检验 .133图表目录图 1 TMS320C6678 的 EMIF16 多核加载总体框图 .6图 2 core0 待烧写程序的执行过程 .8图 3 core0 的.dat 文件格式 10图 4 core1core7 的.dat 文件格式 .11图 5 core0 代码烧写流程图 .12表 1 八个核的代码在 Flash 中的空间分配 .9表 2 烧写工程文件的函数说明 11表 3 Boot Mode pins 定义 .134符号和缩略词说明DSP

3、:数字信号处理器(Digital Signal Processor)SPI:串行设备接口(Serial Peripheral Interface)EMIF16:外部存储器接口(External Memory Interface)DDR3:外部存储器PLL:锁相环L2 SRAM:二级静态存储器IPC:核间通信(Interprocessor Communications)5TMS320C6678 的 EMIF16 多核程序烧写软件使用说明1 概述1.1 范围本文档包括:TMS320C6678 的 EMIF16 多核程序烧写软件使用说明。1.2 目的指导 C6678 的 EMIF16 多核程序烧写过

4、程。1.3 设计依据1.TMS320C6678 Multicore Fixed and Floating-Point Digital Signal Processor data manual,德州仪器2.KeyStone Architecture Bootloader User Guide, 德州仪器1.4 背景a) 本项目的任务提出者:雷达所 9 号楼课题组b) 开发者:边小艳c) 用户:课题组内部1.5 开发环境和运行环境开发工具:CCStudio v5.1。运行的硬件环境:TMS320C6678 芯片,EMIF16 外挂并行 Nor Flash,Nor Flash 容量为 32MB,可选

5、型号如 Numonyx 生产的 JS28F256P,Spansion 生产的 S29NS256 等。2 任务概述TMS320C6678 的 EMIF16 多核程序烧写主要包括三个部分:多核的待烧写工程 , 烧写转换工具以及烧写工程。三个部分之间的联系如下图所示: NOR Flash.out .bin多核的待烧写工程: core0 的待烧写工程除了完成自身的处理任务外,还要实现加载其它待加载的核,因此需要在 core0 的待烧写工程中增添加载这部分程序,其它核的待烧写工程不需要添加,若多核是同一个工程,则需要在 core0 的处理程序中添加加载程序。 具体请看第 3 节。 烧写转换工具:在路径

6、EMIFBootUtilityhex_ge6678_EMIFBoot 中的 EMIFboot_out2bin.bat 是各核的代码转换工具,实现将各核的.out 文件转换成.bin 文件,八个核使用同一个转换工具,但是在转换之前需要将.out 文件重命名,具体使用方法请参看第 4 节。图 1 TMS320C6678 的 EMIF16 多核加载总体框图6烧写工程:将待烧写的核的.bin 文件通过 EMIF16 接口烧写到外接 Nor Flash 中去,具体请看第5 节。3 多核的待烧写工程说明3.1 core0 待 烧写工程说明在 core0 的待烧写工程中,除了完成自身的任务之外,还要作为主核

7、去加载其他的核,因此,加载这部分作为一个单独的模块整理在一个文件夹 core0_Pjt_Use 中,对于 core0 的待烧写工程,只要把这个文件夹放到此工程中,并调用加载函数 Core0_EMIF16_BOOT()即可。3.1.1 工程文件说明在 core0_Pjt_Use 文件夹主要有如下文件:表 1 core0_Pjt_Use 文件函数说明文件名 功能、用途 包含的函数 函数功能EMIFboot.c 包含加载多核的函数 Core0_EMIF16_BOOT()初始化 EMIF16 接口,加载其它需要加载的核,在主函数中直接被调用Init_DDR3_C6678.c 包含 DDR3 接口初始化

8、函数 Init_DDR3() 初始化 DDR3 接口InitPLL_C6678.c 包含 PLL 的初始化函数 InitMainPLL() 初始化 PLLCore0_Boot_Secondarycore ()Core0 从 Flash 中读出某个核的代码并按段加载core0_boot.c 包含加载单核的函数core0_boot_othercores() 将 Flash 中的数据写到其他核的 L2 中NOR_init() 初始化 Nor FlashNOR_erase() 擦除一定长度的NOR Flashflash_nor.c 包含对 flash 的擦除、烧写的基本函数NOR_writeBytes

9、() 向 Nor Flash 中写入一定长度的数据EMIF_init() 配置 EMIF16 接口的寄存器KeyStone_EMIF16_Init.c 包含 EMIF16 接口的初始化函数KeyStone_EMIF16_init() 初始化 EMIF16 接口NOR_FLASH_erase_blocks() 擦除 flash 的某块区域NOR_FLASH_write_block() 烧写 flash 的某块区域EMIF_NOR_FLASH_test.c包含对 flash 擦除、烧写的用户可调用函数NOR_FLASH_read_block() 读取 flash 的某块区域7文件名 功能、用途 包

10、含的函数 函数功能bootload.asm 包含 core0 自身加载的汇编函数 boot()从 flash 中读取 core0的代码按段加载,并跳到入口地址C6678.cmd 链接命令文件存储器空间配置和段的配置,主要是为.bootload 段的分配3.1.2 程序流程图上电后,core0 待烧写程序的执行过程如下:上电在 main 入口地址处开始执行,初始化外设(3)结束core0 加载其他待加载的核(4)其他处理模块(5)core0 执行 Rom code,初始化 EMFI16 接口,并跳到 Nor Flash 起始地址执行(1)core0 在 Nor Flash 中执行 bootloa

11、d,将代码按段从 Nor Flash 搬到内存(2)注:如上图所示, (1)中的 Rom code 是 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+ 图 2 core0 待烧写程序的执行

12、过程8BuildSettingInclude Option 的搜寻路径中。3) 在待烧写主程序 main 中调用 EMIFboot.c 中的加载函数 Core0_EMIF16_BOOT()。4) 在 EMIFboot.c 中定义各核的代码烧写到 Nor Flash 中的地址(加载时的源地址) 。在 7 个核的工程全不相同的情况下,需要将 7 个核的代码烧到 7 块不同的空间,这里为每个核预定义的 Flash 空间分配如下:表 1 预定义的八个核的 Flash 空间分配若某些核的代码相同,则需要烧写到 Flash 的同一块空间,为了统一,这里规定:相同代码都烧到核号小的 Flash 空间(由表一

13、分配的),例如 core1、core5 、core7 的代码相同,则它们三个的烧写地址是 0x70200000。若某些核不需要加载,则定义加载地址无效,无效值为 0x5a5a5a5a。5) core0_Pjt_Use 文件夹中有加载时用到的 bootload.asm 文件和 c6678.cmd 文件,可以将C6678.cmd 替代原工程中的.cmd 文件,但若想用自己的.cmd 文件,则可以按照 c6678.cmd 文件进行改正,需要注意的几点是:a) 在待烧写工程的.cmd 文件中需要加上下面两句,作用是将汇编函数所在的段.bootload 段放在内存的起始地址处。BOOT (RWX) :

14、org = 0x00800000 len = 0x00000400.bootload BOOT /.bootload 是在 bootload.asm 文件中定义的段b) 若工程的输出文件格式是 ELF 格式(在工程的 Properties-CCS General-Output format 下),则需要在.cmd 文件开始处加上:-export=boot此句的作用是说明被 ELF 的 obj 文件输出的符号。若不加此句,则 bootload.asm 中的汇编函数不会输出,即在.map 文件中看到的 BOOT 空间没有被用到。若输出文件格式是 COFF 格式,则不需要加此句,否则编译出错。c)

15、若工程是用 SYS BIOS 进行存储空间的配置,则需要在 SYS BIOS 自动生成的.cmd 中加上下面三句(可以参看 example_pjtC6678_EMIFboot_8cores_sysbiosDebugconfigPkglinker.cmd):-export=boot / (放到 MEMORY 伪指令上面)BOOT (RWX) : org = 0x00800000 len = 0x00000400/(放到 MEMORY 伪指令里面).bootload BOOT/(放到 SECTION 伪指令里)核名 Nor Flash起始地址 Nor Flash结束地址 预留空间大小Core1 0

16、x70200000 0x703FFFFF 2MBCore2 0x70400000 0x705FFFFF 2MBCore3 0x70600000 0x707FFFFF 2MBCore4 0x70800000 0x709FFFFF 2MBCore5 0x70A00000 0x70BFFFFF 2MBCore6 0x70C00000 0x70DFFFFF 2MBCore7 0x70E00000 0x70FFFFFF 2MB93.2 core1core7 待烧写工程说明对于 core1 到 core7 的待烧写工程,若想正确加载,只需编写正确的.cmd 文件,不管 7 个核是同一个工程还是不同工程,

17、L2 SRAM 不要用 Global L2,需要用 Local L2,比如 0x11800000 需改成0x00800000。4 EMIF16 加载转换工具说明4.1 使用说明在路径 EMIFBootUtilityhex_ge6678_EMIFBoot 中的 EMIFboot_out2bin.bat 是各核的代码转换工具,它的作用是将各核的待烧写工程的.out 文件转换为.bin 文件。在转换之前,需要将.out 文件重命名,对于 core0 的.out 文件,命名为 core0.out;对于其它 7个核的.out 文件,命名的规则是:若 core1core7 的待烧写工程全不相同,即有 7

18、个不同的.out 文件,则将各核的.out 文件命名为: corex.out(x=17),即 core1.out、core2.out、.core7.out;若有些核的工程相同,即共同拥有一个.out 文件,则将.out 文件命名成其中核号小的名字,即若core1、 core2、 core4 的.out 相同,则将.out 命名为:core1.out 。重命名后,双击 EMIFboot_out2bin.bat,按照 DOS 窗口的提示,依次点任意键,最后生成的 .bin 文件名字同.out 文件名是对应的,最后将 core0 和其它核的.bin 文件复制到烧写工程的文件夹中。注:此工具所使用的十

19、六进制转换工具 C66x_hex6x.exe 同 C6455 的加载所用的 hex6x.exe 不一样,前者即可以转换 ELF 格式的 .out 文件,又可以转换 COFF 格式的.out 文件,但是后者的hex6x.exe 只能转换 COFF 格式的.out 文件,鉴于最新的编译器都是默认 ELF 格式的输出文件,因此一律使用最新的 C66x_hex6x.exe。4.2 生成文件格式说明由于.bin 文件不便于用户查看代码格式,因此为了方便用户更清楚的了解各核的代码经过转换后的格式,在工具中同时生成了.dat 文件,可以参看 EMIFBootUtilityhex_ge6678_EMIFBoo

20、t 中生成的 core0.dat 和 coreN.dat。4.2.1 core0 的.dat 文件的格式.dat 文件头信息1KB 引导代码(.bootload 段)入口地址Section 1 sizeSection 1 addrSection 1 dataSection 2 sizeSection 2 addrSection 2 data行数 1-D10图 3 core0 的.dat 文件格式如上图所示:A: 代表.dat 的头信息,一般格式是:1651 1 80000000 0 8001 。B: 代表 1KB 引导代码,由待烧写工程中的 bootload.asm 文件中的汇编函数转换而来。

21、C: 待烧写工程开始运行时的入口地址。D:待烧写工程的各个段的格式,主要有 .text、.cinit、.const、.switch 等初始化段(initialized),没有未初始化段(uninitialized),具体跟工程有关,可以参看 EMIFBootUtility 中的 core0.map 文件或待烧写工程的.map 文件,它们都是相互对应的。注:此文件限定 core0 的实际代码量在 128KB 以内,小于 128KB 时此工具自动在.dat 后补 0,若实际代码量超过 128KB,可以修改此工具中 EMIFboot_COFF2hex_core0.cmd 中的 len 项,把它改到大

22、于实际的代码量。4.2.2 core1core7 的.dat 文件的格式.dat 文件头信息D 部分总的代码字数(行数)程序入口地址Section 1 sizeSection 1 addrSection 1 dataSection 2 sizeSection 2 addrSection 2 data.Last Section sizeLast Section addrLast Section dataABEC2-258-259-261-260-ABCD11Last Section sizeLast Section addrLast Section data图 4 core1core7 的.da

23、t 文件格式如上图所示:A: 代表.dat 的头信息,一般格式是:1651 1 80000000 0 1fb4 。B: 代表 D 部分总的字数(行数 ),即代码所有段的总大小,不包括入口地址,这个信息主要用于判断加载是否结束。C: 待烧写工程开始运行时的入口地址。D:待烧写工程的各个段的格式,主要有 .text、.cinit、.const、.switch 等初始化段(initialized),没有未初始化段(uninitialized),具体跟工程有关,可以参看 EMIFbootUtilityhex_ge6678_EMIFBoot中的 coreN.map 文件或待烧写工程的.map 文件,它们

24、都是相互对应的。注:此文件对代码量没有限定,最后生成的.dat 文件的数据长度就是实际的代码量。5 烧写工程说明5.1 工程文件说明文件夹 c6678_EMIF_IntelNorFlash_Burn 是将 8 个核的代码烧写到 Nor Flash 的工程, 此工程只需要 core0 执行即可。其中的各个文件说明如下:表 2 烧写工程文件的函数说明文件名 功能、用途 包含的函数 函数功能EMIF_main.c 包含主函数 main() 初始化外设,烧写 8个核的代码 InitPLL_C6678.c 包含 PLL 的初始化函数 InitMainPLL() 初始化 PLLNOR_init() 初始化

25、 Nor FlashNOR_erase() 擦除一定长度的NOR Flashflash_nor.c 包含对 flash 的擦除、烧写的基本函数NOR_writeBytes() 向 Nor Flash 中写入一定长度的数据EMIF_init() 配置 EMIF16 接口的寄存器KeyStone_EMIF16_Init.c 包含 EMIF16 接口的初始化函数KeyStone_EMIF16_init() 初始化 EMIF16 接口NOR_FLASH_erase_blocks() 擦除 flash 的某块区域NOR_FLASH_write_block() 烧写 flash 的某块区域EMIF_NOR

26、_FLASH_test.c包含对 flash 擦除、烧写的用户可调用函数NOR_FLASH_read_block() 读取 flash 的某块区12文件名 功能、用途 包含的函数 函数功能域5.2 程序流程图此烧写工程是将各核的.bin 文件的数据烧写到 Nor Flash 中去,对于 core0 来说,其.bin 文件是必须要烧写的,而且烧写地址固定为 0x70000000。对于其它核 core1core7,由于它们的待烧写代码的情况很多,比如有些核的代码相同,有些核的代码不同,相同代码就烧到同一块空间,不同代码烧到不同空间,因此预定义 core1core7 的 Flash 烧写地址,即为每

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

28、预定义的地址,则不烧写。比如 core1 和 core4 的代码相同,则用户定义 core1 和 core4 的 Flash 烧写地址是 core1 的 Flash 空间 0x70200000,则执行 core1 的代码烧写,由于 core4 的跟预定义的不相同,则不执行 core4 的烧写,因此只烧写一次。以烧写 core1 的代码为例,流程图如下:13core1 代码烧写开始用 fopen 打开 core1.bin 文件,文件指针赋给 fpcore1_FlashAddresss?=0x70200000用 fread 读取 core1.bin 并存入数组,返回文件数据项个数根据文件数据项个数

29、,将数组中的代码烧写到 Nor Flash烧写结束YN6 Boot Mode 设定烧写完毕,为了验证加载是否成功,需要将加载方式设置成 EMIF16 加载,C6678 芯片专有Boot Mode pin12:0控制加载方式,对于 EMIF16 boot, Boot Mode pin12:0=0b0000000100000,如下表所示:表 3 Boot Mode pins 定义Boot Mode Pins12 11 10 9 8 7 6 5 4 3 2 1 0PLL Mult Device Configuration Boot Device000 0000100 000Boot Mode pin

30、s 12:0与 GPIO13:1共享管脚,因此,可以通过 GPIO13:1来控制 Boot Mode pins12:0,具体到开发板上,可以查看是否由拨码开关或 FPGA 程序来控制。设置完成后,可以通过 CCS 查看 DEVSTAT 寄存器( 地址为 0x02620020)是否为 0x41。如下表所示:图 5 core1 代码烧写流程图14表 4 DEVSTAT 寄存器13:0的含义13 12 11 10 9 8 7 6 5 4 3 2 1 0Boot Mode pins 12:0 LENDIAN00 0000 0100 000 17 加载成功检验按照上述步骤操作完成之后,将板卡断电并重新上电之后,为了检验是否加载成功,最好是按例子 example_pjt 中那样,在待烧写的工程中加上 Timer 点灯程序,上电后若 LED 灯闪,则说明加载成功。也可以将 CCS 与 C6678 连接上之后,看 PC 指针的值,若 PC 指针的值在 ROM 里(0x20B00000 到 0x20B1FFFF),则说明加载不成功,若 PC 指针的值在内存范围(如 0x00830000),则说明加载成功。

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

当前位置:首页 > 实用文档 > 说明文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报