📄 uart.lst
字号:
266 1
267 1 VICVectAddr=0;
268 1 }
269
270
271 /*******************************************************************
272 * 功能描述: 初始化UART0
273 * 参 数:
274 * 返 回:
275 * 备 注:
276 *******************************************************************/
277 void InitUart (void)
278 {
279 1 // 配置UART管脚
280 1 PINSEL0 = (PINSEL0 & (~0x0f000f)) | 0x050005; // set p0[1..0] for uart0
281 1
282 1 ResetBufferPointer(0);
283 1 ResetBufferPointer(1);
284 1
285 1 U0LCR = 0x83; // 默认"9600,n,8,1"
286 1 SET_UART0_BAUD(9600)
287 1 U0LCR = 0x03;
288 1 U0IER = 0x03; // enable rx/tx interrupt.
289 1 U0FCR = 1 | (2<<6); // enable fifo,8 byte
290 1
291 1 U1LCR = 0x83; // 默认"9600,n,8,1"
292 1 SET_UART1_BAUD(9600)
293 1 U1LCR = 0x03;
294 1 U1IER = 0x03; // enable rx/tx interrupt.
295 1 U1FCR = 1 | (2<<6); // enable fifo,8 byte
296 1
297 1 //设置向量中断
298 1 VICVectAddr3 = (unsigned long)Uart0_irq;
299 1 VICVectCntl3 = 0x20 | 6;
300 1 VICIntEnable = 1 << 6 ;
301 1
302 1 VICVectAddr4 = (unsigned long)Uart1_irq;
303 1 VICVectCntl4 = 0x20 | 7;
304 1 VICIntEnable = 1 << 7 ;
305 1 }
ARM COMPILER V2.53, uart 09/06/07 15:43:41 PAGE 6
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (USB_ReadEP?T)
EXTERN CODE16 (USB_WriteEP?T)
*** PUBLICS:
PUBLIC UartDataToHost?T
PUBLIC HostDataToUart?T
PUBLIC InitUart?T
PUBLIC ResetBufferPointer?T
PUBLIC Uart0_irq?A
PUBLIC Uart1_irq?A
PUBLIC SendBuf0
PUBLIC RcvBuf0
PUBLIC SendBuf1
PUBLIC RcvBuf1
PUBLIC r_first0
PUBLIC r_first1
PUBLIC r_next0
PUBLIC r_next1
PUBLIC s_first0
PUBLIC s_first1
PUBLIC s_next0
PUBLIC s_next1
*** DATA SEGMENT '?DT0?uart':
00000000 r_first0:
00000000 DS 4
00000004 r_first1:
00000004 DS 4
00000008 r_next0:
00000008 DS 4
0000000C r_next1:
0000000C DS 4
00000010 s_first0:
00000010 DS 4
00000014 s_first1:
00000014 DS 4
00000018 s_next0:
00000018 DS 4
0000001C s_next1:
0000001C DS 4
00000020 SendBuf0:
00000020 DS 512
00000220 RcvBuf0:
00000220 DS 1024
00000620 SendBuf1:
00000620 DS 512
00000820 RcvBuf1:
00000820 DS 1024
*** CODE SEGMENT '?PR?ResetBufferPointer?T?uart':
73: void ResetBufferPointer(DWORD dwPortNum)
00000000 1C01 MOV R1,R0 ; dwPortNum
00000002 ---- Variable 'dwPortNum' assigned to Register 'R1' ----
75: if(dwPortNum==0)
00000002 1C08 MOV R0,R1 ; dwPortNum
00000004 2800 CMP R0,#0x0 ; dwPortNum
00000006 D109 BNE L_1 ; T=0x0000001C
77: s_first0 = s_next0 = 0;
00000008 2100 MOV R1,#0x0
0000000A 4800 LDR R0,=s_next0 ; s_next0
0000000C 6001 STR R1,[R0,#0x0] ; s_next0
0000000E 4800 LDR R0,=s_first0 ; s_first0
ARM COMPILER V2.53, uart 09/06/07 15:43:41 PAGE 7
00000010 6001 STR R1,[R0,#0x0] ; s_first0
78: r_first0 = r_next0 = 0;
00000012 4800 LDR R0,=r_next0 ; r_next0
00000014 6001 STR R1,[R0,#0x0] ; r_next0
00000016 4800 LDR R0,=r_first0 ; r_first0
00000018 6001 STR R1,[R0,#0x0] ; r_first0
79: }
0000001A E008 B L_2 ; T=0x0000002E
0000001C L_1:
82: s_first1 = s_next1 = 0;
0000001C 2100 MOV R1,#0x0
0000001E 4800 LDR R0,=s_next1 ; s_next1
00000020 6001 STR R1,[R0,#0x0] ; s_next1
00000022 4800 LDR R0,=s_first1 ; s_first1
00000024 6001 STR R1,[R0,#0x0] ; s_first1
83: r_first1 = r_next1 = 0;
00000026 4800 LDR R0,=r_next1 ; r_next1
00000028 6001 STR R1,[R0,#0x0] ; r_next1
0000002A 4800 LDR R0,=r_first1 ; r_first1
0000002C 6001 STR R1,[R0,#0x0] ; r_first1
84: }
0000002E L_2:
85: }
0000002E 4770 BX R14
00000030 ENDP ; 'ResetBufferPointer?T'
*** CODE SEGMENT '?PR?UartDataToHost?T?uart':
93: void UartDataToHost(DWORD dwPort)
00000000 B5F0 PUSH {R4-R7,LR}
00000002 1C05 MOV R5,R0 ; dwPort
00000004 ---- Variable 'dwPort' assigned to Register 'R5' ----
00000004 B092 SUB R13,#0x48
00000006 ---- Variable 'first' assigned to Register 'R4' ----
94: {
00000006 ; SCOPE-START
104: if( (dwPort==0 && r_next0==r_first0) || (dwPort==1 && r_next1==r_first1))
00000006 1C28 MOV R0,R5 ; dwPort
00000008 2800 CMP R0,#0x0 ; dwPort
0000000A D105 BNE L_5 ; T=0x00000018
0000000C 4800 LDR R0,=r_first0 ; r_first0
0000000E 6801 LDR R1,[R0,#0x0] ; r_first0
00000010 4800 LDR R0,=r_next0 ; r_next0
00000012 6800 LDR R0,[R0,#0x0] ; r_next0
00000014 4288 CMP R0,R1
00000016 D051 BEQ L_6 ; T=0x000000BC
00000018 L_5:
00000018 1C28 MOV R0,R5 ; dwPort
0000001A 2801 CMP R0,#0x1 ; dwPort
0000001C D105 BNE L_3 ; T=0x0000002A
0000001E 4800 LDR R0,=r_first1 ; r_first1
00000020 6801 LDR R1,[R0,#0x0] ; r_first1
00000022 4800 LDR R0,=r_next1 ; r_next1
00000024 6800 LDR R0,[R0,#0x0] ; r_next1
00000026 4288 CMP R0,R1
00000028 D048 BEQ L_6 ; T=0x000000BC
105: return;
0000002A L_3:
108: dwEp = dwPort==0 ? 2 : 5;
0000002A 1C28 MOV R0,R5 ; dwPort
0000002C 2800 CMP R0,#0x0 ; dwPort
0000002E D101 BNE L_7 ; T=0x00000034
00000030 2002 MOV R0,#0x2
00000032 E000 B L_8 ; T=0x00000036
00000034 L_7:
00000034 2005 MOV R0,#0x5
00000036 L_8:
00000036 9010 STR R0,[R13,#0x40] ; dwEp
ARM COMPILER V2.53, uart 09/06/07 15:43:41 PAGE 8
109: next = dwPort==0 ? r_next0 : r_next1;
00000038 1C28 MOV R0,R5 ; dwPort
0000003A 2800 CMP R0,#0x0 ; dwPort
0000003C D102 BNE L_9 ; T=0x00000044
0000003E 4800 LDR R0,=r_next0 ; r_next0
00000040 6800 LDR R0,[R0,#0x0] ; r_next0
00000042 E001 B L_10 ; T=0x00000048
00000044 L_9:
00000044 4800 LDR R0,=r_next1 ; r_next1
00000046 6800 LDR R0,[R0,#0x0] ; r_next1
00000048 L_10:
00000048 9011 STR R0,[R13,#0x44] ; next
110: first = dwPort==0 ? r_first0 : r_first1;
0000004A 1C28 MOV R0,R5 ; dwPort
0000004C 2800 CMP R0,#0x0 ; dwPort
0000004E D103 BNE L_11 ; T=0x00000058
00000050 4800 LDR R0,=r_first0 ; r_first0
00000052 6800 LDR R0,[R0,#0x0] ; r_first0
00000054 1C04 MOV R4,R0
00000056 E001 B L_12 ; T=0x0000005C
00000058 L_11:
00000058 4800 LDR R0,=r_first1 ; r_first1
0000005A 6804 LDR R4,[R0,#0x0] ; r_first1
0000005C L_12:
111: pBuf = dwPort==0 ? RcvBuf0 : RcvBuf1;
0000005C 1C28 MOV R0,R5 ; dwPort
0000005E 2800 CMP R0,#0x0 ; dwPort
00000060 D101 BNE L_13 ; T=0x00000066
00000062 4800 LDR R1,=RcvBuf0 ; RcvBuf0
00000064 E000 B L_14 ; T=0x00000068
00000066 L_13:
00000066 4800 LDR R1,=RcvBuf1 ; RcvBuf1
00000068 L_14:
00000068 ---- Variable 'pBuf' assigned to Register 'R1' ----
112: dwCnt = USB_MAX_PACKET;
00000068 2040 MOV R0,#0x40
0000006A ---- Variable 'dwCnt' assigned to Register 'R0' ----
113: i=0;
0000006A 2300 MOV R3,#0x0
0000006C ---- Variable 'i' assigned to Register 'R3' ----
116: while(dwCnt--)
0000006C E011 B L_15 ; T=0x00000092
0000006E L_17:
118: if(next == first)
0000006E 1C26 MOV R6,R4 ; first
00000070 9A11 LDR R2,[R13,#0x44] ; next
00000072 42B2 CMP R2,R6 ; first
00000074 D011 BEQ L_16 ; T=0x0000009A
120: tmpbuf[i] = pBuf[first];
00000076 1C26 MOV R6,R4 ; first
00000078 1C0A MOV R2,R1 ; pBuf
0000007A 5D92 LDRB R2,[R2,R6]
0000007C 1C1F MOV R7,R3 ; i
0000007E AE00 ADD R6,R13,#0x0
00000080 55F2 STRB R2,[R6,R7]
121: if(++first >= RCV_BUF_LEN)
00000082 1C22 MOV R2,R4 ; first
00000084 3201 ADD R2,#0x1
00000086 1C14 MOV R4,R2 ; first
00000088 4800 LDR R6,=0x400
0000008A 42B2 CMP R2,R6
0000008C D300 BCC L_20 ; T=0x00000090
122: first = 0;
0000008E 2400 MOV R4,#0x0
00000090 L_20:
123: i++;
ARM COMPILER V2.53, uart 09/06/07 15:43:41 PAGE 9
00000090 3301 ADD R3,#0x1
124: }
00000092 L_15:
00000092 1C02 MOV R2,R0 ; dwCnt
00000094 3801 SUB R0,#0x1
00000096 2A00 CMP R2,#0x0 ; dwCnt
00000098 D1E9 BNE L_17 ; T=0x0000006E
0000009A L_16:
125: USB_WriteEP(dwEp | 0x80, tmpbuf, i);
0000009A 9810 LDR R0,[R13,#0x40] ; dwEp
0000009C 2180 MOV R1,#0x80
0000009E 4308 ORR R0,R1
000000A0 A900 ADD R1,R13,#0x0
000000A2 1C1A MOV R2,R3 ; i
000000A4 F7FF BL USB_WriteEP?T ; T=0x0001 (1)
000000A6 FFAC BL USB_WriteEP?T ; T=0x0001 (2)
127: if(dwPort == 0)
000000A8 1C28 MOV R0,R5 ; dwPort
000000AA 2800 CMP R0,#0x0 ; dwPort
000000AC D103 BNE L_21 ; T=0x000000B6
128: r_first0 = first;
000000AE 1C21 MOV R1,R4 ; first
000000B0 4800 LDR R0,=r_first0 ; r_first0
000000B2 6001 STR R1,[R0,#0x0] ; r_first0
000000B4 E002 B L_6 ; T=0x000000BC
000000B6 L_21:
130: r_first1 = first;
000000B6 1C21 MOV R1,R4 ; first
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -