📄 boot832.lst
字号:
BOOT832 PAGE 1
1 ;********************************************************************
2 ;
3 ; Author : ADI - Apps www.analog.com/MicroConverter
4 ;
5 ; Date : April 2002
6 ;
7 ; File : Boot832.asm
8 ;
9 ; Hardware : ADuC832
10 ;
11 ; Description : Example bootloader program that lies in upper
12 ; 6kbytes of the 62kByte code space. This bootloader
13 ; can be used to download to the bottom 56kBytes.
14 ;
15 ; NOTE: This program will only work if the option to
16 ; always run code from E000H after download is
17 ; selected.
18 ;
19 ;********************************************************************
20 $MOD832
0006 21 ACK EQU 06H
0015 22 NACK EQU 15H
23
24 ;**********************************************************************
25 ; EXAMPLE USER CODE
26 ;**********************************************************************
---- 27 CSEG
0000 28 ORG 0000H
29
0000 012E 30 AJMP MAIN
31
32 ;____________________________________________________________________
33 ; INT0 ISR
0003 34 ORG 0003H
35 ; wait to receive a character from the UART
0003 3098FD 36 JNB RI, $ ; wait for reception
0006 C298 37 CLR RI
0008 E599 38 MOV A, SBUF
000A B45520 39 CJNE A, #'U', ERROR
40
41 ; plan to upgrade new code => set BOOTEN
000D 75C700 42 MOV EADRH, #0
0010 75C600 43 MOV EADRL, #0
0013 75B901 44 MOV ECON, #1 ; read page
0016 43BC01 45 ORL EDATA1, #1 ; SET LSB
0019 75B905 46 MOV ECON, #5 ; ERASE page
001C 75B902 47 MOV ECON, #2 ; program page
001F 75B904 48 MOV ECON, #4 ; verify page
0022 E5B9 49 MOV A, ECON
0024 7007 50 JNZ ERROR
51 ; use the watchdog timer to reset part...run from E000H after reset
0026 C2AF 52 CLR EA ; disable interrupts for double
53 ; write sequence
0028 D2C0 54 SETB WDWR
002A 75C082 55 MOV WDCON, #82h
56
002D 57 ERROR:
002D 32 58 RETI
BOOT832 PAGE 2
59
60
61 ;____________________________________________________________________
62 ; MAIN
002E 63 MAIN:
64 ; enable INT0
002E D288 65 SETB IT0 ; INT0 edge triggered
0030 D2AF 66 SETB EA ; enable inturrupts
0032 D2A8 67 SETB EX0 ; enable INT0
68
69 ; configure at fastest freq
0034 75D700 70 MOV PLLCON, #0
71
72 ; configure UART for 115200
0037 759E82 73 MOV T3CON, #82h
003A 759D09 74 MOV T3FD, #09h
003D 759852 75 MOV SCON, #52H
76
77 ; THIS SIMPLE BLINK ROUTINE REPRESENTS THE MAIN PROGRAM
0040 78 BLINK:
0040 B2B4 79 CPL P3.4
0042 120047 80 CALL DELAY
0045 0140 81 AJMP BLINK
82
83
84 ;____________________________________________________________________
85 ; DELAY
0047 86 DELAY:
87 ; 92ms DELAY
0047 78FF 88 MOV R0,#255
0049 89 DLY:
0049 79FF 90 MOV R1,#255 ; 205 x 255 x 1.43us
004B D9FE 91 DJNZ R1,$
004D D8FA 92 DJNZ R0,DLY
93
004F 22 94 RET
95 ;____________________________________________________________________
96
97
98 ;**********************************************************************
99 ; EXAMPLE BOOTLOAGER CODE
100 ;**********************************************************************
---- 101 CSEG
E000 102 ORG 0E000h
103 ; read BOOTEN
E000 75C700 104 MOV EADRH, #0
E003 75C600 105 MOV EADRl, #0
E006 75B901 106 MOV ECON, #1 ; read page
E009 E5BC 107 MOV A, EDATA1
E00B 20E00C 108 JB ACC.0, BOOTLOADER
109
110 ; reset EDATA1-4 before running user code
E00E E4 111 CLR A
E00F F5BC 112 MOV EDATA1, A
E011 F5BD 113 MOV EDATA2, A
E013 F5BE 114 MOV EDATA3, A
E015 F5BF 115 MOV EDATA4, A
E017 020000 116 LJMP 0000H
BOOT832 PAGE 3
117
E01A 118 BOOTLOADER:
119 ; clear the deliberate WDT reset
E01A D2C0 120 SETB WDWR
E01C 75C010 121 MOV WDCON, #10H
122
123 ; configure UART for 115200 baud
E01F 75D700 124 MOV PLLCON, #0 ; run core at max speed
E022 759E82 125 MOV T3CON, #82H
E025 759D09 126 MOV T3FD, #09h
E028 759852 127 MOV SCON,#52h
128
129 ; configure in ULOAD mode
E02B 75B9F0 130 MOV ECON, #0F0h
131
E02E 132 GETCOMMAND:
E02E 12E0FA 133 CALL RECBYTE
E031 B44502 134 CJNE A, #'E', $+5
E034 0142 135 AJMP ERASECOMMAND
E036 B44402 136 CJNE A, #'D', $+5
E039 0150 137 AJMP DOWNLOADCOMMAND
E03B B44F02 138 CJNE A, #'O', $+5
E03E 01A1 139 AJMP DOWNLOADOKCOMMAND
E040 210E 140 AJMP SENDNACK
141
142 ;====================================================================
143 ; ERASE CODE
144 ;====================================================================
E042 145 ERASECOMMAND:
146 ; wait for erase command
147 ; <'E'><CS>
E042 12E0FA 148 CALL RECBYTE
E045 2445 149 ADD A,#'E'
E047 6002 150 JZ ERASEOK
E049 210E 151 AJMP SENDNACK
152
E04B 153 ERASEOK:
154 ; erase 56kbytes of code space
E04B 75B906 155 MOV ECON, #6
156
157 ; send ACK
E04E 210A 158 AJMP SENDACK
159
160 ;====================================================================
161 ; DOWNLOAD CODE
162 ;====================================================================
E050 163 DOWNLOADCOMMAND:
164 ; wait for download command
165 ; <'D'><PAGEADD><DATA0->255><CS>
166
E050 7844 167 MOV R0, #'D'
168 ; get page address
E052 12E0FA 169 CALL RECBYTE
E055 F5C7 170 MOV EADRH, A
E057 75C60D 171 mov eadrl, #13
E05A 28 172 ADD A, R0
E05B F8 173 MOV R0, A
174
BOOT832 PAGE 4
175 ; check for page address >E0h
E05C E5C7 176 MOV A, EADRH
E05E B4E000 177 CJNE A, #0E0H, $+3
E061 4002 178 JC ADDRESSOK ; C=0 for EADRH < E0h
E063 210E 179 AJMP SENDNACK
180
E065 181 ADDRESSOK:
E065 900000 182 MOV DPTR, #0
E068 7900 183 MOV R1, #0 ; count
E06A 75AF01 184 MOV CFG832, #1 ; int XRAM
E06D 185 READDATA:
E06D 11FA 186 ACALL RECBYTE
E06F F0 187 MOVX @DPTR, A
E070 A3 188 INC DPTR
E071 28 189 ADD A, R0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -