📄 uart0.txt
字号:
000c3c 3a5d7473 DCB "st]:"
000c40 0000000a DCB "\n\0\0\0"
|L1.3140|
000c44 00000164 DCD ||.constdata$1|| + 356
|L1.3144|
000c48 206f540a DCB "\nTo "
000c4c 74697571 DCB "quit"
000c50 7270202c DCB ", pr"
000c54 20737365 DCB "ess "
000c58 45544e45 DCB "ENTE"
000c5c 656b2052 DCB "R ke"
000c60 21212e79 DCB "y.!!"
000c64 00000a21 DCB "!\n\0\0"
|L1.3176|
000c68 00000000 DCD Uart0_RxIntOrErr
|L1.3180|
000c6c 000a7325 DCB "%s\n\0"
ENDP
Uart0_TxDmaDone PROC
;;;390 void __irq Uart0_TxDmaDone(void)
;;;391 {
000c70 e92d0003 STMFD sp!,{r0,r1}
;;;392 rDMASKTRIG0=0x0; // Stop Dma0
000c74 e3a00000 MOV r0,#0
000c78 e59f10e0 LDR r1,|L1.3424|
000c7c e5810020 STR r0,[r1,#0x20]
;;;393 isDone=0;
000c80 e3a00000 MOV r0,#0
000c84 e59f10d8 LDR r1,|L1.3428|
000c88 e5810000 STR r0,[r1,#0] ; isDone
;;;394 // edited by junon
;;;395 rINTSUBMSK|=(BIT_SUB_DMA0);
000c8c e51f04c4 LDR r0,|L1.2000|
000c90 e590001c LDR r0,[r0,#0x1c]
000c94 e3800780 ORR r0,r0,#0x2000000
000c98 e51f14d0 LDR r1,|L1.2000|
000c9c e581001c STR r0,[r1,#0x1c]
;;;396 rSUBSRCPND=(BIT_SUB_DMA0); // clear sub source pending bit
000ca0 e3a00780 MOV r0,#0x2000000
000ca4 e1c11000 BIC r1,r1,r0
000ca8 e5810018 STR r0,[r1,#0x18]
;;;397 rINTMSK |= BIT_DMA;
000cac e1c10000 BIC r0,r1,r0
000cb0 e5900008 LDR r0,[r0,#8]
000cb4 e3800940 ORR r0,r0,#0x100000
000cb8 e5810008 STR r0,[r1,#8]
;;;398 ClearPending(BIT_DMA);
000cbc e3a00940 MOV r0,#0x100000
000cc0 e1c11000 BIC r1,r1,r0
000cc4 e5810000 STR r0,[r1,#0]
000cc8 e1c10000 BIC r0,r1,r0
000ccc e5900010 LDR r0,[r0,#0x10]
000cd0 e5810010 STR r0,[r1,#0x10]
000cd4 e1a00001 MOV r0,r1
000cd8 e5900010 LDR r0,[r0,#0x10]
;;;399 // end junon
;;;400 }
000cdc e8bd0003 LDMFD sp!,{r0,r1}
000ce0 e25ef004 SUBS pc,lr,#4
ENDP
Uart0_RxDmaOrErr PROC
;;;402 void __irq Uart0_RxDmaOrErr(void)
;;;403 {
000ce4 e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;404 rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_TXD0|BIT_SUB_ERR0);
000ce8 e51f0520 LDR r0,|L1.2000|
000cec e590001c LDR r0,[r0,#0x1c]
000cf0 e3800007 ORR r0,r0,#7
000cf4 e51f152c LDR r1,|L1.2000|
000cf8 e581001c STR r0,[r1,#0x1c]
;;;405 if(rSUBSRCPND&BIT_SUB_ERR0) Uart_Printf("Error : UART0 Rx Interrupt is occured!!!\n");
000cfc e1a00001 MOV r0,r1
000d00 e5900018 LDR r0,[r0,#0x18]
000d04 e3100004 TST r0,#4
000d08 0a000002 BEQ |L1.3352|
000d0c e28f0054 ADR r0,|L1.3432|
000d10 ebfffffe BL _printf
000d14 ea000000 B |L1.3356|
;;;406 else __sub_Uart0_RxErrInt();
|L1.3352|
000d18 ebfffffe BL __sub_Uart0_RxErrInt
;;;407
;;;408 ClearPending(BIT_UART0);
|L1.3356|
000d1c e3a00b80 MOV r0,#0x20000
000d20 e51f1558 LDR r1,|L1.2000|
000d24 e5810000 STR r0,[r1,#0]
000d28 e1c10000 BIC r0,r1,r0
000d2c e5900010 LDR r0,[r0,#0x10]
000d30 e5810010 STR r0,[r1,#0x10]
000d34 e1a00001 MOV r0,r1
000d38 e5900010 LDR r0,[r0,#0x10]
;;;409 rSUBSRCPND=(BIT_SUB_ERR0); // Clear Sub int pending
000d3c e3a00004 MOV r0,#4
000d40 e1c11000 BIC r1,r1,r0
000d44 e5810018 STR r0,[r1,#0x18]
;;;410 rINTSUBMSK&=~(BIT_SUB_ERR0);
000d48 e1c10000 BIC r0,r1,r0
000d4c e590001c LDR r0,[r0,#0x1c]
000d50 e3c00004 BIC r0,r0,#4
000d54 e581001c STR r0,[r1,#0x1c]
;;;411 }
000d58 e8bd500f LDMFD sp!,{r0-r3,r12,lr}
000d5c e25ef004 SUBS pc,lr,#4
|L1.3424|
000d60 40400000 DCD 0x40400000
|L1.3428|
000d64 00000014 DCD ||.bss$2|| + 20
|L1.3432|
000d68 6f727245 DCB "Erro"
000d6c 203a2072 DCB "r : "
000d70 54524155 DCB "UART"
000d74 78522030 DCB "0 Rx"
000d78 746e4920 DCB " Int"
000d7c 75727265 DCB "erru"
000d80 69207470 DCB "pt i"
000d84 636f2073 DCB "s oc"
000d88 65727563 DCB "cure"
000d8c 21212164 DCB "d!!!"
000d90 0000000a DCB "\n\0\0\0"
ENDP
Uart0_RxDmaDone PROC
;;;413 void __irq Uart0_RxDmaDone(void)
;;;414 {
000d94 e92d0003 STMFD sp!,{r0,r1}
;;;415 rDMASKTRIG0=0x0; //DMA0 Channel Off
000d98 e3a00000 MOV r0,#0
000d9c e51f1044 LDR r1,|L1.3424|
000da0 e5810020 STR r0,[r1,#0x20]
;;;416 isDone=0;
000da4 e3a00000 MOV r0,#0
000da8 e51f104c LDR r1,|L1.3428|
000dac e5810000 STR r0,[r1,#0] ; isDone
;;;417 *(uart0RxStr+5)='\0';
000db0 e3a00000 MOV r0,#0
000db4 e51f14e8 LDR r1,|L1.2260|
000db8 e5911000 LDR r1,[r1,#0] ; uart0RxStr
000dbc e5c10005 STRB r0,[r1,#5]
;;;418 // edited by junon
;;;419 rINTSUBMSK|=(BIT_SUB_DMA0);
000dc0 e51f05f8 LDR r0,|L1.2000|
000dc4 e590001c LDR r0,[r0,#0x1c]
000dc8 e3800780 ORR r0,r0,#0x2000000
000dcc e51f1604 LDR r1,|L1.2000|
000dd0 e581001c STR r0,[r1,#0x1c]
;;;420 rSUBSRCPND=(BIT_SUB_DMA0);
000dd4 e3a00780 MOV r0,#0x2000000
000dd8 e1c11000 BIC r1,r1,r0
000ddc e5810018 STR r0,[r1,#0x18]
;;;421 rINTMSK|=(BIT_DMA);
000de0 e1c10000 BIC r0,r1,r0
000de4 e5900008 LDR r0,[r0,#8]
000de8 e3800940 ORR r0,r0,#0x100000
000dec e5810008 STR r0,[r1,#8]
;;;422 ClearPending(BIT_DMA);
000df0 e3a00940 MOV r0,#0x100000
000df4 e1c11000 BIC r1,r1,r0
000df8 e5810000 STR r0,[r1,#0]
000dfc e1c10000 BIC r0,r1,r0
000e00 e5900010 LDR r0,[r0,#0x10]
000e04 e5810010 STR r0,[r1,#0x10]
000e08 e1a00001 MOV r0,r1
000e0c e5900010 LDR r0,[r0,#0x10]
;;;423 // end junon
;;;424 }
000e10 e8bd0003 LDMFD sp!,{r0,r1}
000e14 e25ef004 SUBS pc,lr,#4
ENDP
Test_Uart0_Dma PROC
;;;426 void Test_Uart0_Dma(void)
;;;427 {
000e18 e92d4008 STMFD sp!,{r3,lr}
;;;428 Uart_Port_Set();
000e1c ebfffffe BL Uart_Port_Set
;;;429 Uart_Select(0);
000e20 e3a00000 MOV r0,#0
000e24 ebfffffe BL Uart_Select
;;;430 /*********** UART0 Tx test with DMA0 ***********/
;;;431 isDone=1;
000e28 e3a00001 MOV r0,#1
000e2c e51f10d0 LDR r1,|L1.3428|
000e30 e5810000 STR r0,[r1,#0] ; isDone
;;;432 uart0TxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890->UART0 Tx Test by DMA0 is good!!!!\r\n";
000e34 e59f01fc LDR r0,|L1.4152|
000e38 e51f166c LDR r1,|L1.2004|
000e3c e5810000 STR r0,[r1,#0] ; uart0TxStr
;;;433 Uart_Printf("\n[Uart channel 0 DMA0 Tx Test]\n");
000e40 e28f0f7d ADR r0,|L1.4156|
000e44 ebfffffe BL _printf
;;;434 Uart_TxEmpty(0);
000e48 e3a00000 MOV r0,#0
000e4c ebfffffe BL Uart_TxEmpty
;;;435
;;;436 pISR_DMA=(unsigned)Uart0_TxDmaDone;
000e50 e59f0204 LDR r0,|L1.4188|
000e54 e51f1244 LDR r1,|L1.3096|
000e58 e5810f70 STR r0,[r1,#0xf70]
;;;437
;;;438 rULCON0=(0<<6)|(0<<3)|(0<<2)|(3); // Normal,No parity,One stop bit, 8bit
000e5c e3a00003 MOV r0,#3
000e60 e51f19e4 LDR r1,|L1.1156|
000e64 e5810000 STR r0,[r1,#0]
;;;439 rUCON0 &= 0x400; // For the PCLK <-> UCLK fuction
000e68 e1c10000 BIC r0,r1,r0
000e6c e5900004 LDR r0,[r0,#4]
000e70 e2000e40 AND r0,r0,#0x400
000e74 e5810004 STR r0,[r1,#4]
;;;440 rUCON0 |= (TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(2<<2)|(0);
000e78 e1a00001 MOV r0,r1
000e7c e5900004 LDR r0,[r0,#4]
000e80 e3800008 ORR r0,r0,#8
000e84 e5810004 STR r0,[r1,#4]
;;;441 //Clock,Tx:Def,Rx:Def,Rx timeout:x,Rx error int:x,Loop-back:x,Send break:x,Tx:dma0,Rx:x
;;;442
;;;443 /***DMA0 init***/
;;;444 rDISRC0=(U32)uart0TxStr; // Start address
000e88 e51f06bc LDR r0,|L1.2004|
000e8c e5900000 LDR r0,[r0,#0] ; uart0TxStr
000e90 e28114fc ADD r1,r1,#0xfc000000
000e94 e5810000 STR r0,[r1,#0]
;;;445 rDISRCC0=(0<<1)|(0); // AHB,Increment
000e98 e3a00000 MOV r0,#0
000e9c e1c11000 BIC r1,r1,r0
000ea0 e5810004 STR r0,[r1,#4]
;;;446 rDIDST0=(U32)UTXH0; // Memory buffer Address
000ea4 e59f01b4 LDR r0,|L1.4192|
000ea8 e0011000 AND r1,r1,r0
000eac e5810008 STR r0,[r1,#8]
;;;447 rDIDSTC0=(1<<1)|(1); // APB,Fixed
000eb0 e3a00003 MOV r0,#3
000eb4 e1c11000 BIC r1,r1,r0
000eb8 e581000c STR r0,[r1,#0xc]
;;;448 rDCON0=(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(1<<24)|(1<<23)|(1<<22)|(0<<20)|strlen((char*)uart0TxStr);
000ebc e51f06f0 LDR r0,|L1.2004|
000ec0 e5900000 LDR r0,[r0,#0] ; uart0TxStr
000ec4 ebfffffe BL strlen
000ec8 e3800480 ORR r0,r0,#0x80000000
000ecc e3800587 ORR r0,r0,#0x21c00000
000ed0 e51f1178 LDR r1,|L1.3424|
000ed4 e5810010 STR r0,[r1,#0x10]
;;;449 //handshake, sync PCLK, TC int, single tx, single service, Uart0, H/W request,auto-reload off, Byte size Tx, Tx count value
;;;450 rINTMSK=~(BIT_DMA);
000ed8 e3e00940 MVN r0,#0x100000
000edc e0811a80 ADD r1,r1,r0,LSL #21
000ee0 e5810008 STR r0,[r1,#8]
;;;451 rINTSUBMSK=~(BIT_SUB_DMA0); // added by junon
000ee4 e3e00780 MVN r0,#0x2000000
000ee8 e0011000 AND r1,r1,r0
000eec e581001c STR r0,[r1,#0x1c]
;;;452 rDMASKTRIG0=(0<<2)|(1<<1)|(0); //no-stop, DMA0 channel on, no-SW trigger
000ef0 e3a00002 MOV r0,#2
000ef4 e0811a00 ADD r1,r1,r0,LSL #20
000ef8 e5810020 STR r0,[r1,#0x20]
;;;453
;;;454 while(isDone);
000efc e1a00000 NOP
|L1.3840|
000f00 e51f01a4 LDR r0,|L1.3428|
000f04 e5900000 LDR r0,[r0,#0] ; isDone
000f08 e3500000 CMP r0,#0
000f0c 1afffffb BNE |L1.3840|
;;;455
;;;456 /*********** UART0 Rx test with DMA0 ***********/
;;;457 isDone=1;
000f10 e3a00001 MOV r0,#1
000f14 e51f11b8 LDR r1,|L1.3428|
000f18 e5810000 STR r0,[r1,#0] ; isDone
;;;458 uart0RxStr=(char *)UARTBUFFER;
000f1c e3a00544 MOV r0,#0x11000000
000f20 e51f1654 LDR r1,|L1.2260|
000f24 e5810000 STR r0,[r1,#0] ; uart0RxStr
;;;459 Uart_Printf("\n[Uart channel 0 DMA0 Rx Test]\n");
000f28 e28f0f4d ADR r0,|L1.4196|
000f2c ebfffffe BL _printf
;;;460 Uart_Printf("Type any five keys!!!\n");
000f30 e28f0f53 ADR r0,|L1.4228|
000f34 ebfffffe BL _printf
;;;461 Uart_Printf("Then you will see what you typed.\n");
000f38 e28f0f57 ADR r0,|L1.4252|
000f3c ebfffffe BL _printf
;;;462
;;;463 pISR_DMA=(unsigned)Uart0_RxDmaDone;
000f40 e59f0178 LDR r0,|L1.4288|
000f44 e51f1334 LDR r1,|L1.3096|
000f48 e5810f70 STR r0,[r1,#0xf70]
;;;464 pISR_UART0=(unsigned)Uart0_RxDmaOrErr;
000f4c e59f0170 LDR r0,|L1.4292|
000f50 e5810f64 STR r0,[r1,#0xf64]
;;;465
;;;466 rULCON0=(0<<6)|(0<<3)|(0<<2)|(3); // Normal,No parity,One stop bit, 8bit
000f54 e3a00003 MOV r0,#3
000f58 e51f1adc LDR r1,|L1.1156|
000f5c e5810000 STR r0,[r1,#0]
;;;467 rUCON0 &= 0x400; // For the PCLK <-> UCLK fuction
000f60 e1c10000 BIC r0,r1,r0
000f64 e5900004 LDR r0,[r0,#4]
000f68 e2000e40 AND r0,r0,#0x400
000f6c e5810004 STR r0,[r1,#4]
;;;468
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -