📄 uart1.txt
字号:
0005b0 e3a00000 MOV r0,#0
0005b4 e51f1458 LDR r1,|L1.356|
0005b8 e5911000 LDR r1,[r1,#0] ; uart1RxStr
0005bc e5c10005 STRB r0,[r1,#5]
;;;195 // edited by junon
;;;196 rINTSUBMSK|=(BIT_SUB_DMA1);
0005c0 e51f0478 LDR r0,|L1.336|
0005c4 e590001c LDR r0,[r0,#0x1c]
0005c8 e3800640 ORR r0,r0,#0x4000000
0005cc e51f1484 LDR r1,|L1.336|
0005d0 e581001c STR r0,[r1,#0x1c]
;;;197 rSUBSRCPND=(BIT_SUB_DMA1);
0005d4 e3a00640 MOV r0,#0x4000000
0005d8 e1c11000 BIC r1,r1,r0
0005dc e5810018 STR r0,[r1,#0x18]
;;;198 rINTMSK|=(BIT_DMA);
0005e0 e1c10000 BIC r0,r1,r0
0005e4 e5900008 LDR r0,[r0,#8]
0005e8 e3800940 ORR r0,r0,#0x100000
0005ec e5810008 STR r0,[r1,#8]
;;;199 ClearPending(BIT_DMA);
0005f0 e3a00940 MOV r0,#0x100000
0005f4 e1c11000 BIC r1,r1,r0
0005f8 e5810000 STR r0,[r1,#0]
0005fc e1c10000 BIC r0,r1,r0
000600 e5900010 LDR r0,[r0,#0x10]
000604 e5810010 STR r0,[r1,#0x10]
000608 e1a00001 MOV r0,r1
00060c e5900010 LDR r0,[r0,#0x10]
;;;200 // end junon
;;;201 }
000610 e8bd0003 LDMFD sp!,{r0,r1}
000614 e25ef004 SUBS pc,lr,#4
ENDP
Uart1_RxDmaOrErr PROC
;;;203 void __irq Uart1_RxDmaOrErr(void)
;;;204 {
000618 e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;205 rINTSUBMSK|=(BIT_SUB_RXD1|BIT_SUB_TXD1|BIT_SUB_ERR1);
00061c e51f04d4 LDR r0,|L1.336|
000620 e590001c LDR r0,[r0,#0x1c]
000624 e3800038 ORR r0,r0,#0x38
000628 e51f14e0 LDR r1,|L1.336|
00062c e581001c STR r0,[r1,#0x1c]
;;;206 if(rSUBSRCPND&BIT_SUB_RXD1) Uart_Printf("Error : UART1 Rx Interrupt is occured!!!\n");
000630 e1a00001 MOV r0,r1
000634 e5900018 LDR r0,[r0,#0x18]
000638 e3100008 TST r0,#8
00063c 0a000002 BEQ |L1.1612|
000640 e28f0054 ADR r0,|L1.1692|
000644 ebfffffe BL _printf
000648 ea000000 B |L1.1616|
;;;207 else __sub_Uart1_RxErrInt();
|L1.1612|
00064c ebfffffe BL __sub_Uart1_RxErrInt
;;;208
;;;209 ClearPending(BIT_UART1);
|L1.1616|
000650 e3a00880 MOV r0,#0x800000
000654 e51f150c LDR r1,|L1.336|
000658 e5810000 STR r0,[r1,#0]
00065c e1c10000 BIC r0,r1,r0
000660 e5900010 LDR r0,[r0,#0x10]
000664 e5810010 STR r0,[r1,#0x10]
000668 e1a00001 MOV r0,r1
00066c e5900010 LDR r0,[r0,#0x10]
;;;210 rSUBSRCPND=(BIT_SUB_ERR1); // Clear Sub int pending
000670 e3a00020 MOV r0,#0x20
000674 e1c11000 BIC r1,r1,r0
000678 e5810018 STR r0,[r1,#0x18]
;;;211 rINTSUBMSK&=~(BIT_SUB_ERR1);
00067c e1c10000 BIC r0,r1,r0
000680 e590001c LDR r0,[r0,#0x1c]
000684 e3c00020 BIC r0,r0,#0x20
000688 e581001c STR r0,[r1,#0x1c]
;;;212 }
00068c e8bd500f LDMFD sp!,{r0-r3,r12,lr}
000690 e25ef004 SUBS pc,lr,#4
|L1.1684|
000694 40500000 DCD 0x40500000
|L1.1688|
000698 00000000 DCD isDone
|L1.1692|
00069c 6f727245 DCB "Erro"
0006a0 203a2072 DCB "r : "
0006a4 54524155 DCB "UART"
0006a8 78522031 DCB "1 Rx"
0006ac 746e4920 DCB " Int"
0006b0 75727265 DCB "erru"
0006b4 69207470 DCB "pt i"
0006b8 636f2073 DCB "s oc"
0006bc 65727563 DCB "cure"
0006c0 21212164 DCB "d!!!"
0006c4 0000000a DCB "\n\0\0\0"
ENDP
Test_Uart1_Dma PROC
;;;215 void Test_Uart1_Dma(void)
;;;216 {
0006c8 e92d4008 STMFD sp!,{r3,lr}
;;;217 Uart_Port_Set();
0006cc ebfffffe BL Uart_Port_Set
;;;218 Uart_Select(0);
0006d0 e3a00000 MOV r0,#0
0006d4 ebfffffe BL Uart_Select
;;;219 /*********** UART1 Tx test with DMA1 ***********/
;;;220 isDone=1;
0006d8 e3a00001 MOV r0,#1
0006dc e51f104c LDR r1,|L1.1688|
0006e0 e5810000 STR r0,[r1,#0] ; isDone
;;;221 uart1TxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890->UART1 Tx Test by DMA1 is good!!!!\r\n";
0006e4 e59f0234 LDR r0,|L1.2336|
0006e8 e51f159c LDR r1,|L1.340|
0006ec e5810000 STR r0,[r1,#0] ; uart1TxStr
;;;222 Uart_Printf("\n[Uart channel 1 DMA1 Tx Test]\n");
0006f0 e28f0f8b ADR r0,|L1.2340|
0006f4 ebfffffe BL _printf
;;;223 Uart_TxEmpty(0);
0006f8 e3a00000 MOV r0,#0
0006fc ebfffffe BL Uart_TxEmpty
;;;224
;;;225 //-------------------------------------------------------------------------------------------->
;;;226 Uart_Printf("\nConnect PC[COM1 or COM2] and UART1 of SMDK24A0 with a serial cable!!! \n");
000700 e51f026c LDR r0,|L1.1180|
000704 ebfffffe BL _printf
;;;227 Uart_Printf("Then, press any key........\n");
000708 e24f0f9c ADR r0,|L1.1184|
00070c ebfffffe BL _printf
;;;228 Uart_Select(1); // Change the uart port
000710 e3a00001 MOV r0,#1
000714 ebfffffe BL Uart_Select
;;;229 Uart_Getch();
000718 ebfffffe BL Uart_Getch
;;;230 //----------------------------------------->
;;;231
;;;232
;;;233 pISR_DMA=(unsigned)Uart1_TxDmaDone;
00071c e59f0220 LDR r0,|L1.2372|
000720 e51f1264 LDR r1,|L1.1220|
000724 e5810f70 STR r0,[r1,#0xf70]
;;;234
;;;235 rULCON1=(0<<6)|(0<<3)|(0<<2)|(3); // Normal,No parity,One stop bit, 8bit
000728 e3a00003 MOV r0,#3
00072c e51f15dc LDR r1,|L1.344|
000730 e5810000 STR r0,[r1,#0]
;;;236 rUCON1 &= 0x400; // For the PCLK <-> UCLK fuction
000734 e1c10000 BIC r0,r1,r0
000738 e5900004 LDR r0,[r0,#4]
00073c e2000e40 AND r0,r0,#0x400
000740 e5810004 STR r0,[r1,#4]
;;;237 rUCON1 |= (TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(3<<2)|(1);
000744 e1a00001 MOV r0,r1
000748 e5900004 LDR r0,[r0,#4]
00074c e380000d ORR r0,r0,#0xd
000750 e5810004 STR r0,[r1,#4]
;;;238 //Clock,Tx:Def,Rx:Def,Rx timeout:x,Rx error int:x,Loop-back:x,Send break:x,Tx:dma1,Rx:int
;;;239
;;;240 /***DMA1 init***/
;;;241 rDISRC1=(U32)uart1TxStr; // Start address
000754 e51f0608 LDR r0,|L1.340|
000758 e5900000 LDR r0,[r0,#0] ; uart1TxStr
00075c e51f10d0 LDR r1,|L1.1684|
000760 e5810000 STR r0,[r1,#0]
;;;242 rDISRCC1=(0<<1)|(0); // AHB,Increment
000764 e3a00000 MOV r0,#0
000768 e1c11000 BIC r1,r1,r0
00076c e5810004 STR r0,[r1,#4]
;;;243 rDIDST1=(U32)UTXH1; // Memory buffer Address
000770 e59f01d0 LDR r0,|L1.2376|
000774 e1c110c0 BIC r1,r1,r0,ASR #1
000778 e5810008 STR r0,[r1,#8]
;;;244 rDIDSTC1=(1<<1)|(1); // APB,Fixed
00077c e3a00003 MOV r0,#3
000780 e1c11000 BIC r1,r1,r0
000784 e581000c STR r0,[r1,#0xc]
;;;245 rDCON1=(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(1<<24)|(1<<23)|(1<<22)|(0<<20)|strlen((char*)uart1TxStr);
000788 e51f063c LDR r0,|L1.340|
00078c e5900000 LDR r0,[r0,#0] ; uart1TxStr
000790 ebfffffe BL strlen
000794 e3800480 ORR r0,r0,#0x80000000
000798 e3800587 ORR r0,r0,#0x21c00000
00079c e51f1110 LDR r1,|L1.1684|
0007a0 e5810010 STR r0,[r1,#0x10]
;;;246 //handshake, sync PCLK, TC int, single tx, single service, Uart1, H/W request,auto-reload off, Byte size Tx, Tx count value
;;;247 rINTMSK=~(BIT_DMA);
0007a4 e3e00940 MVN r0,#0x100000
0007a8 e24119c0 SUB r1,r1,#0x300000
0007ac e5810008 STR r0,[r1,#8]
;;;248 rINTSUBMSK=~(BIT_SUB_DMA1); // added by junon
0007b0 e3e00640 MVN r0,#0x4000000
0007b4 e0011000 AND r1,r1,r0
0007b8 e581001c STR r0,[r1,#0x1c]
;;;249 rDMASKTRIG1=(0<<2)|(1<<1)|(0); //no-stop, DMA1 channel on, no-SW trigger
0007bc e3a00002 MOV r0,#2
0007c0 e28119c0 ADD r1,r1,#0x300000
0007c4 e5810020 STR r0,[r1,#0x20]
;;;250
;;;251 while(isDone);
0007c8 e1a00000 NOP
|L1.1996|
0007cc e51f013c LDR r0,|L1.1688|
0007d0 e5900000 LDR r0,[r0,#0] ; isDone
0007d4 e3500000 CMP r0,#0
0007d8 1afffffb BNE |L1.1996|
;;;252
;;;253 /*********** UART1 Rx test with DMA1 ***********/
;;;254 isDone=1;
0007dc e3a00001 MOV r0,#1
0007e0 e51f1150 LDR r1,|L1.1688|
0007e4 e5810000 STR r0,[r1,#0] ; isDone
;;;255 uart1RxStr=(char *)UARTBUFFER;
0007e8 e3a00544 MOV r0,#0x11000000
0007ec e51f1690 LDR r1,|L1.356|
0007f0 e5810000 STR r0,[r1,#0] ; uart1RxStr
;;;256 Uart_Printf("\n[Uart channel 1 DMA1 Rx Test]\n");
0007f4 e28f0f54 ADR r0,|L1.2380|
0007f8 ebfffffe BL _printf
;;;257 Uart_Printf("Type any five keys!!!\n");
0007fc e28f0f5a ADR r0,|L1.2412|
000800 ebfffffe BL _printf
;;;258 Uart_Printf("Then you will see what you typed.\n");
000804 e28f0f5e ADR r0,|L1.2436|
000808 ebfffffe BL _printf
;;;259
;;;260 pISR_DMA=(unsigned)Uart1_RxDmaDone;
00080c e59f0194 LDR r0,|L1.2472|
000810 e51f1354 LDR r1,|L1.1220|
000814 e5810f70 STR r0,[r1,#0xf70]
;;;261 pISR_UART1=(unsigned)Uart1_RxDmaOrErr;
000818 e59f018c LDR r0,|L1.2476|
00081c e5810f7c STR r0,[r1,#0xf7c]
;;;262
;;;263 rULCON1=(0<<6)|(0<<3)|(0<<2)|(3); // Normal,No parity,One stop bit, 8bit
000820 e3a00003 MOV r0,#3
000824 e51f16d4 LDR r1,|L1.344|
000828 e5810000 STR r0,[r1,#0]
;;;264 rUCON1 &= 0x400; // For the PCLK <-> UCLK fuction
00082c e1c10000 BIC r0,r1,r0
000830 e5900004 LDR r0,[r0,#4]
000834 e2000e40 AND r0,r0,#0x400
000838 e5810004 STR r0,[r1,#4]
;;;265 rUCON1 |= (TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(1<<6)|(0<<5)|(0<<4)|(1<<2)|(3);
00083c e1a00001 MOV r0,r1
000840 e5900004 LDR r0,[r0,#4]
000844 e3800047 ORR r0,r0,#0x47
000848 e5810004 STR r0,[r1,#4]
;;;266 //Clock,Tx:Def,Rx:Def,Rx timeout:x,Rx error int:o,Loop-back:x,Send break:x,Tx:int,Rx:dma1
;;;267
;;;268 /***DMA1 init***/
;;;269 rDISRC1=(U32)URXH1; // Start address
00084c e2810024 ADD r0,r1,#0x24
000850 e51f11c4 LDR r1,|L1.1684|
000854 e5810000 STR r0,[r1,#0]
;;;270 rDISRCC1=(1<<1)|(1); // APB,Fixed
000858 e3a00003 MOV r0,#3
00085c e1c11000 BIC r1,r1,r0
000860 e5810004 STR r0,[r1,#4]
;;;271 rDIDST1=(U32)uart1RxStr; // Memory buffer Address
000864 e51f0708 LDR r0,|L1.356|
000868 e5900000 LDR r0,[r0,#0] ; uart1RxStr
00086c e5810008 STR r0,[r1,#8]
;;;272 rDIDSTC1= (0<<1)|(0); // AHB,Increment
000870 e3a00000 MOV r0,#0
000874 e1c11000 BIC r1,r1,r0
000878 e581000c STR r0,[r1,#0xc]
;;;273 rDCON1=(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(1<<24)|(1<<23)|(1<<22)|(0<<20)|(5);
00087c e59f012c LDR r0,|L1.2480|
000880 e0011140 AND r1,r1,r0,ASR #2
000884 e5810010 STR r0,[r1,#0x10]
;;;274 //handshake, sync PCLK, TC int, single tx, single service, Uart1, H/W request,auto-reload off, Byte size Tx, Tx count value
;;;275
;;;276 // edited by junon
;;;277 // Clear Int Pending and Unmask
;;;278 ClearPending(BIT_UART1);
000888 e3a00880 MOV r0,#0x800000
00088c e24119c0 SUB r1,r1,#0x300000
000890 e5810000 STR r0,[r1,#0]
000894 e1c10000 BIC r0,r1,r0
000898 e5900010 LDR r0,[r0,#0x10]
00089c e5810010 STR r0,[r1,#0x10]
0008a0 e1a00001 MOV r0,r1
0008a4 e5900010 LDR r0,[r0,#0x10]
;;;279 rINTMSK=~(BIT_DMA|BIT_UART1);
0008a8 e3e00890 MVN r0,#0x900000
0008ac e0011000 AND r1,r1,r0
0008b0 e5810008 STR r0,[r1,#8]
;;;280 rSUBSRCPND=(BIT_SUB_RXD1|BIT_SUB_TXD1|BIT_SUB_ERR1|BIT_SUB_DMA1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -