📄 serial.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oserial.o --depend=serial.d --device=DARMP --apcs=interwork -O3 -IC:\Keil\ARM\INC\Philips --omf_browse=serial.crf serial.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
uart0_init PROC
;;;30
;;;31 PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05; /* Select the pins for Uart 选择管脚为UART0 */
000000 e59f0144 LDR r0,|L1.332|
000004 e5901000 LDR r1,[r0,#0]
000008 e3c1100f BIC r1,r1,#0xf
00000c e3811005 ORR r1,r1,#5
000010 e5801000 STR r1,[r0,#0]
;;;32
;;;33 U0LCR = 0x80; /* Enable to access the frequenc regecter
000014 e3a01080 MOV r1,#0x80
000018 e2400802 SUB r0,r0,#0x20000
00001c e5c0100c STRB r1,[r0,#0xc]
;;;34 允许访问分频因子寄存器 */
;;;35 Fdiv = (Fpclk / 16) / BR; /* Set the baudrate设置波特率 */
;;;36 U0DLM = Fdiv / 256;
000020 e3a01000 MOV r1,#0
000024 e5c01004 STRB r1,[r0,#4]
;;;37 U0DLL = Fdiv % 256;
000028 e3a02006 MOV r2,#6
00002c e5c02000 STRB r2,[r0,#0]
;;;38 U0LCR = 0x03; /* Disable to access the frequenc regecter
000030 e3a02003 MOV r2,#3
000034 e5c0200c STRB r2,[r0,#0xc]
;;;39 禁止访问分频因子寄存器 */
;;;40 /* set to 8,1,n 且设置为8,1,n */
;;;41 U0IER = 0x00; /* Disable interrupt禁止中断 */
000038 e5c01004 STRB r1,[r0,#4]
;;;42 U0FCR = 0x00; /* initial FIFO 初始化FIFO */
00003c e5c01008 STRB r1,[r0,#8]
;;;43
;;;44 #if 0
;;;45 /* mt: n.b: uart0 clock must be enabled to use it */
;;;46
;;;47 //*AT91C_PIOA_PDR = AT91C_PA5_RXD0 | /* Enable RxD0 Pin */
;;;48 // AT91C_PA6_TXD0; /* Enalbe TxD0 Pin */
;;;49
;;;50 *AT91C_PIOA_PDR = AT91C_PA9_DRXD | /* Enable RxD0 Pin */
;;;51 AT91C_PA10_DTXD; /* Enalbe TxD0 Pin */
;;;52
;;;53 pUSART->US_CR = AT91C_US_RSTRX | /* Reset Receiver */
;;;54 AT91C_US_RSTTX | /* Reset Transmitter */
;;;55 AT91C_US_RXDIS | /* Receiver Disable */
;;;56 AT91C_US_TXDIS; /* Transmitter Disable */
;;;57
;;;58 pUSART->US_MR = AT91C_US_USMODE_NORMAL | /* Normal Mode */
;;;59 AT91C_US_CLKS_CLOCK | /* Clock = MCK */
;;;60 AT91C_US_CHRL_8_BITS | /* 8-bit Data */
;;;61 AT91C_US_PAR_NONE | /* No Parity */
;;;62 AT91C_US_NBSTOP_1_BIT; /* 1 Stop Bit */
;;;63
;;;64 pUSART->US_BRGR = BRD; /* Baud Rate Divisor */
;;;65
;;;66 pUSART->US_CR = AT91C_US_RXEN | /* Receiver Enable */
;;;67 AT91C_US_TXEN; /* Transmitter Enable */
;;;68 #endif
;;;69 }
000040 e12fff1e BX lr
;;;70
ENDP
uart0_putc PROC
000044 e59f1104 LDR r1,|L1.336|
000048 e5c10000 STRB r0,[r1,#0] ;0
|L1.76|
00004c e5d10014 LDRB r0,[r1,#0x14] ;0
000050 e3500000 CMP r0,#0 ;0
000054 0afffffc BEQ |L1.76|
000058 e3a00000 MOV r0,#0 ;0
00005c e12fff1e BX lr ;0
ENDP
uart0_putchar PROC
000060 e350000a CMP r0,#0xa ;0
000064 e1a02000 MOV r2,r0 ;0
000068 03a0000d MOVEQ r0,#0xd ;0
00006c e52de004 PUSH {lr} ;0
000070 0bfffffe BLEQ uart0_putc
000074 e49de004 POP {lr} ;0
000078 e1a00002 MOV r0,r2 ;0
00007c eafffffe B uart0_putc
ENDP
uart0_puts PROC
;;;91 int uart0_puts ( char* s )
;;;92 {
000080 e1a02000 MOV r2,r0
;;;93 int i = 0;
000084 e3a03000 MOV r3,#0
000088 e52de004 PUSH {lr} ;92
;;;94 while ( *s ) {
00008c ea000002 B |L1.156|
|L1.144|
;;;95 uart0_putc( *s++ );
000090 e2822001 ADD r2,r2,#1
000094 ebfffffe BL uart0_putc
;;;96 i++;
000098 e2833001 ADD r3,r3,#1
|L1.156|
00009c e5d20000 LDRB r0,[r2,#0] ;94
0000a0 e3500000 CMP r0,#0 ;94
0000a4 1afffff9 BNE |L1.144|
;;;97 }
;;;98 return i;
0000a8 e49de004 POP {lr}
0000ac e1a00003 MOV r0,r3
;;;99 }
0000b0 e12fff1e BX lr
;;;100
ENDP
uart0_prints PROC
;;;101 int uart0_prints ( char* s )
;;;102 {
0000b4 e1a03000 MOV r3,r0
;;;103 int i = 0;
0000b8 e3a0c000 MOV r12,#0
0000bc e52de004 PUSH {lr} ;102
;;;104 while ( *s ) {
0000c0 ea000002 B |L1.208|
|L1.196|
;;;105 uart0_putchar( *s++ );
0000c4 e2833001 ADD r3,r3,#1
0000c8 ebfffffe BL uart0_putchar
;;;106 i++;
0000cc e28cc001 ADD r12,r12,#1
|L1.208|
0000d0 e5d30000 LDRB r0,[r3,#0] ;104
0000d4 e3500000 CMP r0,#0 ;104
0000d8 1afffff9 BNE |L1.196|
;;;107 }
;;;108 return i;
0000dc e49de004 POP {lr}
0000e0 e1a0000c MOV r0,r12
;;;109 }
0000e4 e12fff1e BX lr
;;;110
ENDP
uart0_kbhit PROC
;;;120 #endif
;;;121 return 0;
0000e8 e3a00000 MOV r0,#0
;;;122 }
0000ec e12fff1e BX lr
;;;123
ENDP
uart0_getc PROC
;;;129 #endif
;;;130 return 0;
0000f0 e3a00000 MOV r0,#0
;;;131 }
0000f4 e12fff1e BX lr
;;;132
ENDP
sendchar PROC
;;;134 /* implementation of putchar (also used by printf function to output data) */
;;;135 int sendchar (int ch) { /* Write character to Serial Port */
0000f8 e59f1050 LDR r1,|L1.336|
;;;136
;;;137 if (ch == '\n') {
0000fc e350000a CMP r0,#0xa
000100 1a000005 BNE |L1.284|
|L1.260|
;;;138 while (!(U0LSR & 0x20));
000104 e5d12014 LDRB r2,[r1,#0x14]
000108 e3120020 TST r2,#0x20
00010c 0afffffc BEQ |L1.260|
;;;139 U1THR = CR; /* output CR */
000110 e59f303c LDR r3,|L1.340|
000114 e3a0200d MOV r2,#0xd
000118 e5c32000 STRB r2,[r3,#0]
|L1.284|
;;;140 }
;;;141 while (!(U0LSR & 0x20));
00011c e5d12014 LDRB r2,[r1,#0x14]
000120 e3120020 TST r2,#0x20
000124 0afffffc BEQ |L1.284|
;;;142 return (U0THR = ch);
000128 e20000ff AND r0,r0,#0xff
00012c e5c10000 STRB r0,[r1,#0]
;;;143 }
000130 e12fff1e BX lr
;;;144
ENDP
getkey PROC
;;;145
;;;146 int getkey (void) { /* Read character from Serial Port */
000134 e59f0014 LDR r0,|L1.336|
|L1.312|
;;;147
;;;148 while (!(U0LSR & 0x01));
000138 e5d01014 LDRB r1,[r0,#0x14]
00013c e3110001 TST r1,#1
000140 0afffffc BEQ |L1.312|
;;;149
;;;150 return (U0RBR);
000144 e5d00000 LDRB r0,[r0,#0]
;;;151 }
000148 e12fff1e BX lr
;;;152
ENDP
|L1.332|
00014c e002c000 DCD 0xe002c000
|L1.336|
000150 e000c000 DCD 0xe000c000
|L1.340|
000154 e0010000 DCD 0xe0010000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -