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

📄 serial.lst

📁 lpc2138读写SD卡的fat文件系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.00d,  Serial                                                               23/10/05  18:16:17  PAGE 1   


ARM COMPILER V2.00d, COMPILATION OF MODULE Serial
OBJECT MODULE PLACED IN .\Flash\Serial.obj
COMPILER INVOKED BY: C:\KEIL\ARM\BIN\CA.EXE Serial.c THUMB OPTIMIZE(7,SPEED) BROWSE DEBUG PRINT(.\FLASH\SERIAL.LST) TABS
                    -(4) OBJECT(.\Flash\Serial.obj) 

stmt  level    source

    1          /******************************************************************************/
    2          /*  This file is part of the kp weather station                               */
    3          /******************************************************************************/
    4          /*                                                                            */
    5          /*  SERIAL.C:  Low Level Serial Routines                                      */
    6          /*                                                                            */
    7          /******************************************************************************/
    8          
    9          /* Universal Asynchronous Receiver Transmitter 1 (UART1) */
   10          //#define U1RBR        Read Data  
   11          //#define U1THR        Write Data  
   12          //#define U1IER        Interrup Enable  
   13          //#define U1IIR        Interrupr ID register (RO)  
   14          //#define U1FCR        FIFO control register  
   15          //#define U1LCR        Line control register  
   16          //#define U1MCR        Modem control reg  
   17          //#define U1LSR        Modem status reg  
   18          //#define U1MSR        Line status reg  
   19          //#define U1SCR        sratch pad register  
   20          //#define U1DLL        Divider latch register (LSB)  
   21          //#define U1DLM        Divider latch register (MSB)  
   22          
   23          #include <LPC213x.H>                     /* LPC21xx definitions               */
   24          #include <LPC213x.H>                     // LPC21xx definitions
   25          #include <bsp.h>                         // include board support package
   26          #define CR     0x0D
   27          #define LF     0x0A
   28          #define NULL   0x00
   29          
   30          extern void set_LED (unsigned char led_no, unsigned char led_cmd);
   31          extern void wr_byte(unsigned char a, unsigned char b);
   32          extern void wr_hex(unsigned char b);
   33          
   34          // Real-time clock interrupt routine
   35          void uart1 (void) __irq {
   36   1        unsigned char int_reg;
   37   1        unsigned char rx_char;
   38   1        unsigned char temp;
   39   1        int_reg = U1IIR;          // must read U1IIR to clear UART interrupt flag
   40   1      
   41   1        switch (int_reg)
   42   1        {
   43   2          case 0x06:              // int fromOE, PE, FE, or BI
   44   2           {
   45   3             temp = U1LSR;        // clear interrupt
   46   3             break;                           
   47   3           }
   48   2          case 0x04:              // Rx char available
   49   2           {
   50   3             U1SCR &= 0xFB;       // dissable kp_printf(...)
   51   3             rx_char = U1RBR;     // get char and clears the interrupt
   52   3             wr_hex(rx_char);
   53   3      //     U1THR = rx_char;     // echo character
   54   3             if (rx_char == CR) {
   55   4               U1SCR |= 0x04;     // enable kp_printf(...)
   56   4               U1THR = rx_char;       // echo character
   57   4             }
   58   3             break;
ARM COMPILER V2.00d,  Serial                                                               23/10/05  18:16:17  PAGE 2   

   59   3           }
   60   2          case 0xC0:              // Rx FIFO limit
   61   2           {
   62   3             break;
   63   3           }
   64   2          case 0x02:              // THRE
   65   2           {
   66   3             // no special read required since U1IIR has been read
   67   3             break;
   68   3           }
   69   2          case 0x00:              // CTS or DSR
   70   2           {
   71   3             temp = U1MSR;        // clear interrupt
   72   3             break;
   73   3           }
   74   2        } 
   75   1      
   76   1        if ((U1SCR & 0x01) == 0x01) {
   77   2          set_LED(3,1);
   78   2          U1SCR &= 0xFE; }
   79   1        else {
   80   2          set_LED(3,0);
   81   2          U1SCR |= 0x01; }
   82   1        VICVectAddr = 0;          // Acknowledge Interrupt
   83   1      }
   84          
   85          void init_serial (void)  {              /* Initialize Serial Interface       */
   86   1      //  PINSEL0 = 0x00050000;                 /* Enable RxD1 and TxD1              */
   87   1        U1LCR = 0x83;                         /* 8 bits, no Parity, 1 Stop bit     */
   88   1        U1DLL = 97;                           /* use 24 for 38400 Baud Rate @ 15MHz VPB Clock (was 97 or 9600 B
             -OAD) */
   89   1        U1LCR = 0x03;                         /* DLAB = 0 */
   90   1        U1IER = 0x01;                         // Enable reciever data available interrupt
   91   1        U1SCR = 0x05;                         // set two flag in UART 1 scratch pad
   92   1                                              // 0x01 LED blinker
   93   1                                              // 0x04 enable kp_printf(...)
   94   1        VICVectAddr4 = (unsigned long)uart1;  // set interrupt vector in 4
   95   1        VICVectCntl4 = 0x20 | 7;              // use it for UART 1 clock
   96   1      }
   97          
   98          
   99          int putchar (int ch)  {                  // Write character to Serial Port    
  100   1      
  101   1        if (ch == '\n')  {
  102   2          while (!(U1LSR & 0x20));
  103   2          U1THR = CR;                          // output CR 
  104   2        }
  105   1        while (!(U1LSR & 0x20));
  106   1        return (U1THR = ch);
  107   1      }
  108          
  109          int getchar (void)  {                    // Read character from Serial Port   
  110   1        while (!(U1LSR & 0x01));
  111   1        return (U1RBR);
  112   1      }
ARM COMPILER V2.00d,  Serial                                                               23/10/05  18:16:17  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (set_LED?T)
 EXTERN CODE16 (wr_hex?T)
 EXTERN CODE32 (wr_hex?A)
 EXTERN CODE32 (set_LED?A)



*** PUBLICS:
 PUBLIC         uart1?A
 PUBLIC         init_serial?T
 PUBLIC         putchar?T
 PUBLIC         getchar?T



*** CODE SEGMENT '?PR?uart1?A?Serial':
   35: void uart1 (void) __irq {
 00000000  E92D5F1F  STMDB       R13!,{R0-R4,R8-R12,LR}
 00000004            ; SCOPE-START
   39:   int_reg = U1IIR;          // must read U1IIR to clear UART interrupt flag
 00000004  E5100000  LDR         R0,=0xE0010008
 00000008  E5D00000  LDRB        R0,[R0,#0x0]
 0000000C  ---- Variable 'int_reg' assigned to Register 'R0' ----
   41:   switch (int_reg)
 0000000C  E1A01000  MOV         R1,R0 ; int_reg
 00000010  E2511000  SUBS        R1,R1,#0x0000
 00000014  0A00001F  BEQ         L_2  ; Targ=0x98
 00000018  E2511002  SUBS        R1,R1,#0x0002
 0000001C  0A00001F  BEQ         L_1  ; Targ=0xA0
 00000020  E2511002  SUBS        R1,R1,#0x0002
 00000024  0A000006  BEQ         L_4  ; Targ=0x44
 00000028  E25110BC  SUBS        R1,R1,#0x00BC
 0000002C  0A00001B  BEQ         L_1  ; Targ=0xA0
 00000030  E29110BA  ADDS        R1,R1,#0x00BA
 00000034  1A000019  BNE         L_1  ; Targ=0xA0
   43:     case 0x06:              // int fromOE, PE, FE, or BI
 00000038          L_5:
   45:        temp = U1LSR;        // clear interrupt
 00000038  E5100000  LDR         R0,=0xE0010014
 0000003C  E5D00000  LDRB        R0,[R0,#0x0]
   46:        break;                           
 00000040  EA000016  B           L_1  ; Targ=0xA0
   48:     case 0x04:              // Rx char available
 00000044          L_4:
   50:        U1SCR &= 0xFB;       // dissable kp_printf(...)

⌨️ 快捷键说明

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