📄 uart0.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 + -