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

📄 flash.lis

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0094           ;     //将写入程序从Flash区拷贝到RAM区PrgOfRam
 0094           ;     asm("ldhx #_DoWriteFlash");  //写入程序的首地址->HX
 0094 4500CD            ldhx #_DoWriteFlash
 0097                   .dbline 80
 0097           ;     asm("sthx _pbase");          //HX->内存变量pbase  
 0097 3500              sthx _pbase
 0099                   .dbline 81
 0099           ;     asm("ldhx #_WriteFlash_END");//写入程序的末地址->HX 
 0099 45014F            ldhx #_WriteFlash_END
 009C                   .dbline 82
 009C           ;     asm("sthx _pend");           //HX->内存变量pend
 009C 3500              sthx _pend
 009E                   .dbline 84
 009E           ;     //将写入程序从Flash区拷贝到RAM区PrgOfRam
 009E           ;     memcpy((void *)PrgOfRam,(void *)pbase,pend-pbase);
 009E C60001            lda _pend+1
 00A1 C00001            sub _pbase+1
 00A4 B700              sta *__r1
 00A6 C60000            lda _pend
 00A9 C20000            sbc _pbase
 00AC B700              sta *__r0
 00AE B600              lda *__r1
 00B0 87                psha
 00B1 B600              lda *__r0
 00B3 87                psha
 00B4 C60001            lda _pbase+1
 00B7 87                psha
 00B8 C60000            lda _pbase
 00BB 87                psha
 00BC A600              lda #<_PrgOfRam
 00BE 87                psha
 00BF A600              lda #>_PrgOfRam
 00C1 87                psha
 00C2 CD0000            jsr _memcpy
 00C5 A706              ais #6
 00C7 95                tsx
 00C8                   .dbline 86
 00C8           ;     //在RAM区执行写入程序
 00C8           ;     asm("LDHX #_PrgOfRam");    //写入程序在RAM的首地址 
 00C8 450000            LDHX #_PrgOfRam
 00CB                   .dbline 87
 00CB           ;     asm("jsr ,X");                       //执行RAM区的写入程序
 00CB FD                jsr ,X
 00CC                   .dbline -2
 00CC           L9:
 00CC                   .dbline 0 ; func end
 00CC 81                rts
 00CD                   .dbsym l addr 2 i
 00CD                   .dbend
 00CD                   .dbfunc e DoWriteFlash _DoWriteFlash fV
 00CD           ;              i -> 0,X
 00CD           ;              j -> 1,X
 00CD           _DoWriteFlash::
 00CD                   .dbline -1
 00CD A7FE              ais #-2
 00CF 95                tsx
 00D0                   .dbline 97
 00D0           ;   }
 00D0           ; /*DoWriteFlash:实际执行的写入函数----------------------*
 00D0           ; *功  能:调入内存执行擦除指定flash地址的数据            *
 00D0           ; *参  数:无                                             *
 00D0           ; *返  回:无                                             *
 00D0           ; *内部调用:延时函数delay2(用嵌入汇编调用)               *
 00D0           ; *-----------------------------------------------------*/
 00D0           ; void delay2(void);
 00D0           ; void DoWriteFlash(void)
 00D0           ;   {
 00D0                   .dbline 100
 00D0           ;     unsigned char i;
 00D0           ;     unsigned char j;    
 00D0           ;     FLCR=0b00000001;             //①1->PGM                                                    
 00D0 A601              lda #1
 00D2 C7FE08            sta 0xfe08
 00D5                   .dbline 101
 00D5           ;       i=FLBPR;               //②读FLBPR 
 00D5 C6FF7E            lda 0xff7e
 00D8 F7                sta ,X
 00D9                   .dbline 103
 00D9           ;                              //③任意数->faddr,选中flash行
 00D9           ;     *((volatile unsigned char *)faddr)=56; 
 00D9 C60001            lda _faddr+1
 00DC B700              sta *__r1
 00DE C60000            lda _faddr
 00E1 B700              sta *__r0
 00E3 A638              lda #56
 00E5 5500              ldhx *__r0
 00E7 F7                sta ,x
 00E8 95                tsx
 00E9                   .dbline 104
 00E9           ;     asm ("bsr _delay2");   //④延时10us
 00E9 AD55              bsr _delay2
 00EB                   .dbline 105
 00EB           ;     FLCR=0b00001001;       //⑤1->HVEN
 00EB A609              lda #9
 00ED C7FE08            sta 0xfe08
 00F0                   .dbline 106
 00F0           ;     asm ("bsr _delay2");   //⑥延时10us
 00F0 AD4E              bsr _delay2
 00F2                   .dbline 108
 00F2           ;     //⑦将数据写入相应的flash地址              
 00F2           ;     for(i=0;i<N;i++)
 00F2 7F                clr ,X
 00F3 2035              bra L14
 00F5           L11:
 00F5                   .dbline 109
 00F5           ;       {                                //数据送入flash地址
 00F5                   .dbline 110
 00F5           ;          *((volatile unsigned char *)faddr+i)=FlashData[i];
 00F5 3F00              clr *__r0
 00F7 F6                lda ,X
 00F8 AB00              add #<_FlashData
 00FA B700              sta *__r1
 00FC B600              lda *__r0
 00FE A900              adc #>_FlashData
 0100 B700              sta *__r0
 0102 5500              ldhx *__r0
 0104 F6                lda ,x
 0105 95                tsx
 0106 B700              sta *__r1
 0108 3F00              clr *__r2
 010A F6                lda ,X
 010B CB0001            add _faddr+1
 010E B700              sta *__r3
 0110 B600              lda *__r2
 0112 C90000            adc _faddr
 0115 B700              sta *__r2
 0117 B600              lda *__r1
 0119 5500              ldhx *__r2
 011B F7                sta ,x
 011C 95                tsx
 011D                   .dbline 111
 011D 6F01              clr 1,X
 011F 2002              bra L18
 0121           L15:
 0121                   .dbline 111
 0121           L16:
 0121                   .dbline 111
 0121 6C01              inc 1,X
 0123           L18:
 0123                   .dbline 111
 0123 E601              lda 1,X
 0125 A106              cmp #6
 0127 25F8              blo L15
 0129                   .dbline 112
 0129           L12:
 0129                   .dbline 108
 0129 7C                inc ,X
 012A           L14:
 012A                   .dbline 108
 012A F6                lda ,X
 012B C10000            cmp _N
 012E 25C5              blo L11
 0130                   .dbline 113
 0130           ;          for (j=0;j<6;j++); //⑧延时30us,不能调用延时程序
 0130           ;         }   
 0130           ;     FLCR=0b00001000;       //⑨0->PGM  
 0130 A608              lda #8
 0132 C7FE08            sta 0xfe08
 0135                   .dbline 114
 0135           ;     asm ("bsr _delay2");   //⑩延时10us
 0135 AD09              bsr _delay2
 0137                   .dbline 115
 0137           ;     FLCR=0b00000000;       //⑾0->HVEN  
 0137 4F                clra
 0138 C7FE08            sta 0xfe08
 013B                   .dbline 116
 013B           ;     asm ("bsr _delay2");   //⑿延时6us
 013B AD03              bsr _delay2
 013D                   .dbline -2
 013D           L10:
 013D A702              ais #2
 013F                   .dbline 0 ; func end
 013F 81                rts
 0140                   .dbsym l i 0 c
 0140                   .dbsym l j 1 c
 0140                   .dbend
 0140                   .dbfunc e delay2 _delay2 fV
 0140           ;              j -> 0,X
 0140           _delay2::
 0140                   .dbline -1
 0140 A7FF              ais #-1
 0142 95                tsx
 0143                   .dbline 119
 0143           ;   }
 0143           ; void delay2(void)  //延时一定时间
 0143           ;     { unsigned  char j;
 0143                   .dbline 120
 0143 7F                clr ,X
 0144 2001              bra L23
 0146           L20:
 0146                   .dbline 120
 0146           L21:
 0146                   .dbline 120
 0146 7C                inc ,X
 0147           L23:
 0147                   .dbline 120
 0147           ;       for (j=0;j<1;j++); }    
 0147 F6                lda ,X
 0148 A101              cmp #1
 014A 25FA              blo L20
 014C                   .dbline -2
 014C           L19:
 014C A701              ais #1
 014E                   .dbline 0 ; func end
 014E 81                rts
 014F                   .dbsym l j 0 c
 014F                   .dbend
 014F                   .dbfunc e WriteFlash_END _WriteFlash_END fV
 014F           _WriteFlash_END::
 014F                   .dbline -1
 014F                   .dbline 122
 014F           ; void WriteFlash_END(void)   //写入程序的末地址
 014F           ;   { }
 014F                   .dbline -2
 014F           L24:
 014F                   .dbline 0 ; func end
 014F 81                rts
 0150                   .dbend
                        .area bss
 0000                   .dbfile Flash.c
 0000           _PrgOfRam::
 0000                   .blkb 1
 0001                   .dbsym e PrgOfRam _PrgOfRam A[1:1]c

⌨️ 快捷键说明

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