C28x十六进制应用程序(hex2000.exe)支持引导装载器的数据流结构,该程序包含在C2000代码生成工具中。
数据流结构的数值皆为十六进制。数据流的第一个16位字为关键值。该关键值告知引导装载器(Bootloader)到来的数据流宽度是8位还是16位。注意并非所有的引导装载器都接受8位和16位数据流。需要参考具体引导装载器的详细信息来获取有效的数据流宽度。对于8位的数据流,关键值是0x08AA;对于16位的数据流,关键值是0x10AA。如果引导装载器接收到一个无效的关键值,那么装载就中断。
接下来的8位字用于初始化寄存器值或者通过传递数值增强引导装载器。如果引导装载器不使用这些值,那么它们被保留以备将来使用,并且引导装载器读取这些值后再丢弃它。当前,只有SPI、I2C和并行I/O引导装载器使用这些字来初始化寄存器。
第10和11位字组成了22位的入口地址。这一地址在引导加载完成后用于初始化PC寄存器。这一地址一般为引导装载器所下载程序的入口。
数据流中的第12个字是要发送的第一个数据块的长度。不管被定义为8位还是16位数据流格式,块的长度都是以16位字定义的。例如,从8位数据流中发送20个8位的数据值,块的长度应该是0x000A,表示10个16位的数据。
对于每一个被传送的数据块,块长度与目的地址的样式不断重复。接下来的两个字表示装载数据块的目标地址,在数据大小和地址之后将是16位字的数据块。一旦所有的块都被发送,一个块长度为0x0000的信号告知装载器所有的发送都已经完成,引导装载器将会返回入口地址到调用程序处,在此清理并退出。然后从由输入数据流内容确定的入口地址继续执行。
例14-5 16位数据流结构
10AA;0x10AA,16位关键值
0000 0000 0000 0000 ;8个保留字
0000 0000 0000 0000
003F 8000 ;0x003F8000入口地址(EntryAddr),引导完成后的开始点
0005 ;0x0005,5个16位字组成的第一个数据块
003F 9010 ;0x003F9010,第一个块将会从0x3F9010处装入
0001 0002 0003 0004 ;装载的数据=0x000l 0x0002 0x0003 0x0004 0x0005
0005
0002 ;0x0002,两个l6位字组成的第二个块
003F 8000 ;0x003F8000,第二个块将会从0x3F8000处装载
7700 7625 ;装载的数据=0x7700 0x7625
0000 ;0x0000,长度0指示数据流结束
单元 值
0x3F9010 0x0001
0x3F9011 0x0002
0x3F9012 0x0003
0x3F9013 0x0004
0x3F9014 0x0005
0x3F8000 0x7700
0x3F8001 0x7625
PC从0x3F8000处开始执行。
在8位模式下,字的最低位字节(LSB)在最高位字节(MSB)之后发送。对于32位的值例如目标地址,最高位字(MSW)首先被装载,然后是最低位字节(LSW)。(www.daowen.com)
例14-6 8位数据流结构
AA 08 ;0x08AA,8位关键值
00 00 00 00 ;8个保留字
00 00 00 00
00 00 00 00
00 00 00 00
3F 00 00 80 ;0x003F8000入口地址(EntryAddr),引导完成后的开始点
05 00 ;0x0005,5个16位字组成的第一个数据块
3F 00 10 90 ;0x003F9010,第一个块将会从0x3F9010处装入
01 00 ;装载的数据=0x0001 0x0002 0x0003 0x0004 0x0005
02 00
03 00
04 00
05 00
02 00 ;0x0002,两个16位字组成的第二个块
3F000080 ;0x003F8000,第二个块将会从0x3F8000处装载
0077 ;装载的数据=0x77000x7625
2576
0000 ;0x0000,长度0指示数据流结束
在装载完成后,以下的存储器单元值将会进行如下的初始化:
单元 值
0x3F9010 0x0001
0x3F9011 0x0002
0x3F9012 0x0003
0x3F9013 0x0004
0x3F9014 0x0005
0x3F8000 0x7700
0x3F8001 0x7625
PC从0x3F8000处开始执行。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。