📄 serial.lst
字号:
00000012 4718 BX R3
00000014 ENDP ; 'main'
*** CODE SEGMENT '?PR?uart_init?T?Serial':
66: UBRDIV0 = BRD; // 19200bps
00000000 21C2 MOV R1,#0xC2
00000002 4800 LDR R0,=0x1D00028
00000004 6001 STR R1,[R0,#0x0]
67: ULCON0 = 0x03; // 帧长度8位,停止位1位,无校验
00000006 2203 MOV R2,#0x3
00000008 4800 LDR R0,=0x1D00000
0000000A 6002 STR R2,[R0,#0x0]
68: UCON0 = 0x0C2; // 接收BDMA0允许,允许接收超时、错误中断
0000000C 4800 LDR R0,=0x1D00004
0000000E 6001 STR R1,[R0,#0x0]
69: UFCON0 = 0x21; // 启用FIFO,接收FIFO触发级别为12字节
00000010 2121 MOV R1,#0x21
00000012 4800 LDR R0,=0x1D00008
00000014 6001 STR R1,[R0,#0x0]
70: }
00000016 4770 BX R14
00000018 ENDP ; 'uart_init?T'
*** CODE SEGMENT '?PR?isr_init?T?Serial':
76: INTMSK &= 0x03FDBF7F; // Global Interrupt Enable
00000000 4800 LDR R2,=0x3FDBF7F
00000002 4800 LDR R0,=0x1E0000C
00000004 6801 LDR R1,[R0,#0x0]
00000006 4011 AND R1,R2
00000008 6001 STR R1,[R0,#0x0]
80: INTCON = 0x01; // Disable FIQ, Enable IRQ,
ARM COMPILER V2.51a, Serial 19/07/06 11:31:13 PAGE 5
0000000A 2101 MOV R1,#0x1
0000000C 4800 LDR R0,=0x1E00000
0000000E 6001 STR R1,[R0,#0x0]
82: }
00000010 4770 BX R14
00000012 ENDP ; 'isr_init?T'
*** CODE SEGMENT '?PR?dmac_init?T?Serial':
89: BDISRC0=(0<<30)+(3<<28)+(int)(URXH0); // byte,fix,URXH0
00000000 4800 LDR R0,=0x1D00024
00000002 6801 LDR R1,[R0,#0x0]
00000004 4800 LDR R0,=0x30000000
00000006 1809 ADD R1,R0
00000008 4800 LDR R0,=0x1F80004
0000000A 6001 STR R1,[R0,#0x0]
90: BDIDES0=(2<<30)+(1<<28)+(int)(rxdata); // IO2M,inc,rxdata
0000000C 4800 LDR R1,=rxdata + 0x90000000 ; rxdata-1879048192
0000000E 4800 LDR R0,=0x1F80008
00000010 6001 STR R1,[R0,#0x0]
92: BDICNT0=(2<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20)+RXDATA_SIZE;
00000012 4800 LDR R1,=0x84C000FF
00000014 4800 LDR R0,=0x1F8000C
00000016 6001 STR R1,[R0,#0x0]
93: BDICNT0 |= (1<<20);// DMA enable
00000018 4800 LDR R2,=0x100000
0000001A 4800 LDR R0,=0x1F8000C
0000001C 6801 LDR R1,[R0,#0x0]
0000001E 4311 ORR R1,R2
00000020 6001 STR R1,[R0,#0x0]
94: BDCON0 = 0x0<<2;
00000022 2100 MOV R1,#0x0
00000024 4800 LDR R0,=0x1F80000
00000026 6001 STR R1,[R0,#0x0]
95: }
00000028 4770 BX R14
0000002A ENDP ; 'dmac_init?T'
*** CODE SEGMENT '?PR?HandlerBDMA0?A?Serial':
101: void HandlerBDMA0(void) __irq
00000000 E92D0003 STMDB R13!,{R0-R1}
103: BDISRC0=(0<<30)+(3<<28)+(int)(URXH0); // byte,fix,URXH0
00000004 E5100000 LDR R0,=0x1D00024
00000008 E5901000 LDR R1,[R0,#0x0]
0000000C E2811203 ADD R1,R1,#0x30000000
00000010 E5100000 LDR R0,=0x1F80004
00000014 E5801000 STR R1,[R0,#0x0]
104: BDIDES0=(2<<30)+(1<<28)+(int)(rxdata); // IO2M,inc,rxdata
00000018 E5101000 LDR R1,=rxdata + 0x90000000 ; rxdata-1879048192
0000001C E5100000 LDR R0,=0x1F80008
00000020 E5801000 STR R1,[R0,#0x0]
106: BDICNT0=(2<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20)+RXDATA_SIZE;
00000024 E5101000 LDR R1,=0x84C000FF
00000028 E5100000 LDR R0,=0x1F8000C
0000002C E5801000 STR R1,[R0,#0x0]
107: BDICNT0 |= (1<<20);// DMA enable
00000030 E5100000 LDR R0,=0x1F8000C
00000034 E5901000 LDR R1,[R0,#0x0]
00000038 E3811601 ORR R1,R1,#0x100000
0000003C E5801000 STR R1,[R0,#0x0]
108: BDCON0 = 0x0<<2;
00000040 E3A01000 MOV R1,#0x0
00000044 E3A0077E MOV R0,#0x1F80000
00000048 E5801000 STR R1,[R0,#0x0]
109: }
0000004C E8BD0003 LDMIA R13!,{R0-R1}
00000050 E25EF004 SUBS R15,R14,#0x0004
00000054 ENDP ; 'HandlerBDMA0?A'
*** CODE SEGMENT '?PR?HandlerUERR01?A?Serial':
ARM COMPILER V2.51a, Serial 19/07/06 11:31:13 PAGE 6
114: void HandlerUERR01(void) __irq
00000000 E92D0003 STMDB R13!,{R0-R1}
115: {
00000004 ; SCOPE-START
117: errflag = UERSTAT0; // 读错误状态寄存器
00000004 E5100000 LDR R0,=0x1D00014
00000008 E5901000 LDR R1,[R0,#0x0]
0000000C E1A01C01 MOV R1,R1,LSL #24
00000010 E1A01C21 MOV R1,R1,LSR #24
00000014 ---- Variable 'errflag' assigned to Register 'R1' ----
118: if(errflag&0x01) // 溢出错误
00000014 E1A00001 MOV R0,R1 ; errflag
00000018 E1A00C00 MOV R0,R0,LSL #24 ; errflag
0000001C E1A00C20 MOV R0,R0,LSR #24
00000020 E3100001 TST R0,#0x0001
00000024 0A000001 BEQ L_5 ; Targ=0x30
119: errdata = URXH0; // 读接收缓冲区
00000028 E5100000 LDR R0,=0x1D00024
0000002C E5900000 LDR R0,[R0,#0x0]
00000030 L_5:
120: I_ISPC = (1<<14); // 清除UERR01 Error Interrupt
00000030 E3A01901 MOV R1,#0x4000
00000034 E5100000 LDR R0,=0x1E00024
00000038 E5801000 STR R1,[R0,#0x0]
0000003C ; SCOPE-END
122: }
0000003C E8BD0003 LDMIA R13!,{R0-R1}
00000040 E25EF004 SUBS R15,R14,#0x0004
00000044 ENDP ; 'HandlerUERR01?A'
*** CODE SEGMENT '?PR?HandlerURXD0?A?Serial':
128: void HandlerURXD0(void) __irq
00000000 E92D001F STMDB R13!,{R0-R4}
00000004 E24DD010 SUB R13,R13,#0x0010
129: {
00000008 ; SCOPE-START
133: I_ISPC = (1<<7); // 清除UART0 Rx Interrupt
00000008 E3A01080 MOV R1,#0x80
0000000C E5100000 LDR R0,=0x1E00024
00000010 E5801000 STR R1,[R0,#0x0]
134: rxcount = UFSTAT0&0x0f; // 接收FIFO的数据量
00000014 E5100000 LDR R0,=0x1D00018
00000018 E5901000 LDR R1,[R0,#0x0]
0000001C E201100F AND R1,R1,#0x000F
00000020 ---- Variable 'rxcount' assigned to Register 'R1' ----
135: for(k=0; k<rxcount; k++)
00000020 E3A00000 MOV R0,#0x0
00000024 ---- Variable 'k' assigned to Register 'R0' ----
00000024 EA000007 B L_8 ; Targ=0x48
00000028 L_9:
136: data[k]=URXH0 ; // 从接收FIFO读入剩余数据
00000028 E5102000 LDR R2,=0x1D00024
0000002C E5922000 LDR R2,[R2,#0x0]
00000030 E1A02C02 MOV R2,R2,LSL #24
00000034 E1A02C22 MOV R2,R2,LSR #24
00000038 E1A04000 MOV R4,R0 ; k
0000003C E28D3000 ADD R3,R13,#0x0000
00000040 E7C32004 STRB R2,[R3,+R4]
00000044 E2800001 ADD R0,R0,#0x0001 ; k
00000048 L_8:
00000048 E1A03001 MOV R3,R1 ; rxcount
0000004C E1A02000 MOV R2,R0 ; k
00000050 E1520003 CMP R2,R3 ; k
00000054 BAFFFFF3 BLT L_9 ; Targ=0x28
00000058 ; SCOPE-END
137: }
00000058 E28DD010 ADD R13,R13,#0x0010
ARM COMPILER V2.51a, Serial 19/07/06 11:31:13 PAGE 7
0000005C E8BD001F LDMIA R13!,{R0-R4}
00000060 E25EF004 SUBS R15,R14,#0x0004
00000064 ENDP ; 'HandlerURXD0?A'
Module Information Static
----------------------------------
code size = ------
data size = 255
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -