📄 bootloader.lst
字号:
C51 COMPILER V8.16 BOOTLOADER 02/05/2010 12:14:15 PAGE 1
C51 COMPILER V8.16, COMPILATION OF MODULE BOOTLOADER
OBJECT MODULE PLACED IN bootloader.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE bootloader.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************************
2 ** copyright(c) skee ltd,.co. 1996-2009
3 ** c8051f310 256+1024 bytes ram osc:24.5M
4 ** iap (0x0000-0x1000) ap(0x1000-0x3dff) reserved(0x3e00-0x3fff)
5 ** Last Modify 2009-12-07
6 ** by jerkoh ver1.0
7 ** XModem
8 ******************************************************************************/
9 #include <c8051f310.h>
10 #include <intrins.h>
11 #include <string.h>
12 #include <stdio.h>
13 #include "bootloader.h"
14 #include "flash.h"
15 #include "xmodem.h"
16
17 unsigned char xdata buf[128];
18
19 /******************************************************************************
20 ** MAIN Routine
21 ******************************************************************************/
22
23 void main (void)
24 {
25 1 int st, page;
26 1 PCA0MD &= ~0x40; // Disable Watchdog timer
27 1 PORT_Init(); // Initialize Port I/O
28 1 SYSCLK_Init (); // 内部晶振初始化
29 1 UART0_Init(); // 串口0初始化
30 1 delayms(1);
31 1 LEDR=1;
32 1 BELL=0;
33 1 DI=1;
34 1 RE=0;
35 1
36 1
37 1 if((FLASH_PageRead(0x1000)==FLASH_PageRead(0x0e00))&&
38 1 (FLASH_PageRead(0x1001)==FLASH_PageRead(0x0e01))&&
39 1 (FLASH_PageRead(0x1002)==FLASH_PageRead(0x0e02))&&
40 1 (EN_IAP!=0))
41 1 {
42 2 ((void(code *)(void))BL2AP)(); //简单比较前3字节
43 2 }
44 1 else
45 1 {
46 2 for(page=0x1000;page<(0x3c00);page++ )
47 2 {
48 3 FLASH_PageErase(page);
49 3 page+=511;
50 3 }
51 2 }
52 1
53 1 while(1)
54 1 {
55 2
C51 COMPILER V8.16 BOOTLOADER 02/05/2010 12:14:15 PAGE 2
56 2 LEDR=0;
57 2 LEDG=1;
58 2 while(1)
59 2 {
60 3 st=xmodem_rx();
61 3 if(st==1)
62 3 {
63 4 break;
64 4 }
65 3 }
66 2 LEDR=1;
67 2 LEDG=0;
68 2
69 2 //提取0x1000开始32字节特征值 写入固定地址0x0e00 用于启动对比
70 2 FLASH_PageErase(0x0e00);
71 2 for(st=0;st<32;st++)
72 2 {
73 3 FLASH_ByteWrite (0xe00+st, FLASH_PageRead(0x1000+st));
74 3 }
75 2
76 2
77 2
78 2
79 2
80 2 ((void(code *)(void))BL2AP)();
81 2 }
82 1
83 1
84 1 }
85 /******************************************************************************
86 ** 函数: PORT_Init ()
87 ** 入参:
88 ** 返回:
89 ** 说明: 配置交叉开关uart0 其他无关
90 ** PORT_Init
91 ** Configure the Crossbar and GPIO ports.
92 ** P0.4 - UART TX
93 ** P0.5 - UART RX
94 ******************************************************************************/
95 void PORT_Init (void)
96 {
97 1 P0SKIP = 0xcf; //it's null
98 1 P1SKIP = 0x03; //it's null
99 1 XBR0 = 0x01; //使能 UART on P0.4(TX) and P0.5
100 1 XBR1 = 0x42; //it's null
101 1 P0MDOUT = 0x1C; //使能 UTX 为推挽输出 p0.2 p0.3
102 1 P3MDOUT |= 0x06; //it's null
103 1 }
104 /******************************************************************************
105 ** 函数: SYSCLK_Init ()
106 ** 入参:
107 ** 返回:
108 ** 说明:
109 ** SYSCLK_Init
110 ** This routine initializes the system clock to use the internal oscillator
111 ** at its maximum frequency.
112 ** Also enables the Missing Clock Detector.
113 ******************************************************************************/
114 void SYSCLK_Init (void)
115 {
116 1 OSCICN |= 0x03; // Configure internal oscillator for
117 1 // its maximum frequency
C51 COMPILER V8.16 BOOTLOADER 02/05/2010 12:14:15 PAGE 3
118 1 RSTSRC = 0x04; // Enable missing clock detector
119 1
120 1 }
121
122 /******************************************************************************
123 **函数功能:延时ms
124 **入参: uint x
125 **返回值: 无
126 **作者: jerkoh
127 **日期: 2009-03-16
128 **说明: 无
129 ******************************************************************************/
130 void delayms (unsigned int x)
131 {
132 1 unsigned int j;
133 1 while(x--)
134 1 {
135 2 for(j=0;j<1500;j++){;}
136 2 }
137 1 }
138
139 /******************************************************************************
140 ** 函数: UART0_Init()
141 ** 入参: SYSCLK/BAUDRATE
142 ** 返回: null
143 ** 说明: null
144 ** UART0_Init
145 ** Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
146 ******************************************************************************/
147 void UART0_Init (void)
148 {
149 1 SCON0 = 0x50; // SCON0: 8-bit variable bit rate
150 1 // level of STOP bit is ignored
151 1 // RX enabled
152 1 // ninth bits are zeros
153 1 // clear RI0 and TI0 bits
154 1 if (SYSCLK/BAUDRATE/2/256 < 1)
155 1 {
156 2 TH1 = -(SYSCLK/BAUDRATE/2);
157 2 CKCON &= ~0x0B; // T1M = 1; SCA1:0 = xx
158 2 CKCON |= 0x08;
159 2 }
160 1 else if (SYSCLK/BAUDRATE/2/256 < 4)
161 1 {
162 2 TH1 = -(SYSCLK/BAUDRATE/2/4);
163 2 CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01
164 2 CKCON |= 0x09;
165 2 }
166 1 else if (SYSCLK/BAUDRATE/2/256 < 12)
167 1 {
168 2 TH1 = -(SYSCLK/BAUDRATE/2/12);
169 2 CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00
170 2 }
171 1 else
172 1 {
173 2 TH1 = -(SYSCLK/BAUDRATE/2/48);
174 2 CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
175 2 CKCON |= 0x02;
176 2 }
177 1
178 1 TL1 = TH1; // init Timer1
179 1 TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload
C51 COMPILER V8.16 BOOTLOADER 02/05/2010 12:14:15 PAGE 4
180 1 TMOD |= 0x20;
181 1 TR1 = 1; // START Timer1
182 1 EA=1; // 禁止中断
183 1 ES0=0; // 禁止串口0中断
184 1 TI0=1;
185 1
186 1
187 1 }
188
189 /***********************(C) COPYRIGHT 2009 SKsystem***************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 356 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 128 4
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -