网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: TI德州中文网 >> 技术文库 >> C5000文章 >> TMS320C54x >> 正文
  TMS320VC5416内部ROM中的BOOTLOADER程序注释C2000           ★★★ 【字体:
TMS320VC5416内部ROM中的BOOTLOADER程序注释C2000
作者:TIchines…    文章来源:德洲中文网    点击数:    更新时间:2006-11-28    

MP/MC=0的时候DSP自动从内部ROM的FF80执行。
      Dsp的vect
      0000:FF80 F273      BD&nb sp;   0f800h
      0000:FF82 7718      STM&n bsp;  6fh,18h
      /**********************************************/
      以下是ROM中的BOOTLOADER程序

      0000:F800 F7BB      SSBX  INTM/*屏蔽所有中断*/
      0000:F801 EA00      LD    #0h,DP/*数据页指向0页*/
      0000:F802 7701      STM&n bsp;  0ffffh,1h
      0000:F804 6907      ORM   2b00h,7h/*设置ST1寄存器,xf,intm,ovm.sxm置1*/

      0000:F806 691D      ORM   20h,1dh/*PMST设置,MC模式片内RAM映射到data/program
      0000:F808 7728      STM   7fffh,28h/*设置SWWSR,等待状态为7个周期*/
      0000:F80A 7718      STM   7dh,18h/*设置SP
      0000:F80C F073      B&nbs p;    0f80eh

      /****************************具体BOOT模式识别********************************/
      /***************************** HPI模式识别*******************************/
      0000:F80E 777E      STM   0h,7eh/*7Eh,7fH为HPI模式BOOT放入口地址的地方,所以
      先清0。*/   
      0000:F810 777F      STM&n bsp;  0h,7fh  
      0000:F812 772C      STM   0ah,2ch /*HPIC控制寄存器
      0000:F814 7734      STM   0eh,34h/*MCBSP2子地址寄存器*/
      0000:F816 7735      STM   2020h,35h/*送2020h到PCR2*/
      0000:F818 EC05      RPT&n bsp;  #5h
      0000:F819 F495      NOP   /*等待*/
      0000:F81A 7735      STM   2000h,35h/*Dx脚设置为IO,先输出1,再输出0*/
      0000:F81C EC05      RPT&n bsp;  #5h
      0000:F81D F495      NOP&n bsp; 
      0000:F81E 6101      BITF  1h,4h/*判断int2脚的电平(IFR与4H的值送入TC)*/
      0000:F820 F495      NOP&n bsp; 
      0000:F821 F830      BC    0f82ah,TC/*INT2为高的话,认为是HPI模式跳转到相应处
      理程序f82a处*/
      /***********************************************************
      *****************/
      /***********************************************************
      *****************/
      /***********************************************************
      *****************/
      /***********************************************************
      *****************/
      /************************SPI EEPROM模式识别****************************/
      0000:F823 6101   BITF  1h,100h/*判断INT3的值,确定是否为SPI EEPROM模式*/
      0000:F825 F495   NOP  
      0000:F826 F830   BC    0fa02h,TC   /*是的话转入相应处理程序FA02H处*/
      0000:F828 F073   B     0f831h      /*否则跳转到f831h(parallel模式判断)*/
      /××××××××××××××××××××××××××××××××××××××/
      /****************************HPI模式处理**********************************/
      0000:F82A 7701      STM&n bsp;  4h,1h
      0000:F82C 127F      LDU&n bsp;  7fh,A
      0000:F82D F844      BC    0f8e6h,ANEQ/*如果7fH处的值不等于0,说明外部HOST
      已经把程序加载进去了,则跳转到F8E6处理*/
      0000:F82F F073      B     0f82ch/*否则就循环检测7fH处是否写入了正确的程序入口
      地址,由于用ANEQ做跳转条件,所以HOST模式BOOT程序入口地址不能为0 ,为0 则能正确引导
      /××××××××××××××××××××××××××××××××××××××/

      /***********************************************************
      *****************/
      /***********************************************************
      *****************/
      /***********************************************************
      *****************/
      /***********************************************************
      *****************/
      /****************************并行BOOT模式识别**************************/
      先从IO空间判断
      0000:F831 7761      STM&n bsp;  0h,61h    
      0000:F833 7762      STM&n bsp;  0faffh,62h
      0000:F835 7465      PORTR 0ffffh,65h    /*读I/O空间FFFFH处的值,放到65H*/
      0000:F837 7165      MVDK  65h,11h    /*如果是并行模式则检测I/O空间的FFFF处
      是否放上了程序引导表boot-table的入口地址*/
      0000:F839 1091      LD    *AR1+,A  /*boot-table的首位数据应该是并行模式命令字*/
      0000:F83A F110      SUB   #10aah,0,A,B/*把读取的命令字减去10AA结果放在B中*/
      0000:F83C F84D      BC    0f93bh,BEQ/*B等于0的话说明是16位并行引导,转入f93b*/

      0000:F83E F030      AND   #0ffh,0,A,A/*命令字不是10AA的话取其低?????8位*/
                                          此句似乎有错,应该取A的高8位
      (07.30补注。声明:此处没错,刚看了一下8位引导的程序数据格式,它是按照8位来存储的,也就是说一个16位的数据分在相邻的两个地址中来存储。高8位在前,低8位在后,所以此处取A的低8位,因为如果不是16位引导的话,读取的A只有低8位是有效的
       ,07.30)
      0000:F840 F110      SUB   #8h,0,A,B/*减去8把结果放在B中*/
      0000:F842 F84C      BC    0f84bh,BNEQ/*B不等于0说明也不是8位并行引导则转
      入F84B判断*/
      /***********************************************************
      ******************/
      0000:F844 1091      LD    *AR1+,A/**AR1+似乎不对,这样读取的是SWWSR的值了*/
      (07.30补注。再次声明:同样的问题,这个地方没错,此时读取的应该是16位命令字的低8位,在8位引导模式中,它是放在高8位后面的地址空间中的)  
              
      0000:F845 F030      AND&n bsp;  #0ffh,0,A,A
      0000:F847 F010      SUB&n bsp;  #0aah,0,A,A
      0000:F849 F845      BC&nb sp;   0f8ebh,AEQ
      /*判断低8位是否是AA,总体判断出命令字是否是08AA,是的话转入F8EB执行*/
      /************再从数据空间FFFF处的值判断是否为并行引导***********************/
      0000:F84B 7711      STM&n bsp;  0ffffh,11h
      0000:F84D F495      NOP&n bsp; 
      0000:F84E F495      NOP&n bsp; 
      0000:F84F 1091      LD    *AR1+,A/*读取数据空间FFFF处的值*/
      0000:F850 8811     STLM  A,11h/*把读到的值送到AR1(应该是boot-table的首地址)*/
      0000:F851 F495      NOP&n bsp; 
      0000:F852 F495      NOP&n bsp; 
      0000:F853 1091      LD    *AR1+,A/*读取boot-table首位的命令字*/
      0000:F854 F110      SUB&n bsp;  #10aah,0,A,B
      0000:F856 F84D      BC    0f93bh,BEQ/*该命令字是10AA的话转入F93B处理(16
      位并行boot模式)*/
      0000:F858 7711      STM&n bsp;  0ffffh,11h
      0000:F85A F495      NOP&n bsp; 
      0000:F85B F495      NOP&n bsp; 
      0000:F85C 1289      LDU   *AR1-,A /*再次读取boot-table首地址*/
      0000:F85D F030      AND&n bsp;  #0ffh,0,A,A
      0000:F85F 6F81      ADD   *AR1,8,A,A  /*以上3句似乎是要获取boot-table的首地址,
      不知道为什么要这么做,第一句读取的不就是吗*/
      (不好意思,还是8位引导格式的问题,8位引导中首地址是分成两个8位存在FFFE和FFFF中的。07.30补注)
      0000:F861 8811      STLM& nbsp; A,11h
      0000:F862 F495      NOP&n bsp; 
      0000:F863 F495      NOP&n bsp; 
      0000:F864 1091      LD&nb sp;   *AR1+,A
      0000:F865 F030      AND&n bsp;  #0ffh,0,A,A
      0000:F867 F110      SUB&n bsp;  #8h,0,A,B
      0000:F869 F84C      BC    0f872h,BNEQ  /*读取的命令字也不是08aa的话跳转到
      F872执行下一步判断*/

      /***********************************************************
      ******************/
      0000:F86B 1091      LD    *AR1+,A  /* 命令字高位是8的话接下来判断低8位是不
      是AA*/
      0000:F86C F030      AND&n bsp;  #0ffh,0,A,A
      0000:F86E F010      SUB&n bsp;  #0aah,0,A,A
      0000:F870 F845     BC  0f8ebh,AEQ/*是08AA的话则转入F8EB处理(8位并行处理)*/
      /***********************************************************
      *****************/
      /***********************************************************
      *****************/
      /***********************************************************
      *****************/
      /***********************************************************
      *****************/

                              不是并行BOOT模式的话。。。。
      /******************Standard serial boot via
      MCBSP模式识别***********************/
      0000:F872 7738      STM&n bsp;  0h,38h
      0000:F874 7739      STM&n bsp;  0h,39h
      0000:F876 7738      STM&n bsp;  1h,38h
      0000:F878 7739      STM&n bsp;  0h,39h
      0000:F87A 7738      STM&n bsp;  2h,38h
      0000:F87C 7739      STM&n bsp;  40h,39h
      0000:F87E 7738      STM&n bsp;  3h,38h
      0000:F880 7739      STM&n bsp;  41h,39h
      0000:F882 7738      STM&n bsp;  6h,38h
      0000:F884 7739      STM&n bsp;  0h,39h
      0000:F886 7738      STM&n bsp;  7h,38h
      0000:F888 7739      STM&n bsp;  0h,39h
      0000:F88A 7738      STM&n bsp;  0eh,38h
      0000:F88C 7739      STM&n bsp;  0h,39h
      0000:F88E 7738      STM&n bsp;  0h,38h
      0000:F890 7739      STM&n bsp;  1h,39h


      0000:F892 7748      STM&n bsp;  0h,48h
      0000:F894 7749      STM&n bsp;  0h,49h
      0000:F896 7748      STM&n bsp;  1h,48h
      0000:F898 7749      STM&n bsp;  0h,49h
      0000:F89A 7748      STM&n bsp;  2h,48h
      0000:F89C 7749      STM&n bsp;  40h,49h
      0000:F89E 7748      STM&n bsp;  3h,48h
      0000:F8A0 7749      STM&n bsp;  41h,49h
      0000:F8A2 7748      STM&n bsp;  6h,48h
      0000:F8A4 7749      STM&n bsp;  0h,49h
      0000:F8A6 7748      STM&n bsp;  7h,48h
      0000:F8A8 7749      STM&n bsp;  0h,49h
      0000:F8AA 7748      STM&n bsp;  0eh,48h
      0000:F8AC 7749      STM&n bsp;  0h,49h
      0000:F8AE 7748      STM&n bsp;  0h,48h
      0000:F8B0 7749      STM&n bsp;  1h,49h


      0000:F8B2 7734      STM&n bsp;  0h,34h
      0000:F8B4 7735      STM&n bsp;  0h,35h
      0000:F8B6 7734      STM&n bsp;  1h,34h
      0000:F8B8 7735      STM&n bsp;  0h,35h
      0000:F8BA 7734      STM&n bsp;  2h,34h
      0000:F8BC 7735      STM&n bsp;  0h,35h
      0000:F8BE 7734      STM&n bsp;  3h,34h
      0000:F8C0 7735      STM&n bsp;  1h,35h
      0000:F8C2 7734      STM&n bsp;  6h,34h
      0000:F8C4 7735      STM&n bsp;  0h,35h
      0000:F8C6 7734      STM&n bsp;  7h,34h
      0000:F8C8 7735      STM&n bsp;  0h,35h
      0000:F8CA 7734      STM&n bsp;  0eh,34h
      0000:F8CC 7735      STM&n bsp;  0h,35h
      0000:F8CE 7734      STM&n bsp;  0h,34h
      0000:F8D0 7735      STM&n bsp;  1h,35h
      /* 设置三个mcbsp口*/
      0000:F8D2 F6BD      RSBX  XF     / * XF置低,作为外部串行设备的启动信号*/
      0000:F8D3 6101      BITF  1h,400h    / * 检测IFR的MCBSP1接收中断*/
      0000:F8D5 F930    CC    0f96bh,TC /* MCBSP1接收到中断信号的话转入F96B处理 */
      0000:F8D7 6101      BITF  1h,40h / * 检测IFR的MCBSP2接收中断*/
      0000:F8D9 F930    CC    0f975h,TC/* MCBSP2接收到中断信号的话转入F975处理 */
      0000:F8DB 6101      BITF  1h,10h / * 检测IFR的MCBSP0接收中断*/
      0000:F8DD F930    CC    0f961h,TC/* MCBSP0接收到中断信号的话转入F961处理 */
      /***********************************************************
      ******************/
      /***********************************************************
      ******************/
      /***********************************************************
      ******************/
      /***********************************************************
      ******************/
      /***********************************************************
      ******************/
      /******************I/O引导模式识别********************************************/
      这是程序识别的最后一个模式,仍然没有找到相应模式
      的话,程序会按照同样的顺序从新检测BOOT模式
      0000:F8DF F803      BC    0fa6dh,BIO/* BIO脚为低电平的话转入FA6D执行* /
      仍然不是正确的模式的话,开始新一轮的检测
      0000:F8E1 127F      LDU&n bsp;  7fh,A
      0000:F8E2 F844      BC    0f8e6h,ANEQ/* 入口地址正确的话转入F8E6处理(跟开始
      判断HPI模式时一样)*/
      0000:F8E4 F073      B     0f8d3h  /*仍然不正确转入F8D3处理 */

 


      /************************HPI模式引导跳转**************************/
      0000:F8E6 3C7E     ADD   7eh,16,A,A/* 把7EH,7FH的值组合起来构成程序入口地址*/
      0000:F8E7 F4E6     FBACC A  /* 远跳转到该程序入口地址执行*/

      /************************最终的引导跳转**************************/
      0000:F8E8 1262      LDU   62h,A/* 62H放的是入口PC*/
      0000:F8E9 3C61      ADD   61h,16,A,A/* 61H放XPC */
      0000:F8EA F4E6      FBACC A /* 组合出程序入口地址后跳到该处执行*/
      /××××××××××××××××××××××××××××××××××××××/
      /××××××××××××××××××××××××××××××××××××××/
      /************************8位并行模式引导跳转**************************/
      注意:由于8位模式的程序数据是按照8位来存储的,所以引导程序在读取数据的时候总是要把相邻两个地址作为高低位组合起来,高位在奇数地址上,低位在偶数地址上
      0000:F8EB 6F91      LD&nb sp;   *AR1+,8,A
      0000:F8ED 7191      MVDK& nbsp; *AR1+,13h
      0000:F8EF 6813      ANDM& nbsp; 0ffh,13h
      0000:F8F1 1A13      OR    13h,A /* 读取boot-table的第二位数据预定的SWWSR值*/
      0000:F8F2 8828      STLM  A,28h/* 把boot-table预定的值写入DSP内部SWWSR中*/
      0000:F8F3 6F91      LD&nb sp;   *AR1+,8,A
      0000:F8F5 7191      MVDK& nbsp; *AR1+,13h
      0000:F8F7 6813      ANDM  0ffh,13h/* 读取boot-table的第三位数据预定的BSCR值*/
      0000:F8F9 1A13      OR&nb sp;   13h,A
      0000:F8FA 8829      STLM  A,29h/* 把boot-table预定的值写入DSP内部BSCR中*/
      0000:F8FB 6F91      LD&nb sp;   *AR1+,8,A
      0000:F8FD 7191      MVDK& nbsp; *AR1+,13h
      0000:F8FF 6813      ANDM& nbsp; 0ffh,13h
      0000:F901 1A13      OR&nb sp;   13h,A
      0000:F902 8061   STL   A,61h   /* 把程序入口地址的XPC送到61H(entry point)*/
      0000:F903 6F91      LD&nb sp;   *AR1+,8,A
      0000:F905 7191      MVDK& nbsp; *AR1+,13h
      0000:F907 6813      ANDM& nbsp; 0ffh,13h
      0000:F909 1A13      OR&nb sp;   13h,A
      0000:F90A 8062      STL   A,62h  /* 把程序的入口地址pc送到62H*/
      /*******************以下开始程序段加载***************************************/
      0000:F90B 6F91      LD&nb sp;   *AR1+,8,A
      0000:F90D F030      AND   #0ff00h,0,A,A/* 现在读取的应该是代码段第一段的长度  */
      0000:F90F 7191      MVDK& nbsp; *AR1+,13h
      0000:F911 6813      ANDM& nbsp; 0ffh,13h
      0000:F913 1A13      OR&nb sp;   13h,A
      0000:F914 FA45      BCD   0f8e8h,AEQ /* A=0说明代码段长度为0,则直接跳转
      到F8E8,此处组合好entry point后就跳过去了   */
      /********************* 不为0的话说明有代码要搬移则下面进行代码加载***********/
      0000:F916 F110      SUB&n bsp;  #1h,0,A,B
      0000:F918 891A      STLM  B,1ah  /* 代码长度减一送入块重复计数寄存器*/
      0000:F919 6F91      LD&nb sp;   *AR1+,8,A
      0000:F91B 7191      MVDK& nbsp; *AR1+,13h
      0000:F91D 6813      ANDM& nbsp; 0ffh,13h
      0000:F91F 1A13      OR&nb sp;   13h,A
      0000:F920 8066      STL&n bsp;  A,66h
      0000:F921 6F91      LD&nb sp;   *AR1+,8,A
      0000:F923 F030      AND&n bsp;  #0ff00h,0,A,A
      0000:F925 7191      MVDK& nbsp; *AR1+,13h
      0000:F927 6813      ANDM& nbsp; 0ffh,13h
      0000:F929 1A13      OR&nb sp;   13h,A
      0000:F92A 3C66      ADD   66h,16,A,A/* 组合出程序目的加载地址放在A中*/
      0000:F92B F072      RPTB  0f938h /* 重复下面的块BRC次*/
      /****************单字节程序加载块***************************************/
      0000:F92D 6F91      LD&nb sp;   *AR1+,8,B
      0000:F92F 7191      MVDK& nbsp; *AR1+,13h
      0000:F931 6813      ANDM& nbsp; 0ffh,13h
      0000:F933 1B13      OR    13h,B/* 组合出程序数据放在B中*/
      0000:F934 EC0A      RPT&n bsp;  #0ah
      0000:F935 F495      NOP&n bsp; 
      0000:F936 7F0B      WRITA 0bh/* 把B中的数据写到A定义的程序空间*/
      0000:F937 F000      ADD   #1h,0,A,A/*程序地址递增
      /*********************************************************** ************/
      0000:F939 F073      B     0f90bh/* 重复进行上面的段加载*/
      /*********************************************************** ************/
      到此8位并行引导程序结束
      /××××××××××××××××××××××××××××××××××××××/
      /××××××××××××××××××××××××××××××××××××××/
      16位并行引导加载程序
      0000:F93B 1091      LD&nb sp;   *AR1+,A
      0000:F93C 8828      STLM  A,28h/*把boot-table中设定的SWWSR值写入SWWSR*/
      0000:F93D 1091      LD&nb sp;   *AR1+,A
      0000:F93E F030      AND&n bsp;  #0fffeh,0,A,A
      0000:F940 8829      STLM  A,29h/*把BSCR值写入BSCR寄存器,似乎先要确认
      BSCR的EXIO位为0*/
      0000:F941 1091      LD&nb sp;   *AR1+,A
      0000:F942 8061      STL   A,61h/*读取程序入口XPC值放入61H*/
      0000:F943 1091      LD&nb sp;   *AR1+,A
      0000:F944 8062      STL   A,62h/*读取程序入口PC值放入62H*/
      /××××××××××××××××××××××××××××××××××××××/
      /××××××××××××××××××××××××××××××××××××××/
      程序加载段
      0000:F945 1091      LD&nb sp;   *AR1+,A
      0000:F946 FA45      BCD   0f8e8h,AEQ/*读取程序段长度,为0的话认为程序加载结束
      直接转到F8E8(使程序跳转到程序入口出执行)*/
      0000:F948 F110      SUB&n bsp;  #1h,0,A,B
      0000:F94A 891A      STLM  B,1ah/*设定程序加载块的重复执行次数为代码长度减一*/
      0000:F94B 1091      LD&nb sp;   *AR1+,A
      0000:F94C 8066      STL   A,66h/*读取程序加载的目的地址的XPC放入66H*/
      0000:F94D 1291      LDU&n bsp;  *AR1+,A
      0000:F94E 8812      STLM  A,12h/*读取程序目的加载地址的PC值放入AR2*/
      0000:F94F 3C66      ADD   66h,16,A,A/*把XPC和PC组合成目的加载地址放在A中*/
      0000:F950 F072      RPTB  0f958h/*重复下面到F958的程序数据加载块BCR次*/
      /***********************************************************
      ******************/
      0000:F952 7191      MVDK& nbsp; *AR1+,13h
      0000:F954 EC0A      RPT&n bsp;  #0ah
      0000:F955 F495      NOP&n bsp; 
      0000:F956 7F13      WRITA  13h
      0000:F957 F000  ADD   #1h,0,A,A/*读取程序数据并把它加载到A中存放的程序地址去*/
      /***********************************************************
      ******************/
      0000:F959 F073  B     0f945h/*跳回程序加载段循环执行,直到所有程序段加载完毕*/
      /××××××××××××××××××××××××××××××××××××××/
      /××××××××××××××××××××××××××××××××××××××/


      /***********************************************************
      ******************/
      此段程序似乎是用来判断MCBSP口的DRR是否接收准备好的,不过逻辑上我还有点混乱,可能理解在哪个地方出了差错????????
      0000:F95B F4BC      RSBX  TC/*把TC清0*/
      0000:F95C FA20      BCD   0f95ch,NTC/*TC=0的话就一直等待*/
      0000:F95E 6186      BITF  *AR6,2h   /* 判断AR6所指向内容的第二位是否为0,为0
      的话TC=0,为1的话TC=1*/
      0000:F960 FC00      RET&n bsp; 
      /***************************mcbsp0口standard serial boot
      处理******************/
      0000:F961 7738      STM   0h,38h/* MCBSP子地址指向SPCR*/
      0000:F963 7716      STM   39h,16h/*把SPCR数据地址送到AR6*/
      0000:F965 7711      STM   21h,11h/*数据接收寄存器地址送到AR1*/
      0000:F967 7701      STM   10h,1h/*置MCBSP0接收中断标志*/
      0000:F969 F073      B&nbs p;    0f97fh
      /***************************mcbsp1口standard serial boot
      处理******************/
      0000:F96B 7748      STM&n bsp;  0h,48h
      0000:F96D 7716      STM&n bsp;  49h,16h
      0000:F96F 7711      STM&n bsp;  41h,11h
      0000:F971 7701      STM&n bsp;  400h,1h
      0000:F973 F073      B&nbs p;    0f97fh
      /***************************mcbsp2口standard serial boot
      处理******************/
      0000:F975 7734      STM&n bsp;  0h,34h
      0000:F977 7716      STM&n bsp;  35h,16h
      0000:F979 7711      STM&n bsp;  31h,11h
      0000:F97B 7701      STM&n bsp;  40h,1h
      0000:F97D F073      B&nbs p;    0f9c5h
      /***********************************************************
      ******************/
      0000:F97F 4881      LDM   *AR1,A/*A中放的是DRR的地址所以读出来的是
      MCBSP口接收到的值*/
      0000:F980 F110      SUB&n bsp;  #10aah,0,A,B
      0000:F982 F84D      BC    0f985h,BEQ/* 如果读回来的命令字是10AA的话说明
      是16位SERIAL BOOT模式则跳转到F985 */
      0000:F984 FC00      RET&n bsp; 
      /***********************************************************
      ******************/
      16位标准串口BOOT模式
      0000:F985 F074      CALL  0f95bh    /*只有在MCBSP的DRR接收准备好,即
      SPCR的RRDY位为1的时候程序才会向下执行*/
      0000:F987 7181      MVDK  *AR1,69h/*接收准备好的话把接收到的数放到69H,这个
      应该是所谓的DUMMY word即没有意义的值*/
      0000:F989 F074      CALL& nbsp; 0f95bh
      0000:F98B 7181      MVDK& nbsp; *AR1,6ah
      0000:F98D F074      CALL& nbsp; 0f95bh
      0000:F98F 7181      MVDK& nbsp; *AR1,6bh
      0000:F991 F074      CALL& nbsp; 0f95bh
      0000:F993 7181      MVDK  *AR1,6ch/*以上的四个数是在standard serial
      模式的BOOT-TABLE中生成的关系到串口设置的数,BOOTLOADER
      不作处理,也就是说以上的四个值是要被ignore的,只是接收下来而已,不作处理了*/
      0000:F995 F074      CALL& nbsp; 0f95bh
      0000:F997 7181      MVDK  *AR1,61h/*这个放的是程序入口的XPC*/
      0000:F999 F074      CALL& nbsp; 0f95bh
      0000:F99B 7181      MVDK  *AR1,62h/*这个放程序入口的PC*/
      /***********************************************************
      ******************/
      程序加载段
      0000:F99D F074      CALL& nbsp; 0f95bh
      0000:F99F 1281      LDU&n bsp;  *AR1,A
      0000:F9A0 FA45      BCD   0f8e8h,AEQ/*收到0的话说明加载程序段长度为0,即已
      经加载完了,则跳转到入口地址执行*/

      0000:F9A2 F110      SUB&n bsp;  #1h,0,A,B
      0000:F9A4 891A      STLM& nbsp; B,1ah
      0000:F9A5 F074      CALL& nbsp; 0f95bh
      0000:F9A7 7181      MVDK& nbsp; *AR1,66h
      0000:F9A9 F074      CALL& nbsp; 0f95bh
      0000:F9AB 1281      LDU&n bsp;  *AR1,A
      0000:F9AC 3C66      ADD   66h,16,A,A/*没加载完则读出加载目的地址的XPC和PC
      组合出加载目的地址放到A中*/
      0000:F9AD F072      RPTB& nbsp; 0f9b4h
      /******从串口接收数据并把它写入目的加载地址********/
      0000:F9AF F074      CALL& nbsp; 0f95bh
      0000:F9B1 1381      LDU&n bsp;  *AR1,B
      0000:F9B2 7F0B      WRITA  0bh
      0000:F9B3 F000      ADD&n bsp;  #1h,0,A,A
      /****************重复执行这个块,执行次数为程序数据长度-1********************/
      0000:F9B5 F073      B     0f99dh/*本段加载完之后跳到F99D执行*/
      /***********************************************************
      *****************/
      以下是8位标准串口BOOT模式与16位类似懒得分析了
      0000:F9B7 F074      CALL& nbsp; 0f95bh
      0000:F9B9 6F81      LD&nb sp;   *AR1,8,A
      0000:F9BB F030      AND&n bsp;  #0ff00h,0,A,A
      0000:F9BD 8063      STL&n bsp;  A,63h
      0000:F9BE F074      CALL& nbsp; 0f95bh
      0000:F9C0 1281      LDU&n bsp;  *AR1,A
      0000:F9C1 F030      AND&n bsp;  #0ffh,0,A,A
      0000:F9C3 1A63      OR&nb sp;   63h,A
      0000:F9C4 FC00      RET&n bsp; 
      0000:F9C5 4881      LDM&n bsp;  *AR1,A
      0000:F9C6 F010      SUB&n bsp;  #8h,0,A,A
      0000:F9C8 FC44      RC&nb sp;   ANEQ
      0000:F9C9 F074      CALL& nbsp; 0f95bh
      0000:F9CB 4881      LDM&n bsp;  *AR1,A
      0000:F9CC F010      SUB&n bsp;  #0aah,0,A,A
      0000:F9CE FC44      RC&nb sp;   ANEQ
      0000:F9CF F074      CALL& nbsp; 0f9b7h
      0000:F9D1 8069      STL&n bsp;  A,69h
      0000:F9D2 F074      CALL& nbsp; 0f9b7h
      0000:F9D4 806A      STL&n bsp;  A,6ah
      0000:F9D5 F074      CALL& nbsp; 0f9b7h
      0000:F9D7 806B      STL&n bsp;  A,6bh
      0000:F9D8 F074      CALL& nbsp; 0f9b7h
      0000:F9DA 806C      STL&n bsp;  A,6ch
      0000:F9DB F074      CALL& nbsp; 0f9b7h
      0000:F9DD 8061      STL&n bsp;  A,61h
      0000:F9DE F074      CALL& nbsp; 0f9b7h
      0000:F9E0 8062      STL&n bsp;  A,62h
      /*8位数据加载*/
      0000:F9E1 F074      CALL& nbsp; 0f9b7h
      0000:F9E3 FA45      BCD&n bsp;  0f8e8h,AEQ
      0000:F9E5 F110      SUB&n bsp;  #1h,0,A,B
      0000:F9E7 891A      STLM& nbsp; B,1ah
      0000:F9E8 F074      CALL& nbsp; 0f9b7h
      0000:F9EA 8066      STL&n bsp;  A,66h
      0000:F9EB F074      CALL& nbsp; 0f9b7h
      0000:F9ED 3C66      ADD&n bsp;  66h,16,A,A

      0000:F9EE F072      RPTB& nbsp; 0f9ffh
      /***********重复加载块*****************/
      0000:F9F0 F074      CALL& nbsp; 0f95bh
      0000:F9F2 6F81      LD&nb sp;   *AR1,8,B
      0000:F9F4 F330      AND&n bsp;  #0ff00h,0,B,B
      0000:F9F6 8163      STL&n bsp;  B,63h
      0000:F9F7 F074      CALL& nbsp; 0f95bh
      0000:F9F9 1381      LDU&n bsp;  *AR1,B
      0000:F9FA F330      AND&n bsp;  #0ffh,0,B,B
      0000:F9FC 1B63      OR&nb sp;   63h,B
      0000:F9FD 7F0B      WRITA  0bh
      0000:F9FE F000      ADD&n bsp;  #1h,0,A,A

      0000:FA00 F073      B&nbs p;    0f9e1h
      /*********************************************/
      /××××××××××××××××××××××××××××××××××××××/
      /××××××××××××××××××××××××××××××××××××××/
      SPI EEPROM加载处理
      0000:FA02 7714      STM&n bsp;  34h,14h
      0000:FA04 7715      STM&n bsp;  32h,15h
      0000:FA06 E8F9      LD&nb sp;   #0f9h,A
      0000:FA07 F7BD      SSBX& nbsp; XF
      0000:FA08 F074      CALL& nbsp; 0d52ch
      0000:FA0A 7713      STM&n bsp;  0h,13h
      0000:FA0C F074      CALL& nbsp; 0d569h
      0000:FA0E F050      XOR&n bsp;  #8h,0,A,A
      0000:FA10 F844      BC&nb sp;   0fa02h,ANEQ
      0000:FA12 6D93      MAR&n bsp;  *AR3+
      0000:FA13 F074      CALL& nbsp; 0d569h
      0000:FA15 F050      XOR&n bsp;  #0a5h,0,A,A
      0000:FA17 F845      BC&nb sp;   0faffh,AEQ
      0000:FA19 F050      XOR&n bsp;  #0a5h,0,A,A
      0000:FA1B F050      XOR&n bsp;  #0aah,0,A,A
      0000:FA1D F844      BC&nb sp;   0fa02h,ANEQ
      0000:FA1F 7713      STM&n bsp;  0ah,13h
      0000:FA21 F074      CALL& nbsp; 0d569h
      0000:FA23 6F61      STL&n bsp;  A,8,61h
      0000:FA25 6D93      MAR&n bsp;  *AR3+
      0000:FA26 F074      CALL& nbsp; 0d569h
      0000:FA28 1A61      OR&nb sp;   61h,A
      0000:FA29 8061      STL&n bsp;  A,61h
      0000:FA2A 6D93      MAR&n bsp;  *AR3+
      0000:FA2B F074      CALL& nbsp; 0d569h
      0000:FA2D 6F62      STL&n bsp;  A,8,62h
      0000:FA2F 6D93      MAR&n bsp;  *AR3+
      0000:FA30 F074      CALL& nbsp; 0d569h
      0000:FA32 1A62      OR&nb sp;   62h,A
      0000:FA33 8062      STL&n bsp;  A,62h
      0000:FA34 6D93      MAR&n bsp;  *AR3+
      0000:FA35 F074      CALL& nbsp; 0d569h
      0000:FA37 6F69      STL&n bsp;  A,8,69h
      0000:FA39 6D93      MAR&n bsp;  *AR3+
      0000:FA3A F074      CALL& nbsp; 0d569h
      0000:FA3C 1A69      OR&nb sp;   69h,A
      0000:FA3D F845      BC&nb sp;   0fa6ah,AEQ
      0000:FA3F F010      SUB&n bsp;  #1h,0,A,A
      0000:FA41 881A      STLM& nbsp; A,1ah
      0000:FA42 6D93      MAR&n bsp;  *AR3+
      0000:FA43 F074      CALL& nbsp; 0d569h
      0000:FA45 6F67      STL&n bsp;  A,8,67h
      0000:FA47 6D93      MAR&n bsp;  *AR3+
      0000:FA48 F074      CALL& nbsp; 0d569h
      0000:FA4A 1A67      OR&nb sp;   67h,A
      0000:FA4B 8067      STL&n bsp;  A,67h
      0000:FA4C 6D93      MAR&n bsp;  *AR3+
      0000:FA4D F074      CALL& nbsp; 0d569h
      0000:FA4F 6F66      STL&n bsp;  A,8,66h
      0000:FA51 6D93      MAR&n bsp;  *AR3+
      0000:FA52 F074      CALL& nbsp; 0d569

欢迎点击进入:"61IC中国电子在线"官方网站     文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    基于DSP控制的三电平变频器的
    基于DSP+μC/OS-Ⅱ的励磁系
    基于TMS320F2812的视频图像采
    一种长序列小波变换快速算法
    基于DSP的图像旋转算法数据调
    基于DSP的高动态GPS接收机关
    DSP软件向桌面和嵌入式系统挑
    基于DSP的液晶模块的显示原理
    DSP和FPGA在汽车电子中的广泛
    DSP与慢速设备接口的实现
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:TC 湘ICP备06016957号