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

📄 test.lst

📁 由keil软件调试的串口中断程序[IRQ中断]
💻 LST
📖 第 1 页 / 共 2 页
字号:
 00000028          L_5:
   37:      rcv_buf[i] = U0RBR;                        // 读取FIFO的数据,并清除中断标志
 00000028  E5101000  LDR         R1,=0xE000C000
 0000002C  E5D11000  LDRB        R1,[R1,#0x0]
 00000030  E1A03000  MOV         R3,R0 ; i
 00000034  E5102000  LDR         R2,=rcv_buf ; rcv_buf
 00000038  E7C21003  STRB        R1,[R2,+R3]
   38:    }
 0000003C  E2800001  ADD         R0,R0,#0x0001 ; i
 00000040  E1A01000  MOV         R1,R0 ; i
 00000044  E3510008  CMP         R1,#0x0008 ; i
 00000048  3AFFFFF6  BCC         L_5  ; Targ=0x28
   39:        }
 0000004C          L_1:
   40:    VICVectAddr = 0x00;                          // 中断处理结束
 0000004C  E3A01000  MOV         R1,#0x0
 00000050  E5100000  LDR         R0,=0xFFFFF030
 00000054  E5801000  STR         R1,[R0,#0x0]
 00000058            ; SCOPE-END
   41: }               
 00000058  E8BD000F  LDMIA       R13!,{R0-R3}
 0000005C  E25EF004  SUBS        R15,R14,#0x0004
 00000060          ENDP ; 'IRQ_UART0?A'


*** CODE SEGMENT '?PR?SendByte?T?test':
   50: void  SendByte(unsigned char data)
 00000000  1C02      MOV         R2,R0 ; data
ARM COMPILER V2.53,  test                                                                  12/07/06  14:50:21  PAGE 5   

 00000002  ---- Variable 'data' assigned to Register 'R2' ----
   52:    U0THR = data;                                // 发送数据
 00000002  1C11      MOV         R1,R2 ; data
 00000004  4800      LDR         R0,=0xE000C000
 00000006  7001      STRB        R1,[R0,#0x0]
   53:    while( (U0LSR & 0x20)==0 );                    // 等待数据发送
 00000008          L_7:
 00000008  4800      LDR         R0,=0xE000C014
 0000000A  7800      LDRB        R0,[R0,#0x0]
 0000000C  2120      MOV         R1,#0x20
 0000000E  4208      TST         R0,R1
 00000010  D0FA      BEQ         L_7  ; T=0x00000008
   54: }
 00000012  4770      BX          R14
 00000014          ENDP ; 'SendByte?T'


*** CODE SEGMENT '?PR?ISendBuf?T?test':
   63: void  ISendBuf(void)
 00000000  B500      PUSH        {LR}
   64: {  unsigned char  i;
 00000002            ; SCOPE-START
   67:    for(i=0; i<8; i++) 
 00000002  2300      MOV         R3,#0x0
 00000004  ---- Variable 'i' assigned to Register 'R3' ----
 00000004  E009      B           L_13  ; T=0x0000001A
 00000006          L_14:
   68:     SendByte(rcv_buf[i]);
 00000006  1C18      MOV         R0,R3 ; i
 00000008  0601      LSL         R1,R0,#0x18 ; i
 0000000A  0E09      LSR         R1,R1,#0x18
 0000000C  4800      LDR         R0,=rcv_buf ; rcv_buf
 0000000E  5C40      LDRB        R0,[R0,R1]
 00000010  F7FF      BL          SendByte?T  ; T=0x0001  (1)
 00000012  FFF6      BL          SendByte?T  ; T=0x0001  (2)
 00000014  3301      ADD         R3,#0x1
 00000016  061B      LSL         R3,R3,#0x18
 00000018  0E1B      LSR         R3,R3,#0x18
 0000001A          L_13:
 0000001A  1C18      MOV         R0,R3 ; i
 0000001C  0600      LSL         R0,R0,#0x18 ; i
 0000001E  0E00      LSR         R0,R0,#0x18
 00000020  2808      CMP         R0,#0x8
 00000022  DBF0      BLT         L_14  ; T=0x00000006
   69:     i='\n';
 00000024  230A      MOV         R3,#0xA
   70:     SendByte(i);
 00000026  1C18      MOV         R0,R3 ; i
 00000028  0600      LSL         R0,R0,#0x18 ; i
 0000002A  0E00      LSR         R0,R0,#0x18
 0000002C  F7FF      BL          SendByte?T  ; T=0x0001  (1)
 0000002E  FFE8      BL          SendByte?T  ; T=0x0001  (2)
 00000030            ; SCOPE-END
   73: }               
 00000030  BC08      POP         {R3}
 00000032  4718      BX          R3
 00000034          ENDP ; 'ISendBuf?T'


*** CODE SEGMENT '?PR?UART0_Ini?T?test':
   84: unsigned char  UART0_Ini(unsigned int baud)
 00000000  B500      PUSH        {LR}
 00000002  1C02      MOV         R2,R0 ; baud
 00000004  ---- Variable 'baud' assigned to Register 'R2' ----
   85: {  
 00000004            ; SCOPE-START
   95:    U0LCR = 0x80;                        // DLAB位置1
 00000004  2180      MOV         R1,#0x80
 00000006  4800      LDR         R0,=0xE000C00C
 00000008  7001      STRB        R1,[R0,#0x0]
ARM COMPILER V2.53,  test                                                                  12/07/06  14:50:21  PAGE 6   

   96:    bak = (Fpclk / 16)/baud;
 0000000A  1C11      MOV         R1,R2 ; baud
 0000000C  4800      LDR         R0,=0xE4E1C
 0000000E  F7FF      BL          ?C?UDIV?T  ; T=0x0001  (1) ; ?C?UDIV?T
 00000010  FFF7      BL          ?C?UDIV?T  ; T=0x0001  (2) ; ?C?UDIV?T
 00000012  1C08      MOV         R0,R1
 00000014  1C02      MOV         R2,R0
 00000016  ---- Variable 'bak' assigned to Register 'R2' ----
   97:    U0DLM = bak / 256;
 00000016  1C11      MOV         R1,R2 ; bak
 00000018  0A09      LSR         R1,R1,#0x8 ; bak
 0000001A  0609      LSL         R1,R1,#0x18
 0000001C  0E09      LSR         R1,R1,#0x18
 0000001E  4800      LDR         R0,=0xE000C004
 00000020  7001      STRB        R1,[R0,#0x0]
   98:    U0DLL = bak % 256;
 00000022  1C11      MOV         R1,R2 ; bak
 00000024  20FF      MOV         R0,#0xFF
 00000026  4001      AND         R1,R0
 00000028  0609      LSL         R1,R1,#0x18
 0000002A  0E09      LSR         R1,R1,#0x18
 0000002C  4800      LDR         R0,=0xE000C000
 0000002E  7001      STRB        R1,[R0,#0x0]
   99:    U0LCR = 0x83;               /* 8 bits, no Parity, 1 Stop bit    */
 00000030  2183      MOV         R1,#0x83
 00000032  4800      LDR         R0,=0xE000C00C
 00000034  7001      STRB        R1,[R0,#0x0]
  101:     U0LCR = 0x03;               /* DLAB = 0                         */
 00000036  2103      MOV         R1,#0x3
 00000038  4800      LDR         R0,=0xE000C00C
 0000003A  7001      STRB        R1,[R0,#0x0]
  111:    return(1);
 0000003C  2001      MOV         R0,#0x1
 0000003E            ; SCOPE-END
  112: }
 0000003E  BC08      POP         {R3}
 00000040  4718      BX          R3
 00000042          ENDP ; 'UART0_Ini?T'


*** CODE SEGMENT '?PR?main?test':
  117: int  main(void)
 00000000  B500      PUSH        {LR}
  125:    PINSEL0 = 0x00000005;  // 设置所有管脚连接GPIO
 00000002  2105      MOV         R1,#0x5
 00000004  4800      LDR         R0,=0xE002C000
 00000006  6001      STR         R1,[R0,#0x0]
  126:    PINSEL1 = 0x00000000;
 00000008  2100      MOV         R1,#0x0
 0000000A  4800      LDR         R0,=0xE002C004
 0000000C  6001      STR         R1,[R0,#0x0]
  128:    rcv_new = 0;
 0000000E  2100      MOV         R1,#0x0
 00000010  4800      LDR         R0,=rcv_new ; rcv_new
 00000012  7001      STRB        R1,[R0,#0x0] ; rcv_new
  133:    UART0_Ini(115200);          // 初始化串口模式
 00000014  4800      LDR         R0,=0x1C200
 00000016  F7FF      BL          UART0_Ini?T  ; T=0x0001  (1)
 00000018  FFF3      BL          UART0_Ini?T  ; T=0x0001  (2)
  135:    U0FCR = 0x81;                        // 使能FIFO,并设置触发点为8字节
 0000001A  2181      MOV         R1,#0x81
 0000001C  4800      LDR         R0,=0xE000C008
 0000001E  7001      STRB        R1,[R0,#0x0]
  137:    U0IER = 0x01;                        // 允许RBR中断,即接收中断
 00000020  2101      MOV         R1,#0x1
 00000022  4800      LDR         R0,=0xE000C004
 00000024  6001      STR         R1,[R0,#0x0]
  140:    VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
ARM COMPILER V2.53,  test                                                                  12/07/06  14:50:21  PAGE 7   

 00000026  2100      MOV         R1,#0x0
 00000028  4800      LDR         R0,=0xFFFFF00C
 0000002A  6001      STR         R1,[R0,#0x0]
  141:    VICVectCntl0 = 0x26;                 // UART0中断通道分配到IRQ slot 0,即优先级最高
 0000002C  2126      MOV         R1,#0x26
 0000002E  4800      LDR         R0,=0xFFFFF200
 00000030  6001      STR         R1,[R0,#0x0]
  142:    VICVectAddr0 = (int)IRQ_UART0;       // 设置UART0向量地址
 00000032  4900      LDR         R1,=IRQ_UART0?A ; IRQ_UART0?A
 00000034  4800      LDR         R0,=0xFFFFF100
 00000036  6001      STR         R1,[R0,#0x0]
  143:    VICIntEnable = 0x00000040;           // 使能UART0中断
 00000038  2140      MOV         R1,#0x40
 0000003A  4800      LDR         R0,=0xFFFFF010
 0000003C  6001      STR         R1,[R0,#0x0]
  145:    while(1) 
 0000003E          L_19:
  147:          if(1==rcv_new)
 0000003E  4800      LDR         R0,=rcv_new ; rcv_new
 00000040  7800      LDRB        R0,[R0,#0x0] ; rcv_new
 00000042  2801      CMP         R0,#0x1
 00000044  D1FB      BNE         L_19  ; T=0x0000003E
  149:          ISendBuf();                     // 将接收到的数据发送回主机
 00000046  F7FF      BL          ISendBuf?T  ; T=0x0001  (1)
 00000048  FFDB      BL          ISendBuf?T  ; T=0x0001  (2)
  150:             rcv_new = 0;  
 0000004A  2100      MOV         R1,#0x0
 0000004C  4800      LDR         R0,=rcv_new ; rcv_new
 0000004E  7001      STRB        R1,[R0,#0x0] ; rcv_new
  154:    }
 00000050  E7F5      B           L_19  ; T=0x0000003E
  156: }
 00000052  BC08      POP         {R3}
 00000054  4718      BX          R3
 00000056          ENDP ; 'main'



Module Information          Static
----------------------------------
  code size            =    ------
  data size            =         9
  const size           =    ------
End of Module Information.


ARM COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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