📄 irda.txt
字号:
0002ac e3140040 TST r4,#0x40
0002b0 0a000001 BEQ |L1.700|
;;;276 __sub_Irda_Err_Int_Rx();
0002b4 ebfffffe BL __sub_Irda_Err_Int_Rx
0002b8 ea000044 B |L1.976|
;;;277 } else {
;;;278 if(status & 0x01) {
|L1.700|
0002bc e3140001 TST r4,#1
0002c0 0a000019 BEQ |L1.812|
;;;279 // Uart_Printf(".");
;;;280 while(rIrDA_RXNO > 0) {
0002c4 e1a00000 NOP
|L1.712|
0002c8 e51f012c LDR r0,|L1.420|
0002cc e5900028 LDR r0,[r0,#0x28]
0002d0 e3500000 CMP r0,#0
0002d4 0a00003d BEQ |L1.976|
;;;281 *(IrDA_RXBUFFER+IrDA_RxWrPnt) = (U8)rIrDA_RBR;
0002d8 e51f013c LDR r0,|L1.420|
0002dc e5900020 LDR r0,[r0,#0x20]
0002e0 e59f1118 LDR r1,|L1.1024|
0002e4 e5911000 LDR r1,[r1,#0] ; IrDA_RXBUFFER
0002e8 e59f2114 LDR r2,|L1.1028|
0002ec e5922000 LDR r2,[r2,#0] ; IrDA_RxWrPnt
0002f0 e7c10002 STRB r0,[r1,r2]
;;;282 IrDA_RxWrPnt++;
0002f4 e59f0108 LDR r0,|L1.1028|
0002f8 e5900000 LDR r0,[r0,#0] ; IrDA_RxWrPnt
0002fc e2800001 ADD r0,r0,#1
000300 e59f10fc LDR r1,|L1.1028|
000304 e5810000 STR r0,[r1,#0] ; IrDA_RxWrPnt
;;;283 IrDA_RxCount++;
000308 e59f00f8 LDR r0,|L1.1032|
00030c e5900000 LDR r0,[r0,#0] ; IrDA_RxCount
000310 e2800001 ADD r0,r0,#1
000314 e59f10ec LDR r1,|L1.1032|
000318 e5810000 STR r0,[r1,#0] ; IrDA_RxCount
;;;284 IrDA_DONE = 0;
00031c e3a00000 MOV r0,#0
000320 e59f10e4 LDR r1,|L1.1036|
000324 e5810000 STR r0,[r1,#0] ; IrDA_DONE
;;;285 }
000328 eaffffe6 B |L1.712|
;;;286 } else {
;;;287 if(status & 0x08) { // RX Overrun
|L1.812|
00032c e3140008 TST r4,#8
000330 0a000001 BEQ |L1.828|
;;;288 Uart_Printf("IrDA Rx Overrun Error Occurs!!\n");
000334 e28f00d4 ADR r0,|L1.1040|
000338 ebfffffe BL _printf
;;;289 }
;;;290 if((status & 0x80) || (status & 0x10)){
|L1.828|
00033c e3140090 TST r4,#0x90
000340 0a00001e BEQ |L1.960|
;;;291 Uart_Printf("\nLast byte to Rx FIFO !!!!!!!!!\n");
000344 e28f00e4 ADR r0,|L1.1072|
000348 ebfffffe BL _printf
;;;292 RxCount = rIrDA_RXNO;
00034c e51f01b0 LDR r0,|L1.420|
000350 e5900028 LDR r0,[r0,#0x28]
000354 e20050ff AND r5,r0,#0xff
;;;293 while(rIrDA_RXNO > 0) {
000358 e1a00000 NOP
|L1.860|
00035c e51f01c0 LDR r0,|L1.420|
000360 e5900028 LDR r0,[r0,#0x28]
000364 e3500000 CMP r0,#0
000368 0a000011 BEQ |L1.948|
;;;294 *(IrDA_RXBUFFER+IrDA_RxWrPnt) = (U8)rIrDA_RBR;
00036c e51f01d0 LDR r0,|L1.420|
000370 e5900020 LDR r0,[r0,#0x20]
000374 e59f1084 LDR r1,|L1.1024|
000378 e5911000 LDR r1,[r1,#0] ; IrDA_RXBUFFER
00037c e59f2080 LDR r2,|L1.1028|
000380 e5922000 LDR r2,[r2,#0] ; IrDA_RxWrPnt
000384 e7c10002 STRB r0,[r1,r2]
;;;295 IrDA_RxWrPnt++;
000388 e59f0074 LDR r0,|L1.1028|
00038c e5900000 LDR r0,[r0,#0] ; IrDA_RxWrPnt
000390 e2800001 ADD r0,r0,#1
000394 e59f1068 LDR r1,|L1.1028|
000398 e5810000 STR r0,[r1,#0] ; IrDA_RxWrPnt
;;;296 IrDA_RxCount++;
00039c e59f0064 LDR r0,|L1.1032|
0003a0 e5900000 LDR r0,[r0,#0] ; IrDA_RxCount
0003a4 e2800001 ADD r0,r0,#1
0003a8 e59f1058 LDR r1,|L1.1032|
0003ac e5810000 STR r0,[r1,#0] ; IrDA_RxCount
;;;297 }
0003b0 eaffffe9 B |L1.860|
;;;298 IrDA_DONE = 0;
|L1.948|
0003b4 e3a00000 MOV r0,#0
0003b8 e59f104c LDR r1,|L1.1036|
0003bc e5810000 STR r0,[r1,#0] ; IrDA_DONE
;;;299 }
;;;300 if(status & 0x04) { // last byte read from Rx FIFO
|L1.960|
0003c0 e3140004 TST r4,#4
0003c4 0a000001 BEQ |L1.976|
;;;301 Uart_Printf("\nLast byte read from Rx FIFO !!!!!!!!!\n");
0003c8 e28f0084 ADR r0,|L1.1108|
0003cc ebfffffe BL _printf
;;;302 }
;;;303 }
;;;304 }
;;;305 // unmasking
;;;306 rINTSUBMSK &= ~BIT_SUB_IrDA;
|L1.976|
0003d0 e59f0024 LDR r0,|L1.1020|
0003d4 e590001c LDR r0,[r0,#0x1c]
0003d8 e3c00040 BIC r0,r0,#0x40
0003dc e59f1018 LDR r1,|L1.1020|
0003e0 e581001c STR r0,[r1,#0x1c]
;;;307 rINTMSK &= ~BIT_IrDA_MSTICK;
0003e4 e1a00001 MOV r0,r1
0003e8 e5900008 LDR r0,[r0,#8]
0003ec e3c00540 BIC r0,r0,#0x10000000
0003f0 e5810008 STR r0,[r1,#8]
;;;308 }
0003f4 e8bd503f LDMFD sp!,{r0-r5,r12,lr}
0003f8 e25ef004 SUBS pc,lr,#4
|L1.1020|
0003fc 40200000 DCD 0x40200000
|L1.1024|
000400 00000024 DCD ||.bss$2|| + 36
|L1.1028|
000404 00000014 DCD ||.bss$2|| + 20
|L1.1032|
000408 00000010 DCD ||.bss$2|| + 16
|L1.1036|
00040c 00000004 DCD ||.bss$2|| + 4
|L1.1040|
000410 41447249 DCB "IrDA"
000414 20785220 DCB " Rx "
000418 7265764f DCB "Over"
00041c 206e7572 DCB "run "
000420 6f727245 DCB "Erro"
000424 634f2072 DCB "r Oc"
000428 73727563 DCB "curs"
00042c 000a2121 DCB "!!\n\0"
|L1.1072|
000430 73614c0a DCB "\nLas"
000434 79622074 DCB "t by"
000438 74206574 DCB "te t"
00043c 7852206f DCB "o Rx"
000440 46494620 DCB " FIF"
000444 2121204f DCB "O !!"
000448 21212121 DCB "!!!!"
00044c 0a212121 DCB "!!!\n"
000450 00000000 DCB "\0\0\0\0"
|L1.1108|
000454 73614c0a DCB "\nLas"
000458 79622074 DCB "t by"
00045c 72206574 DCB "te r"
000460 20646165 DCB "ead "
000464 6d6f7266 DCB "from"
000468 20785220 DCB " Rx "
00046c 4f464946 DCB "FIFO"
000470 21212120 DCB " !!!"
000474 21212121 DCB "!!!!"
000478 000a2121 DCB "!!\n\0"
ENDP
Init_Irda PROC
;;;184 // FIFO TRIG level set
;;;185 {
00047c e92d41f0 STMFD sp!,{r4-r8,lr}
000480 e1a05000 MOV r5,r0
000484 e1a07001 MOV r7,r1
000488 e1a08002 MOV r8,r2
00048c e1a04003 MOV r4,r3
000490 e59d6018 LDR r6,[sp,#0x18]
;;;186 int cnt;
;;;187
;;;188 // Timing Control Register
;;;189 //rIrDA_TIME = 0x7d; // Check please..... Can't read, only write.
;;;190 Uart_Printf("\n [Time=4]");
000494 e28f0f51 ADR r0,|L1.1504|
000498 ebfffffe BL _printf
;;;191
;;;192 // IrDA Control Register
;;;193 // Tx disable/Rx disable/No Frame abort/SDBE High
;;;194 rIrDA_CNT = (IrDA_LOOP_MODE<<5)|(MIR_HALF_MODE<<4)|(IrDA_SEND_SIP<<3)|(0);
00049c e3a00008 MOV r0,#8
0004a0 e51f1304 LDR r1,|L1.420|
0004a4 e5810000 STR r0,[r1,#0]
;;;195
;;;196 // Mode & Transceiver Set Register
;;;197 rIrDA_MDR = (1<<4) | (1<<3) | MODE; // Sip every frame / HP / Mode
0004a8 e3850018 ORR r0,r5,#0x18
0004ac e5810004 STR r0,[r1,#4]
;;;198
;;;199 if (MODE == 4) Uart_Printf(" [FIR mode]\n");
0004b0 e3550004 CMP r5,#4
0004b4 1a000002 BNE |L1.1220|
0004b8 e28f0f4b ADR r0,|L1.1516|
0004bc ebfffffe BL _printf
0004c0 ea000008 B |L1.1256|
;;;200 else if (MODE == 2)
|L1.1220|
0004c4 e3550002 CMP r5,#2
0004c8 1a000002 BNE |L1.1240|
;;;201 {
;;;202 if (MIR_HALF_MODE == 0)
;;;203 Uart_Printf(" [MIR mode]\n");
0004cc e28f0f4a ADR r0,|L1.1532|
0004d0 ebfffffe BL _printf
0004d4 ea000003 B |L1.1256|
;;;204 else
;;;205 Uart_Printf(" [MIR half mode]\n");
;;;206 }
;;;207 else {
;;;208 Uart_Printf(" [No mode]\n");
|L1.1240|
0004d8 e28f0f4b ADR r0,|L1.1548|
0004dc ebfffffe BL _printf
;;;209 return 0;
0004e0 e3a00000 MOV r0,#0
;;;210 }
;;;211
;;;212 Uart_Printf("rMDR = 0x%x, rCNT = 0x%x\n",rIrDA_MDR, rIrDA_CNT);
;;;213
;;;214 // Interrupt & DMA Control Register
;;;215 rIrDA_CNF = 0x0; // Disable Interrupt & DMA
;;;216
;;;217 // Interrupt Enable Register
;;;218 rIrDA_IER = 0x0; // Disable All interrupts
;;;219
;;;220 // FIFO Control Register
;;;221 // Tx FIFO reset[2] / RX FIFO reset[1]
;;;222 rIrDA_FCR = (RXTXTRIG<<6)|(IrDA_FIFOSIZE<<5)|(1<<2)|(1<<1)|(IrDA_FIFOENB);
;;;223
;;;224 // Set Start Field Register or Preamble length
;;;225 rIrDA_PLR= ((PREAMBLE << 6) | (RXTXTRIG<<4) | STARTFLAG);
;;;226
;;;227 // Receive Frame Length Register
;;;228 rIrDA_RXFLL = RXTXFL & 0xff;
;;;229 rIrDA_RXFLH= (RXTXFL>>8) & 0xff;
;;;230 Uart_Printf(" [RXFL-L] %d, [RXFL-H] %d\n", (U8)rIrDA_RXFLL, (U8)rIrDA_RXFLH);
;;;231
;;;232 // Transmit Frame Length Register
;;;233 rIrDA_TXFLL = RXTXFL & 0xff;
;;;234 rIrDA_TXFLH= (RXTXFL>>8) & 0xff;
;;;235 Uart_Printf(" [TXFL-L] %d, [TXFL-H] %d\n", (U8)rIrDA_TXFLL, (U8)rIrDA_TXFLH);
;;;236 /*
;;;237 while(!(rIrDA_FCR & 0x18)||(cnt == 10000)) cnt++;
;;;238 if (cnt == 10000) {
;;;239 Uart_Printf("Fail to initialize FIFO.. \n");
;;;240 return 0; // FIFO reset fail
;;;241 }
;;;242 */
;;;243 while(!(rIrDA_FCR & 0x18))
;;;244 {
;;;245 if(Uart_GetKey())
;;;246 return;
;;;247 }
;;;248
;;;249 Uart_Printf("Tx and Rx FIFO clear is over...\n");
;;;250 return 1;
;;;251 }
|L1.1252|
0004e4 e8bd81f0 LDMFD sp!,{r4-r8,pc}
|L1.1256|
0004e8 e51f034c LDR r0,|L1.420| ;212
0004ec e5900000 LDR r0,[r0,#0] ;212
0004f0 e1a02000 MOV r2,r0 ;212
0004f4 e51f0358 LDR r0,|L1.420| ;212
0004f8 e5900004 LDR r0,[r0,#4] ;212
0004fc e1a01000 MOV r1,r0 ;212
000500 e28f0f45 ADR r0,|L1.1564| ;212
000504 ebfffffe BL _printf ;212
000508 e3a00000 MOV r0,#0 ;215
00050c e51f1370 LDR r1,|L1.420| ;215
000510 e5810008 STR r0,[r1,#8] ;215
000514 e3a00000 MOV r0,#0 ;218
000518 e1c11000 BIC r1,r1,r0 ;218
00051c e581000c STR r0,[r1,#0xc] ;218
000520 e3a00027 MOV r0,#0x27 ;222
000524 e1800306 ORR r0,r0,r6,LSL #6 ;222
000528 e5810018 STR r0,[r1,#0x18] ;222
00052c e1a00307 MOV r0,r7,LSL #6 ;225
000530 e1800206 ORR r0,r0,r6,LSL #4 ;225
000534 e1800008 ORR r0,r0,r8 ;225
000538 e581001c STR r0,[r1,#0x1c] ;225
00053c e20400ff AND r0,r4,#0xff ;228
000540 e5810034 STR r0,[r1,#0x34] ;228
000544 e1a00804 MOV r0,r4,LSL #16 ;229
000548 e1a00c20 MOV r0,r0,LSR #24 ;229
00054c e5810038 STR r0,[r1,#0x38] ;229
000550 e1a00001 MOV r0,r1 ;230
000554 e5900038 LDR r0,[r0,#0x38] ;230
000558 e20020ff AND r2,r0,#0xff ;230
00055c e1a00001 MOV r0,r1 ;230
000560 e5900034 LDR r0,[r0,#0x34] ;230
000564 e20010ff AND r1,r0,#0xff ;230
000568 e28f00c8 ADR r0,|L1.1592| ;230
00056c ebfffffe BL _printf ;230
000570 e20400ff AND r0,r4,#0xff ;233
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -