首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
C5402 DSP自举引导方法的分析与研究
来源:本站整理  作者:佚名  2009-03-26 16:41:40



0000:F831 

  STM #0h, @xentry       ;初始化程序入口地址

  STM #boot, @entry      ;

  PORTR #0FFFFh,@src     ;从I/O口读取自举表的首地址 

    MVDK @src,AR1          ;将自举表的首地址送至AR1中

    LD  *AR1+,A            ;(AR1)→A, AR1=AR1+1

  SUB #010AAh,A,B       ;B=A-10AAh

  BC  par16,BEQ          ;若B=0,执行16位并行自举程序

    AND #0FFh,A            ;屏蔽A高16位

  SUB #08h,A,B          ;B=A-08h

  BC  chk_data,BNEQ      ;若B≠0, 程序跳转至chk_data

  LD  *AR1+,A            ; (AR1)→A, AR1=AR1+1

  AND #0FFh,A            ;屏蔽A高16位

  SUB #0AAh,A            ;A=A-0AAh

  BC  par08,AEQ          ;若A=0, 执行8位并行自举程序chk_data STM #0FFFFh,AR1 ;从数据存储器读取自举表首地址

  NOP                     ;避免流水线冲突

  NOP                     ;避免流水线冲突

  LD  *AR1+,A            ;(AR1)→A, AR1=AR1+1

  STLM A,AR1             ;将A低16位内容存入AR1中

  NOP                     ;避免流水线冲突

  NOP                     ;避免流水线冲突

  LD *AR1+,A             ;(AR1)→A, AR1=AR1+1

  SUB #010AAh,A,B       ;B=A-10AAh

  BC  par16,BEQ          ;若B=0,执行16位并行自举程序

   STM #0FFFFh,AR1        ;(0FFFFh)→AR1

  NOP                     ;避免流水线冲突

  NOP                     ;避免流水线冲突

  LDU *AR1-,A            ;(AR1)→A,AR1=AR1-1,符号位置0

  AND #0FFh,A            ;屏蔽A高16位

  SUB #08h,A,B          ;B=A-08h

  BC  ser_ini,BNEQ       ;若B≠0, 程序跳转至ser_ini

  LD *AR1+,A             ;(AR1)→A, AR1=AR1+1

  AND #0FFh,A            ;屏蔽A高16位

  SUB #0AAh,A            ;A=A-0AAh

  BC  par08,AEQ          ;若A=0,执行8位并行自举程序

  ser_ini

  ...                     ;标准串行口自举引导程序

  par08

  ...                     ;8位并行自举搬移程序

  par16

  ...                     ;16位并行自举搬移程序

3 自举表的建立

  自举表的内容不仅包括了欲加载的各段代码,而且包括各段代码长度、各代码段存放的目标地址、程序入口地址等信息。因此若想利用自举引导功能,首先必须正确建立自举表。自举表可由hex500格式转换器自动生成。hex500实际为一通用程序,它将公共目标文件格式——COFF文件转换成各种EPROM或FLASH的编程格式。因此,在使用hex500工具之前,首先必须对DSP的汇编语言、C语言或两者的混合编程语言进行汇编、编译、链接,生成COFF格式的.out文件,然后再通过设置适当的选项生成用户所要求的自举表。

  为了书写及修改方便,可将hex500的所有选项及输入输出文件名以.cmd 批处理命令文件的形式保存。下面以一个DSP汇编语言程序example.asm为例,说明建立’C5402自举表的具体步骤。

  第一步:对example.asm进行编译,生成example.obj文件。不论是用Windows 环境下的CCS(Code Composer Studio),还是用DOS环境下的asm500命令文件,编译时必须加选项—v548,且DOS的asm500版本必须在1.2以上,否则无法生成正确的’C5402自举表。

  第二步:链接,生成example.out文件。

  第三步:使用hex500格式转换工具,将example.out文件转换成example.hex文件,命令格式如下:

  C:tic5400cgtoolsbin>hex500 example.cmd

  注:在上面的命令行中,example的扩展名cmd一定要加上。

  以下是命令文件example.cmd的内容:

  example.out     /*被转换的COFF文件名

  -e 200h         /*程序入口地址被定义为200h

  -a              /*转换为ASCII-hex格式文件

  -o example.hex  /*转换后文件名为example.hex

  -memwidth 16    /*外部数据存储器字宽为16位

  -romwidth 16    /*ROM字宽为16位

  -boot           /*将COFF文件中各段均转换至自举表

  -bootorg 8000h  /*存放自举表的首地址为8000h

  如果example.asm是一个简单的求乘法累加运算,程序内容如下[2]:

  *****************************************

  * example.asm y=a1*x1+a2*x2+a3*x3+a4*x4   *

  *****************************************

上一页  [1] [2] [3] [4]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:111,703.10000 毫秒