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

📄 bootloader.lst

📁 c8051f310xmodembootloader.rar
💻 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 + -