⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bootloader.txt

📁 dsp开发过程中必备的参考资料,内有常见开发经常遇到问题的说明及应注意的问题
💻 TXT
字号:
--------------------------------------------------------------------------------

看了上面有这么多老兄的讨论,就想起一年前我也是一头雾水地
扎在ti的文档里查bootloader的资料,我当时用的还是C542芯片
,虽然ti把它的bootloader吹得那么牛,但是我就是用不起来,后
来只好痛下决心自己写一个bootloader的程序.
但是这个过程浪费了我一个多月的时间,现在想起来,浪费了我
多少泡网的好机会!
现在我把我的一些想法贴出来,希望减少大家摸索的时间,我想我的
第一条忠告就是: 不要用芯片内部的bootloader!!
不要管文档上是怎么吹嘘的,我当时就发现几个文档之间居然有自
相矛盾的地方.自己写的程序才能自己把握它到底干了些啥,包括
能够从什么地方运行,怎么运行,copy多长的程序.
所以万一你发现你没法解决你的bootloader程序时,你就自己写吧!
幸运的是:它太简单了,下面就是我当时写的bootloader程序:
.def load_start
.sect "load_prg"
load_start:
ssbx intm
ld #0,dp
nop
ld #0ff80h,a ;move vectors
stm #2780h, ar1
rpt #(70h-1)
reada *ar1+
nop
ld #0c000h,a ;move main_prg
stm #80h,ar1
rpt #(250h-1)
reada *ar1+
endboot:
orm #020h,@1dh ;ovly=1
ld #80h,a
bacc a
.end
大家一看就知道她就干了两件事
1.把eprom中放到0xff80处的中断矢量表拷贝到片内0x2780处,
作为中断向量表的新地方;
2.把eprom中放到0xC000处的程序拷贝到以0x80起始的片内
内存处
最后别忘了置OVLY=1,还有跳转到你的程序上去运转,呵呵.

另外,在你的程序里初始化DSP芯片时加上一句:

STM #27e0h,PMST ,保证interput vector pointer正确指向0x2780

简单吧? ^_*

让我们再来看中断矢量表:
.mmregs
.ref SYSTEM_STACK
.ref BSP_receive_int
.ref BSP_transmit_int
.ref TDM_receive_int
.ref main_start
.ref load_start
.def reset
.def nmi
.def brint
.def bxint
.def trint
.def txint
.def int0
.def int1
.def int2
.def int3
.sect "vectors"
reset: BD load_start ; RESET vector
STM #SYSTEM_STACK,SP
nmi: RETE
NOP
NOP
NOP ;NMI~
; software interrupts
sint17 .space 4*16
sint18 .space 4*16
sint19 .space 4*16
sint20 .space 4*16
sint21 .space 4*16
sint22 .space 4*16
sint23 .space 4*16
sint24 .space 4*16
sint25 .space 4*16
sint26 .space 4*16
sint27 .space 4*16
sint28 .space 4*16
sint29 .space 4*16
sint30 .space 4*16
int0: RETE
NOP
NOP ; INT0
NOP
int1: RETE ;
NOP
NOP ; INT1
NOP
int2: RETE
NOP
NOP
NOP
tint: RETE
NOP
NOP ; TIMER
NOP
brint: BD BSP_receive_int ; Buffered serial port receive intr
PSHM ST0
PSHM ST1
bxint: BD BSP_transmit_int ; Buffered serial port transmit intr
PSHM ST0
PSHM ST1
trint: BD TDM_receive_int ; TDM serial port receive intr
PSHM ST0
PSHM ST1
txint:
RETE
NOP
NOP
NOP
int3: RETE
NOP
NOP ;INT3
NOP
hpiint: RETE ; HPI interrupt
NOP
NOP
NOP
.end
注意这个中断矢量表的第一句话就是跳转到load_start运行,就是
我们刚才看到的bootloader程序.注意把这个中断矢量表要放到
eprom中的0xff80上去.
让我们看看linker的cmd文件,
MEMORY
{
PAGE 0: PROG0 : origin = 00080h length = 00780h /* on-chip program */
PROG1 : origin = 02780h length = 00080h
PROG2 : origin = 0c000h length = 04000h
/* RAM */
PAGE 1: RAM0 : origin = 00060h length = 00020h /* 32 word scratch */
RAM1 : origin = 00800h length = 00800h /*1k */
RAM2 : origin = 01000h length = 01780h /*2k*/
}
SECTIONS
{
main_prg: load = 0c000h,run=80h
vectors: load = 0ff80h,run=02780h
load_prg: load = 0f800h

~
~
~
}
最后就是hex conversion utility所要的 cmd文件,注意程序和中断失量一块儿放到
eprom中0xC000开始的地址上去了
xifp4.out
-i
-map xifphex.mxp
-o xifp.hex
-image
-memwidth 16
-romwidth 8
ROMS
{
EPROM: org = 0C000h,length =04000h, romwidth = 8
files = { eprom.b0, eprom.b1 }
}
呵呵,好了就着么多了,真是太简单了,根本没必要和ti瞎折腾. 呵呵,希望对大家有用

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -