|
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
|