?? serial.lst
字號:
1 .code 16 2 .file "serial.c" 10 .Ltext0: 11 .global pUSART 12 .data 13 .align 2 16 pUSART: 17 0000 0000FCFF .word -262144 18 .text 19 .align 2 20 .global uart0_kbhit 21 .code 16 22 .thumb_func 24 uart0_kbhit: 25 .LFB2: 26 .file 1 "usart/serial.c" 1:usart/serial.c **** /******************************************************************************/
2:usart/serial.c **** /* This file has been a part of the uVision/ARM development tools */
3:usart/serial.c **** /* Copyright KEIL ELEKTRONIK GmbH 2002-2004 */
4:usart/serial.c **** /******************************************************************************/
5:usart/serial.c **** /* */
6:usart/serial.c **** /* SERIAL.C: Low Level Serial Routines */
7:usart/serial.c **** /* */
8:usart/serial.c **** /******************************************************************************/
9:usart/serial.c ****
10:usart/serial.c **** /*
11:usart/serial.c **** Martin Thomas :
12:usart/serial.c **** - slightly modified for the WinARM example
13:usart/serial.c **** - changed function names to avoid conflict with "stdio"
14:usart/serial.c **** (so far no syscalls for the newlib in this example)
15:usart/serial.c **** - Keil seems to "reject" the AT91lib*.h. Don't know
16:usart/serial.c **** why since the layer is "thin". Maybe will change this to
17:usart/serial.c **** "lib Style" in later version...
18:usart/serial.c **** */
19:usart/serial.c ****
20:usart/serial.c **** // already done in Board.h: #include <AT91SAM7S64.H> /* AT91SAMT7S64 definitions 21:usart/serial.c **** //#include "include/Board.h"
22:usart/serial.c **** #include "../include/include.h"
23:usart/serial.c ****
24:usart/serial.c **** #define BR 115200 /* Baud Rate */
25:usart/serial.c **** #define MCK 47923200 // MCK (PLLRC div by 2)
26:usart/serial.c **** #define BRD (MCK/16/BR) /* Baud Rate Divisor */
27:usart/serial.c ****
28:usart/serial.c ****
29:usart/serial.c **** AT91S_USART * pUSART = AT91C_BASE_US0; /* Global Pointer to USART0 */
30:usart/serial.c ****
31:usart/serial.c ****
32:usart/serial.c **** int uart0_kbhit( void ) /* returns true if character in receive buffer */
33:usart/serial.c **** {
27 .loc 1 33 0 28 .LVL0: 34:usart/serial.c **** if ( pUSART->US_CSR & AT91C_US_RXRDY) {
29 .loc 1 34 0 30 0000 024B ldr r3, .L3 31 0002 1B68 ldr r3, [r3] 32 0004 5869 ldr r0, [r3, #20] 33 0006 0123 mov r3, #1 34 0008 1840 and r0, r0, r3 35 .loc 1 33 0 36 @ lr needed for prologue 35:usart/serial.c **** return 1;
36:usart/serial.c **** }
37:usart/serial.c **** else {
38:usart/serial.c **** return 0;
39:usart/serial.c **** }
40:usart/serial.c **** }
37 .loc 1 40 0 38 @ sp needed for prologue 39 000a 7047 bx lr 40 .L4: 41 .align 2 42 .L3: 43 000c 00000000 .word pUSART 44 .LFE2: 46 .align 2 47 .global uart0_init 48 .code 16 49 .thumb_func 51 uart0_init: 52 .LFB3: 41:usart/serial.c ****
42:usart/serial.c ****
43:usart/serial.c **** void uart0_init (void) { /* Initialize Serial Interface */
53 .loc 1 43 0 54 .LVL1: 44:usart/serial.c **** /* mt: n.b: uart0 clock must be enabled to use it */
45:usart/serial.c ****
46:usart/serial.c **** *AT91C_PIOA_PDR = AT91C_PA0_RXD0 | /* Enable RxD0 Pin */
55 .loc 1 46 0 56 0010 074B ldr r3, .L7 57 0012 0322 mov r2, #3 58 0014 1A60 str r2, [r3] 47:usart/serial.c **** AT91C_PA1_TXD0; /* Enalbe TxD0 Pin */
48:usart/serial.c ****
49:usart/serial.c **** pUSART->US_CR = AT91C_US_RSTRX | /* Reset Receiver */
59 .loc 1 49 0 60 0016 074B ldr r3, .L7+4 61 0018 1A68 ldr r2, [r3] 62 001a AC23 mov r3, #172 63 001c 1360 str r3, [r2] 50:usart/serial.c **** AT91C_US_RSTTX | /* Reset Transmitter */
51:usart/serial.c **** AT91C_US_RXDIS | /* Receiver Disable */
52:usart/serial.c **** AT91C_US_TXDIS; /* Transmitter Disable */
53:usart/serial.c ****
54:usart/serial.c **** pUSART->US_MR = AT91C_US_USMODE_NORMAL | /* Normal Mode */
64 .loc 1 54 0 65 001e 8C23 mov r3, #140 66 0020 1B01 lsl r3, r3, #4 67 0022 5360 str r3, [r2, #4] 55:usart/serial.c **** AT91C_US_CLKS_CLOCK | /* Clock = MCK */
56:usart/serial.c **** AT91C_US_CHRL_8_BITS | /* 8-bit Data */
57:usart/serial.c **** AT91C_US_PAR_NONE | /* No Parity */
58:usart/serial.c **** AT91C_US_NBSTOP_1_BIT; /* 1 Stop Bit */
59:usart/serial.c ****
60:usart/serial.c **** pUSART->US_BRGR = BRD; /* Baud Rate Divisor */
68 .loc 1 60 0 69 0024 1A23 mov r3, #26 70 0026 1362 str r3, [r2, #32] 61:usart/serial.c ****
62:usart/serial.c **** pUSART->US_CR = AT91C_US_RXEN | /* Receiver Enable */
71 .loc 1 62 0 72 0028 5023 mov r3, #80 73 .loc 1 43 0 74 @ lr needed for prologue 75 .loc 1 62 0 76 002a 1360 str r3, [r2] 63:usart/serial.c **** AT91C_US_TXEN; /* Transmitter Enable */
64:usart/serial.c **** }
77 .loc 1 64 0 78 @ sp needed for prologue 79 002c 7047 bx lr 80 .L8: 81 002e 0000 .align 2 82 .L7: 83 0030 04F4FFFF .word -3068 84 0034 00000000 .word pUSART 85 .LFE3: 87 .align 2 88 .global uart0_putc 89 .code 16 90 .thumb_func 92 uart0_putc: 93 .LFB4: 65:usart/serial.c ****
66:usart/serial.c ****
67:usart/serial.c ****
68:usart/serial.c **** int uart0_putc(int ch)
69:usart/serial.c **** {
94 .loc 1 69 0 95 .LVL2: 70:usart/serial.c **** while (!(pUSART->US_CSR & AT91C_US_TXRDY)); /* Wait for Empty Tx Buffer */
96 .loc 1 70 0 97 0038 034B ldr r3, .L16 98 003a 1A68 ldr r2, [r3] 99 .loc 1 69 0 100 @ lr needed for prologue 101 .L11: 102 .loc 1 70 0 103 003c 5369 ldr r3, [r2, #20] 104 003e 9907 lsl r1, r3, #30 105 0040 FCD5 bpl .L11 71:usart/serial.c **** return (pUSART->US_THR = ch); /* Transmit Character */
106 .loc 1 71 0 107 0042 D061 str r0, [r2, #28] 108 0044 D069 ldr r0, [r2, #28] 109 .LVL3: 72:usart/serial.c **** }
110 .loc 1 72 0 111 @ sp needed for prologue 112 0046 7047 bx lr 113 .L17: 114 .align 2 115 .L16: 116 0048 00000000 .word pUSART 117 .LFE4: 119 .align 2 120 .global uart0_putchar 121 .code 16 122 .thumb_func 124 uart0_putchar: 125 .LFB5: 73:usart/serial.c ****
74:usart/serial.c **** int uart0_putchar (int ch) { /* Write Character to Serial Port */
126 .loc 1 74 0 127 004c 10B5 push {r4, lr} 128 .LCFI0: 129 .LVL4: 130 .loc 1 74 0 131 004e 041C mov r4, r0 75:usart/serial.c ****
76:usart/serial.c **** if (ch == '\n') { /* Check for LF */
132 .loc 1 76 0 133 0050 0A28 cmp r0, #10 134 0052 02D1 bne .L19 77:usart/serial.c **** uart0_putc( '\r' ); /* Output CR */
135 .loc 1 77 0 136 0054 0D20 mov r0, #13 137 .LVL5: 138 0056 FFF7FEFF bl uart0_putc 139 .LVL6: 140 .L19: 78:usart/serial.c **** }
79:usart/serial.c **** return uart0_putc( ch ); /* Transmit Character */
141 .loc 1 79 0 142 005a 201C mov r0, r4 143 005c FFF7FEFF bl uart0_putc 80:usart/serial.c **** }
144 .loc 1 80 0 145 @ sp needed for prologue 146 .LVL7: 147 0060 10BC pop {r4} 148 0062 02BC pop {r1} 149 0064 0847 bx r1 150 .LFE5: 152 0066 0000 .align 2 153 .global uart0_puts 154 .code 16 155 .thumb_func 157 uart0_puts: 158 .LFB6: 81:usart/serial.c ****
82:usart/serial.c **** int uart0_puts ( char* s ){
159 .loc 1 82 0 160 0068 10B5 push {r4, lr} 161 .LCFI1: 162 .LVL8: 163 .loc 1 82 0 164 006a 041C mov r4, r0 165 006c 02E0 b .L23 166 .LVL9: 167 .L24: 83:usart/serial.c **** while ( *s ) uart0_putchar( *s++ );
168 .loc 1 83 0 169 006e 0134 add r4, r4, #1 170 0070 FFF7FEFF bl uart0_putchar 171 .LVL10: 172 .L23: 173 0074 2078 ldrb r0, [r4] 174 0076 0028 cmp r0, #0 175 0078 F9D1 bne .L24 84:usart/serial.c **** return 0;
85:usart/serial.c **** }
176 .loc 1 85 0 177 @ sp needed for prologue 178 .LVL11: 179 007a 10BC pop {r4} 180 007c 02BC pop {r1} 181 007e 0847 bx r1 182 .LFE6: 184 .align 2 185 .global uart0_getc 186 .code 16 187 .thumb_func 189 uart0_getc: 190 .LFB7: 86:usart/serial.c ****
87:usart/serial.c ****
88:usart/serial.c ****
89:usart/serial.c **** int uart0_getc ( void ) /* Read Character from Serial Port */
90:usart/serial.c **** {
191 .loc 1 90 0 192 .LVL12: 91:usart/serial.c ****
92:usart/serial.c **** while (!(pUSART->US_CSR & AT91C_US_RXRDY)); /* Wait for Full Rx Buffer */
193 .loc 1 92 0 194 0080 034B ldr r3, .L34 195 0082 1A68 ldr r2, [r3] 196 .loc 1 90 0 197 @ lr needed for prologue 198 .L29: 199 .loc 1 92 0 200 0084 5369 ldr r3, [r2, #20] 201 0086 D907 lsl r1, r3, #31 202 0088 FCD5 bpl .L29 93:usart/serial.c **** return (pUSART->US_RHR); /* Read Character */
203 .loc 1 93 0 204 008a 9069 ldr r0, [r2, #24] 94:usart/serial.c **** }
205 .loc 1 94 0 206 @ sp needed for prologue 207 008c 7047 bx lr 208 .L35: 209 008e 0000 .align 2 210 .L34: 211 0090 00000000 .word pUSART 212 .LFE7: 295 .Letext0:DEFINED SYMBOLS *ABS*:00000000 serial.c/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:1 .text:00000000 $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:16 .data:00000000 pUSART/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:17 .data:00000000 $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:24 .text:00000000 uart0_kbhit/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:43 .text:0000000c $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:51 .text:00000010 uart0_init/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:48 .text:00000010 $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:83 .text:00000030 $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:92 .text:00000038 uart0_putc/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:89 .text:00000038 $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:116 .text:00000048 $d/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:124 .text:0000004c uart0_putchar/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:121 .text:0000004c $t/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:157 .text:00000068 uart0_puts/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:189 .text:00000080 uart0_getc/cygdrive/c/DOCUME~1/Dima/LOCALS~1/Temp/ccZfcStZ.s:211 .text:00000090 $dNO UNDEFINED SYMBOLS
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -