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

📄 uart0.txt

📁 基于ARM的电梯控制程序
💻 TXT
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -ouart0.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips UART0.c]

                          ARM

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  UART0_Ini PROC
;;;17     {  uint16 Fdiv;
;;;18        PINSEL0 |= 0x00000005;		    // 设置I/O连接到UART0
000000  e59f10dc          LDR      r1,|L1.228|
000004  e5911000          LDR      r1,[r1,#0]
000008  e3811005          ORR      r1,r1,#5
00000c  e59f20d0          LDR      r2,|L1.228|
000010  e5821000          STR      r1,[r2,#0]
000014  e3a01083          MOV      r1,#0x83
000018  e1c22501          BIC      r2,r2,r1,LSL #10
00001c  e5c2100c          STRB     r1,[r2,#0xc]
000020  e3a00024          MOV      r0,#0x24
000024  e1a01000          MOV      r1,r0
000028  e1a02fc0          ASR      r2,r0,#31
00002c  e0802c22          ADD      r2,r0,r2,LSR #24
000030  e1a02442          ASR      r2,r2,#8
000034  e59f30ac          LDR      r3,|L1.232|
000038  e5c32004          STRB     r2,[r3,#4]
00003c  e1a01000          MOV      r1,r0
000040  e1a02fc0          ASR      r2,r0,#31
000044  e0802c22          ADD      r2,r0,r2,LSR #24
000048  e1a02442          ASR      r2,r2,#8
00004c  e0402402          SUB      r2,r0,r2,LSL #8
000050  e5c32000          STRB     r2,[r3,#0]
000054  e3a01003          MOV      r1,#3
000058  e1c32000          BIC      r2,r3,r0
00005c  e5c2100c          STRB     r1,[r2,#0xc]
000060  e3a01001          MOV      r1,#1
000064  e5c21008          STRB     r1,[r2,#8]
000068  e5c21004          STRB     r1,[r2,#4]
00006c  e3a01000          MOV      r1,#0
000070  e5011ff4          STR      r1,[r1,#-0xff4]
000074  e3a01026          MOV      r1,#0x26
000078  e3a02000          MOV      r2,#0
00007c  e5021dfc          STR      r1,[r2,#-0xdfc]
000080  e59f1064          LDR      r1,|L1.236|
000084  e5021efc          STR      r1,[r2,#-0xefc]
000088  e3a01040          MOV      r1,#0x40
00008c  e5021ff0          STR      r1,[r2,#-0xff0]
000090  e12fff1e          BX       lr
;;;19        U0LCR = 0x83;		            // DLAB = 1,可设置波特率
;;;20        Fdiv = (Fpclk / 16) / UART_BPS;  // 设置波特率
;;;21        U0DLM = Fdiv / 256;							
;;;22        U0DLL = Fdiv % 256;						
;;;23        U0LCR = 0x03;                        
;;;24     
;;;25        U0FCR = 0x01;                        // 使能FIFO	, 来一个数据就产生中断
;;;26        U0IER = 0x01;                        // 允许RBR中断,即接收中断
;;;27        
;;;28        /* 设置UART0中断允许 */
;;;29        VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
;;;30        VICVectCntl1 = 0x26;                 // UART0中断通道分配到IRQ slot 0,即优先级最高
;;;31        VICVectAddr1 = (int)IRQ_UART0;       // 设置UART0向量地址
;;;32        VICIntEnable = 0x00000040;           // 使能UART0中断
;;;33        
;;;34     }
                          ENDP

                  UART0_SendByte PROC
;;;42     void  UART0_SendByte(uint8 data)
;;;43     {  U0THR = data;				    // 发送数据
000094  e59f104c          LDR      r1,|L1.232|
000098  e5c10000          STRB     r0,[r1,#0]
00009c  e1a00000          MOV      r0,r0
                  |L1.160|
0000a0  e59f1040          LDR      r1,|L1.232|
0000a4  e5d11014          LDRB     r1,[r1,#0x14]
0000a8  e3110040          TST      r1,#0x40
0000ac  0afffffb          BEQ      |L1.160|
0000b0  e12fff1e          BX       lr
;;;44     
;;;45        while( (U0LSR&0x40)==0 );	    // 等待数据发送完毕
;;;46     }
                          ENDP

                  UART0_SendStr PROC
;;;54     void  UART0_SendStr(uint8 const *str)
;;;55     {  while(1)
0000b4  e52de004          PUSH     {lr}
0000b8  e1a02000          MOV      r2,r0
0000bc  ea000005          B        |L1.216|
                  |L1.192|
0000c0  e5d20000          LDRB     r0,[r2,#0]
0000c4  e3500000          CMP      r0,#0
0000c8  1a000000          BNE      |L1.208|
0000cc  ea000002          B        |L1.220|
                  |L1.208|
0000d0  e4d20001          LDRB     r0,[r2],#1
0000d4  ebfffffe          BL       UART0_SendByte
                  |L1.216|
0000d8  eafffff8          B        |L1.192|
                  |L1.220|
0000dc  e49de004          POP      {lr}
0000e0  e12fff1e          BX       lr
                  |L1.228|
0000e4  e002c000          DCD      0xe002c000
                  |L1.232|
0000e8  e000c000          DCD      0xe000c000
                  |L1.236|
0000ec  00000000          DCD      IRQ_UART0
;;;56        {  if( *str == '\0' ) break;
;;;57           UART0_SendByte(*str++);	    // 发送数据
;;;58        }
;;;59     }
                          ENDP


⌨️ 快捷键说明

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