📄 usart.lst
字号:
*** CODE SEGMENT '?PR?uartinit?T?usart':
10: *AT91C_PMC_PCER|=0x00000040; //PMC外设时钟使能
ARM COMPILER V2.53, usart 19/07/06 08:38:09 PAGE 5
00000000 2240 MOV R2,#0x40
00000002 4800 LDR R0,=0xFFFFFC10
00000004 6801 LDR R1,[R0,#0x0]
00000006 4311 ORR R1,R2
00000008 6001 STR R1,[R0,#0x0]
11: *AT91C_PIOA_PDR|=0x00000060; //Disable I/O,PA5=RXD0,PA6=TXD0
0000000A 2260 MOV R2,#0x60
0000000C 4800 LDR R0,=0xFFFFF404
0000000E 6801 LDR R1,[R0,#0x0]
00000010 4311 ORR R1,R2
00000012 6001 STR R1,[R0,#0x0]
12: *AT91C_PIOA_ASR|=0x00000060; //PIO分配成UART
00000014 4800 LDR R0,=0xFFFFF470
00000016 6801 LDR R1,[R0,#0x0]
00000018 4311 ORR R1,R2
0000001A 6001 STR R1,[R0,#0x0]
13: *AT91C_US0_CR=0XAC; //RESET UART
0000001C 21AC MOV R1,#0xAC
0000001E 4800 LDR R0,=0xFFFC0000
00000020 6001 STR R1,[R0,#0x0]
14: *AT91C_US0_MR=0X8C0; //8bit,No,1Bit Stop
00000022 4800 LDR R1,=0x8C0
00000024 4800 LDR R0,=0xFFFC0004
00000026 6001 STR R1,[R0,#0x0]
15: *AT91C_US0_IDR=0XF3FFF; //Disable UART Interrupt
00000028 4800 LDR R1,=0xF3FFF
0000002A 4800 LDR R0,=0xFFFC000C
0000002C 6001 STR R1,[R0,#0x0]
17: *AT91C_US0_BRGR=30;
0000002E 211E MOV R1,#0x1E
00000030 4800 LDR R0,=0xFFFC0020
00000032 6001 STR R1,[R0,#0x0]
18: *AT91C_US0_CR=0X50; //SET UART
00000034 2150 MOV R1,#0x50
00000036 4800 LDR R0,=0xFFFC0000
00000038 6001 STR R1,[R0,#0x0]
19: }
0000003A 4770 BX R14
0000003C ENDP ; 'uartinit?T'
*** CODE SEGMENT '?PR?Usart1_Init?T?usart':
29: *AT91C_PMC_PCER=(unsigned int)1<<AT91C_ID_US1; //PMC外设时钟使能
00000000 2180 MOV R1,#0x80
00000002 4800 LDR R0,=0xFFFFFC10
00000004 6001 STR R1,[R0,#0x0]
30: *AT91C_PIOA_PDR=AT91C_PA21_RXD1 | AT91C_PA22_TXD1; //Disable I/O,PA5=RXD0,PA6=TXD0
00000006 4800 LDR R1,=0x600000
00000008 4800 LDR R0,=0xFFFFF404
0000000A 6001 STR R1,[R0,#0x0]
31: *AT91C_PIOA_ASR=AT91C_PA21_RXD1 | AT91C_PA22_TXD1; //PIO分配成UART
0000000C 4800 LDR R0,=0xFFFFF470
0000000E 6001 STR R1,[R0,#0x0]
32: *AT91C_US1_CR=0XAC; //RESET UART
00000010 21AC MOV R1,#0xAC
00000012 4800 LDR R0,=0xFFFC4000
00000014 6001 STR R1,[R0,#0x0]
33: *AT91C_US1_MR=0X8C0; //8bit,No,1Bit Stop
00000016 4800 LDR R1,=0x8C0
00000018 4800 LDR R0,=0xFFFC4004
0000001A 6001 STR R1,[R0,#0x0]
34: *AT91C_US1_IDR=0XF3FFF; //Disable UART Interrupt
0000001C 4800 LDR R1,=0xF3FFF
0000001E 4800 LDR R0,=0xFFFC400C
00000020 6001 STR R1,[R0,#0x0]
36: *AT91C_US1_BRGR=120;
00000022 2178 MOV R1,#0x78
00000024 4800 LDR R0,=0xFFFC4020
ARM COMPILER V2.53, usart 19/07/06 08:38:09 PAGE 6
00000026 6001 STR R1,[R0,#0x0]
37: *AT91C_US1_CR=0X50; //SET UART
00000028 2150 MOV R1,#0x50
0000002A 4800 LDR R0,=0xFFFC4000
0000002C 6001 STR R1,[R0,#0x0]
38: }
0000002E 4770 BX R14
00000030 ENDP ; 'Usart1_Init?T'
*** CODE SEGMENT '?PR?Uart0ISR?A?usart':
44: void Uart0ISR(void) __irq
00000000 E92D001F STMDB R13!,{R0-R4}
45: {
00000004 ; SCOPE-START
46: unsigned int s=0;
00000004 E3A03000 MOV R3,#0x0
00000008 ---- Variable 's' assigned to Register 'R3' ----
47: unsigned char ch=0;
00000008 E3A01000 MOV R1,#0x0
0000000C E1A00001 MOV R0,R1 ; ch
00000010 ---- Variable 'ch' assigned to Register 'R0' ----
50: s = AT91C_BASE_US0->US_CSR;
00000010 E5102000 LDR R2,=0xFFFC0014
00000014 E5923000 LDR R3,[R2,#0x0]
52: if(s&0x01) // RXRDY
00000018 E1A02003 MOV R2,R3 ; s
0000001C E3120001 TST R2,#0x0001 ; s
00000020 0A000014 BEQ L_1 ; Targ=0x78
54: ch = AT91C_BASE_US0->US_RHR;
00000024 E5100000 LDR R0,=0xFFFC0018
00000028 E5900000 LDR R0,[R0,#0x0]
0000002C E1A00C00 MOV R0,R0,LSL #24
00000030 E1A00C20 MOV R0,R0,LSR #24
55: g_bpData[bI++] = AT91C_BASE_US0->US_RHR;
00000034 E5100000 LDR R0,=0xFFFC0018
00000038 E5900000 LDR R0,[R0,#0x0]
0000003C E1A00C00 MOV R0,R0,LSL #24
00000040 E1A00C20 MOV R0,R0,LSR #24
00000044 E5103000 LDR R3,=bI ; bI
00000048 E5D32000 LDRB R2,[R3,#0x0] ; bI
0000004C E2824001 ADD R4,R2,#0x0001
00000050 E5C34000 STRB R4,[R3,#0x0] ; bI
00000054 E1A03002 MOV R3,R2
00000058 E5102000 LDR R2,=g_bpData ; g_bpData
0000005C E7C20003 STRB R0,[R2,+R3]
56: if (bI==20)
00000060 E5100000 LDR R0,=bI ; bI
00000064 E5D00000 LDRB R0,[R0,#0x0] ; bI
00000068 E3500014 CMP R0,#0x0014
0000006C 1A000001 BNE L_1 ; Targ=0x78
58: bI = 0;
00000070 E5100000 LDR R0,=bI ; bI
00000074 E5C01000 STRB R1,[R0,#0x0] ; bI
60: }
00000078 L_1:
66: AT91C_BASE_AIC->AIC_EOICR = 1;//End of Interrupt
00000078 E3A01001 MOV R1,#0x1
0000007C E5100000 LDR R0,=0xFFFFF130
00000080 E5801000 STR R1,[R0,#0x0]
00000084 ; SCOPE-END
67: }
00000084 E8BD001F LDMIA R13!,{R0-R4}
00000088 E25EF004 SUBS R15,R14,#0x0004
0000008C ENDP ; 'Uart0ISR?A'
*** CODE SEGMENT '?PR?uart0init?T?usart':
73: void uart0init(void)
00000000 B410 PUSH {R4}
ARM COMPILER V2.53, usart 19/07/06 08:38:09 PAGE 7
75: *AT91C_PMC_PCER|=0x00000040; //PMC外设时钟使能
00000002 2140 MOV R1,#0x40
00000004 4800 LDR R0,=0xFFFFFC10
00000006 6802 LDR R2,[R0,#0x0]
00000008 430A ORR R2,R1
0000000A 6002 STR R2,[R0,#0x0]
76: *AT91C_PIOA_PDR|=0x00000060; //Disable I/O,PA5=RXD0,PA6=TXD0
0000000C 2360 MOV R3,#0x60
0000000E 4800 LDR R0,=0xFFFFF404
00000010 6802 LDR R2,[R0,#0x0]
00000012 431A ORR R2,R3
00000014 6002 STR R2,[R0,#0x0]
77: *AT91C_PIOA_ASR|=0x00000060; //PIO分配成UART
00000016 4800 LDR R0,=0xFFFFF470
00000018 6802 LDR R2,[R0,#0x0]
0000001A 431A ORR R2,R3
0000001C 6002 STR R2,[R0,#0x0]
78: *AT91C_US0_CR=0XAC; //RESET UART
0000001E 22AC MOV R2,#0xAC
00000020 4800 LDR R0,=0xFFFC0000
00000022 6002 STR R2,[R0,#0x0]
79: *AT91C_US0_MR=0X8C0; //8bit,No,1Bit Stop
00000024 4800 LDR R2,=0x8C0
00000026 4800 LDR R0,=0xFFFC0004
00000028 6002 STR R2,[R0,#0x0]
80: *AT91C_US0_IDR=0XF3FFF; //Disable UART Interrupt
0000002A 4800 LDR R3,=0xF3FFF
0000002C 4800 LDR R0,=0xFFFC000C
0000002E 6003 STR R3,[R0,#0x0]
82: *AT91C_US0_BRGR=30;
00000030 221E MOV R2,#0x1E
00000032 4800 LDR R0,=0xFFFC0020
00000034 6002 STR R2,[R0,#0x0]
83: *AT91C_US0_CR=0X50; //SET UART
00000036 2250 MOV R2,#0x50
00000038 4800 LDR R0,=0xFFFC0000
0000003A 6002 STR R2,[R0,#0x0]
85: AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US0] = AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE | 1;
0000003C 2201 MOV R2,#0x1
0000003E 4800 LDR R0,=0xFFFFF018
00000040 6002 STR R2,[R0,#0x0]
86: AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0]=(unsigned int) Uart0ISR;//赋中断服务函数指针
00000042 4C00 LDR R4,=Uart0ISR?A ; Uart0ISR?A
00000044 4800 LDR R0,=0xFFFFF098
00000046 6004 STR R4,[R0,#0x0]
87: AT91C_BASE_US0->US_IDR=0xF3FFF; // disable all interrupts
00000048 4800 LDR R0,=0xFFFC000C
0000004A 6003 STR R3,[R0,#0x0]
88: AT91C_BASE_US0->US_IER=0x01;//允许接收中断
0000004C 4800 LDR R0,=0xFFFC0008
0000004E 6002 STR R2,[R0,#0x0]
89: AT91C_BASE_AIC->AIC_IECR = (unsigned int)1<<AT91C_ID_US0;
00000050 4800 LDR R0,=0xFFFFF120
00000052 6001 STR R1,[R0,#0x0]
91: }
00000054 BC10 POP {R4}
00000056 4770 BX R14
00000058 ENDP ; 'uart0init?T'
*** CODE SEGMENT '?PR?putcharme?T?usart':
92: unsigned char putcharme (unsigned char ch)
00000000 1C01 MOV R1,R0 ; ch
00000002 ---- Variable 'ch' assigned to Register 'R1' ----
94: if (ch == '\n')
00000002 1C08 MOV R0,R1 ; ch
00000004 0600 LSL R0,R0,#0x18 ; ch
00000006 0E00 LSR R0,R0,#0x18
ARM COMPILER V2.53, usart 19/07/06 08:38:09 PAGE 8
00000008 280A CMP R0,#0xA
0000000A D107 BNE L_11 ; T=0x0000001C
96: while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY)); // Wait for Empty Tx Buffer
0000000C L_4:
0000000C 4800 LDR R0,=0xFFFC0014
0000000E 6800 LDR R0,[R0,#0x0]
00000010 2202 MOV R2,#0x2
00000012 4210 TST R0,R2
00000014 D0FA BEQ L_4 ; T=0x0000000C
97: *AT91C_US0_THR = '\r'; // Output CR
00000016 220D MOV R2,#0xD
00000018 4800 LDR R0,=0xFFFC001C
0000001A 6002 STR R2,[R0,#0x0]
99: while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY)); // Wait for Empty Tx Buffer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -