📄 irda.txt
字号:
000390 e59f00f4 LDR r0,|L1.1164|
000394 e5900000 LDR r0,[r0,#0] ; IrDA_cnt
000398 e2800001 ADD r0,r0,#1
00039c e59f10e8 LDR r1,|L1.1164|
0003a0 e5810000 STR r0,[r1,#0] ; IrDA_cnt
;;;121 ClearPending(BIT_UART2);
0003a4 e3a00c80 MOV r0,#0x8000
0003a8 e3a0144a MOV r1,#0x4a000000
0003ac e5810000 STR r0,[r1,#0]
0003b0 e3a00c80 MOV r0,#0x8000
0003b4 e3a0144a MOV r1,#0x4a000000
0003b8 e5810010 STR r0,[r1,#0x10]
0003bc e3a0044a MOV r0,#0x4a000000
0003c0 e5900010 LDR r0,[r0,#0x10]
;;;122 rSUBSRCPND=(BIT_SUB_TXD2);
0003c4 e3a00080 MOV r0,#0x80
0003c8 e3a0144a MOV r1,#0x4a000000
0003cc e5810018 STR r0,[r1,#0x18]
;;;123 rINTSUBMSK&=~(BIT_SUB_TXD2);
0003d0 e3a0044a MOV r0,#0x4a000000
0003d4 e590001c LDR r0,[r0,#0x1c]
0003d8 e3c00080 BIC r0,r0,#0x80
0003dc e3a0144a MOV r1,#0x4a000000
0003e0 e581001c STR r0,[r1,#0x1c]
0003e4 ea000019 B |L1.1104|
;;;124 }
;;;125 else
;;;126 {
;;;127 IrDA_end=1;
|L1.1000|
0003e8 e3a00001 MOV r0,#1
0003ec e59f10a4 LDR r1,|L1.1176|
0003f0 e5810000 STR r0,[r1,#0] ; IrDA_end
;;;128 while(rUFSTAT2 & 0x2f0); //Until FIFO is empty
0003f4 e1a00000 NOP
|L1.1016|
0003f8 e59f0074 LDR r0,|L1.1140|
0003fc e5900018 LDR r0,[r0,#0x18]
000400 e3100fbc TST r0,#0x2f0
000404 1afffffb BNE |L1.1016|
;;;129 while(!(rUTRSTAT2 & 0x4)); //Until Tx shifter is empty
000408 e1a00000 NOP
|L1.1036|
00040c e59f0060 LDR r0,|L1.1140|
000410 e5900010 LDR r0,[r0,#0x10]
000414 e3100004 TST r0,#4
000418 0afffffb BEQ |L1.1036|
;;;130 ClearPending(BIT_UART2);
00041c e3a00c80 MOV r0,#0x8000
000420 e3a0144a MOV r1,#0x4a000000
000424 e5810000 STR r0,[r1,#0]
000428 e3a00c80 MOV r0,#0x8000
00042c e3a0144a MOV r1,#0x4a000000
000430 e5810010 STR r0,[r1,#0x10]
000434 e3a0044a MOV r0,#0x4a000000
000438 e5900010 LDR r0,[r0,#0x10]
;;;131 rINTMSK|=BIT_UART2;
00043c e3a0044a MOV r0,#0x4a000000
000440 e5900008 LDR r0,[r0,#8]
000444 e3800c80 ORR r0,r0,#0x8000
000448 e3a0144a MOV r1,#0x4a000000
00044c e5810008 STR r0,[r1,#8]
;;;132 }
;;;133 }
|L1.1104|
000450 e8bd500f LDMFD sp!,{r0-r3,r12,lr}
000454 e25ef004 SUBS pc,lr,#4
|L1.1112|
000458 00000018 DCD ||.bss$2|| + 24
|L1.1116|
00045c 0000001c DCD ||.bss$2|| + 28
|L1.1120|
000460 00000020 DCD ||.bss$2|| + 32
|L1.1124|
000464 00000024 DCD ||.bss$2|| + 36
|L1.1128|
000468 00000028 DCD ||.bss$2|| + 40
|L1.1132|
00046c 0000002c DCD ||.bss$2|| + 44
|L1.1136|
000470 003c0fff DCD 0x003c0fff
|L1.1140|
000474 50008000 DCD 0x50008000
|L1.1144|
000478 00000030 DCD ||.bss$2|| + 48
|L1.1148|
00047c 00000034 DCD ||.bss$2|| + 52
|L1.1152|
000480 00000038 DCD ||.bss$2|| + 56
|L1.1156|
000484 0000003c DCD ||.bss$2|| + 60
|L1.1160|
000488 00000040 DCD ||.bss$2|| + 64
|L1.1164|
00048c 00000008 DCD ||.bss$2|| + 8
|L1.1168|
000490 00000000 DCD ||.bss$2||
|L1.1172|
000494 002c6425 DCB "%d,\0"
|L1.1176|
000498 0000000c DCD ||.bss$2|| + 12
ENDP
__sub_IrDA_RxErrInt PROC
;;;160 void __sub_IrDA_RxErrInt(void)
;;;161 {
00049c e92d4008 STMFD sp!,{r3,lr}
;;;162 switch(rUERSTAT2)//to clear and check the status of register bits
0004a0 e51f0034 LDR r0,|L1.1140|
0004a4 e5900014 LDR r0,[r0,#0x14]
0004a8 e3500031 CMP r0,#0x31
0004ac 0a000006 BEQ |L1.1228|
0004b0 e3500032 CMP r0,#0x32
0004b4 0a000007 BEQ |L1.1240|
0004b8 e3500034 CMP r0,#0x34
0004bc 0a000008 BEQ |L1.1252|
0004c0 e3500038 CMP r0,#0x38
0004c4 1a00000c BNE |L1.1276|
0004c8 ea000008 B |L1.1264|
;;;163 {
;;;164 case '1':
;;;165 Uart_Printf("Overrun error\n");
|L1.1228|
0004cc e28f0030 ADR r0,|L1.1284|
0004d0 ebfffffe BL Uart_Printf
;;;166 break;
0004d4 ea000009 B |L1.1280|
;;;167 case '2':
;;;168 Uart_Printf("Parity error\n");
|L1.1240|
0004d8 e28f0034 ADR r0,|L1.1300|
0004dc ebfffffe BL Uart_Printf
;;;169 break;
0004e0 ea000006 B |L1.1280|
;;;170 case '4':
;;;171 Uart_Printf("Frame error\n");
|L1.1252|
0004e4 e28f0038 ADR r0,|L1.1316|
0004e8 ebfffffe BL Uart_Printf
;;;172 break;
0004ec ea000003 B |L1.1280|
;;;173 case '8':
;;;174 Uart_Printf("Breake detect\n");
|L1.1264|
0004f0 e28f003c ADR r0,|L1.1332|
0004f4 ebfffffe BL Uart_Printf
;;;175 break;
0004f8 ea000000 B |L1.1280|
;;;176 default :
;;;177 break;
|L1.1276|
0004fc e1a00000 NOP
;;;178 }
;;;179 }
|L1.1280|
000500 e8bd8008 LDMFD sp!,{r3,pc}
|L1.1284|
000504 7265764f DCB "Over"
000508 206e7572 DCB "run "
00050c 6f727265 DCB "erro"
000510 00000a72 DCB "r\n\0\0"
|L1.1300|
000514 69726150 DCB "Pari"
000518 65207974 DCB "ty e"
00051c 726f7272 DCB "rror"
000520 0000000a DCB "\n\0\0\0"
|L1.1316|
000524 6d617246 DCB "Fram"
000528 72652065 DCB "e er"
00052c 0a726f72 DCB "ror\n"
000530 00000000 DCB "\0\0\0\0"
|L1.1332|
000534 61657242 DCB "Brea"
000538 6420656b DCB "ke d"
00053c 63657465 DCB "etec"
000540 00000a74 DCB "t\n\0\0"
ENDP
__sub_IrDA_RxInt PROC
;;;145 void __sub_IrDA_RxInt(void)
;;;146 {
000544 e1a00000 NOP
;;;147 while( (rUFSTAT2 & 0x100) || (rUFSTAT2 & 0xf) )
|L1.1352|
000548 e51f00dc LDR r0,|L1.1140|
00054c e5900018 LDR r0,[r0,#0x18]
000550 e3100f40 TST r0,#0x100
000554 1a000003 BNE |L1.1384|
000558 e51f00ec LDR r0,|L1.1140|
00055c e5900018 LDR r0,[r0,#0x18]
000560 e310000f TST r0,#0xf
000564 0a000010 BEQ |L1.1452|
;;;148 {
;;;149 *IrDAdataPt=rURXH2;
|L1.1384|
000568 e51f00fc LDR r0,|L1.1140|
00056c e5d00024 LDRB r0,[r0,#0x24]
000570 e51f10e8 LDR r1,|L1.1168|
000574 e5911000 LDR r1,[r1,#0] ; IrDAdataPt
000578 e5c10000 STRB r0,[r1,#0]
;;;150 *IrDAdataPt++;
00057c e51f00f4 LDR r0,|L1.1168|
000580 e5900000 LDR r0,[r0,#0] ; IrDAdataPt
000584 e5d01000 LDRB r1,[r0,#0]
000588 e2800001 ADD r0,r0,#1
00058c e51f1104 LDR r1,|L1.1168|
000590 e5810000 STR r0,[r1,#0] ; IrDAdataPt
;;;151 IrDA_cnt++;
000594 e51f0110 LDR r0,|L1.1164|
000598 e5900000 LDR r0,[r0,#0] ; IrDA_cnt
00059c e2800001 ADD r0,r0,#1
0005a0 e51f111c LDR r1,|L1.1164|
0005a4 e5810000 STR r0,[r1,#0] ; IrDA_cnt
;;;152 }
0005a8 eaffffe6 B |L1.1352|
;;;153 if(IrDA_cnt >= IrDA_BUFLEN)
|L1.1452|
0005ac e51f0128 LDR r0,|L1.1164|
0005b0 e5900000 LDR r0,[r0,#0] ; IrDA_cnt
0005b4 e3500f40 CMP r0,#0x100
0005b8 3a000007 BCC |L1.1500|
;;;154 {
;;;155 IrDA_end=1;
0005bc e3a00001 MOV r0,#1
0005c0 e51f1130 LDR r1,|L1.1176|
0005c4 e5810000 STR r0,[r1,#0] ; IrDA_end
;;;156 rINTMSK|=BIT_UART2;
0005c8 e3a0044a MOV r0,#0x4a000000
0005cc e5900008 LDR r0,[r0,#8]
0005d0 e3800c80 ORR r0,r0,#0x8000
0005d4 e3a0144a MOV r1,#0x4a000000
0005d8 e5810008 STR r0,[r1,#8]
;;;157 }
;;;158 }
|L1.1500|
0005dc e1a0f00e MOV pc,lr
ENDP
IrDA_RxOrErr PROC
;;;135 void __irq IrDA_RxOrErr(void)
;;;136 {
0005e0 e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;137 rINTSUBMSK|=(BIT_SUB_RXD2|BIT_SUB_TXD2|BIT_SUB_ERR2); // Just for the safety
0005e4 e3a0044a MOV r0,#0x4a000000
0005e8 e590001c LDR r0,[r0,#0x1c]
0005ec e3800f70 ORR r0,r0,#0x1c0
0005f0 e3a0144a MOV r1,#0x4a000000
0005f4 e581001c STR r0,[r1,#0x1c]
;;;138 if(rSUBSRCPND&BIT_SUB_RXD2) __sub_IrDA_RxInt();
0005f8 e3a0044a MOV r0,#0x4a000000
0005fc e5900018 LDR r0,[r0,#0x18]
000600 e3100040 TST r0,#0x40
000604 0a000001 BEQ |L1.1552|
000608 ebfffffe BL __sub_IrDA_RxInt
00060c ea000000 B |L1.1556|
;;;139 else __sub_IrDA_RxErrInt();
|L1.1552|
000610 ebfffffe BL __sub_IrDA_RxErrInt
;;;140 rSUBSRCPND=(BIT_SUB_RXD2|BIT_SUB_TXD2|BIT_SUB_ERR2);
|L1.1556|
000614 e3a00f70 MOV r0,#0x1c0
000618 e3a0144a MOV r1,#0x4a000000
00061c e5810018 STR r0,[r1,#0x18]
;;;141 rINTSUBMSK&=~(BIT_SUB_RXD2|BIT_SUB_ERR2);
000620 e3a0044a MOV r0,#0x4a000000
000624 e590001c LDR r0,[r0,#0x1c]
000628 e3c00f50 BIC r0,r0,#0x140
00062c e3a0144a MOV r1,#0x4a000000
000630 e581001c STR r0,[r1,#0x1c]
;;;142 ClearPending(BIT_UART2);
000634 e3a00c80 MOV r0,#0x8000
000638 e3a0144a MOV r1,#0x4a000000
00063c e5810000 STR r0,[r1,#0]
000640 e3a00c80 MOV r0,#0x8000
000644 e3a0144a MOV r1,#0x4a000000
000648 e5810010 STR r0,[r1,#0x10]
00064c e3a0044a MOV r0,#0x4a000000
000650 e5900010 LDR r0,[r0,#0x10]
;;;143 }
000654 e8bd500f LDMFD sp!,{r0-r3,r12,lr}
000658 e25ef004 SUBS pc,lr,#4
ENDP
Test_IrDA_Tx PROC
;;;181 void Test_IrDA_Tx(void)
;;;182 {
00065c e92d401f STMFD sp!,{r0-r4,lr}
;;;183 int i;
;;;184 IrDA_cnt=0;
000660 e3a00000 MOV r0,#0
000664 e51f11e0 LDR r1,|L1.1164|
000668 e5810000 STR r0,[r1,#0] ; IrDA_cnt
;;;185 IrDA_end=0;
00066c e3a00000 MOV r0,#0
000670 e51f11e0 LDR r1,|L1.1176|
000674 e5810000 STR r0,[r1,#0] ; IrDA_end
;;;186 IrDAdataFl=(volatile U8 *)IrDABUFFER;
000678 e3a005c4 MOV r0,#0x31000000
00067c e59f1224 LDR r1,|L1.2216|
000680 e5810000 STR r0,[r1,#0] ; IrDAdataFl
;;;187 IrDAdataPt=(volatile U8 *)IrDABUFFER;
000684 e3a005c4 MOV r0,#0x31000000
000688 e51f1200 LDR r1,|L1.1168|
00068c e5810000 STR r0,[r1,#0] ; IrDAdataPt
;;;188 IrDA_Port_Set();
000690 ebfffffe BL IrDA_Port_Set
;;;189 Uart_Select(1);
000694 e3a00001 MOV r0,#1
000698 ebfffffe BL Uart_Select
;;;190 for(i=0;i<IrDA_BUFLEN;i++) *IrDAdataFl++=i; // Initialize IrDA Tx data
00069c e3a04000 MOV r4,#0
|L1.1696|
0006a0 e3540f40 CMP r4,#0x100
0006a4 aa000009 BGE |L1.1744|
0006a8 ea000001 B |L1.1716|
|L1.1708|
0006ac e2844001 ADD r4,r4,#1
0006b0 eafffffa B |L1.1696|
|L1.1716|
0006b4 e59f01ec LDR r0,|L1.2216|
0006b8 e5900000 LDR r0,[r0,#0] ; IrDAdataFl
0006bc e5c04000 STRB r4,[r0,#0]
0006c0 e2800001 ADD r0,r0,#1
0006c4 e59f11dc LDR r1,|L1.2216|
0006c8 e5810000 STR r0,[r1,#0] ; IrDAdataFl
0006cc eafffff6 B |L1.1708|
;;;191 pISR_UART2=(U32)IrDA_TxInt;
|L1.1744|
0006d0 e59f01d4 LDR r0,|L1.2220|
0006d4 e59f11d4 LDR r1,|L1.2224|
0006d8 e5810f5c STR r0,[r1,#0xf5c]
;;;192 Uart_Printf("\nSelect the baud rate\n"); // Select IrDA baud rate
0006dc e28f0f74 ADR r0,|L1.2228|
0006e0 ebfffffe BL Uart_Printf
;;;193 Uart_Printf("1)9600 2)19200 3)38400 4)57600 5)115200\n");
0006e4 e28f0f78 ADR r0,|L1.2252|
0006e8 ebfffffe BL Uart_Printf
;;;194 i=Uart_Getch ();
0006ec ebfffffe BL Uart_Getch
0006f0 e1a04000 MOV r4,r0
;;;195 switch(i)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -