📄 irda.txt
字号:
;;;738 while (bTail != bHead)
000bec e1a00000 NOP
|L1.3056|
000bf0 e59f0068 LDR r0,|L1.3168|
000bf4 e5900000 LDR r0,[r0,#0] ; bTail
000bf8 e51f117c LDR r1,|L1.2692|
000bfc e5911000 LDR r1,[r1,#0] ; bHead
000c00 e1500001 CMP r0,r1
000c04 0a000007 BEQ |L1.3112|
;;;739 Uart_Printf("[D:%3d] ",*bTail++);
000c08 e59f0050 LDR r0,|L1.3168|
000c0c e5902000 LDR r2,[r0,#0] ; bTail
000c10 e4d21001 LDRB r1,[r2],#1
000c14 e59f3044 LDR r3,|L1.3168|
000c18 e24f0fc4 ADR r0,|L1.2320|
000c1c e5832000 STR r2,[r3,#0] ; bTail
000c20 ebfffffe BL _printf
000c24 eafffff1 B |L1.3056|
;;;740 IrDA_DONE=1;
|L1.3112|
000c28 e3a00001 MOV r0,#1
000c2c e51f1828 LDR r1,|L1.1036|
000c30 e5810000 STR r0,[r1,#0] ; IrDA_DONE
;;;741 Uart_Printf(".\n");
000c34 e28f0050 ADR r0,|L1.3212|
000c38 ebfffffe BL _printf
;;;742 }
;;;743 if (Uart_GetKey() == '\r') break;
|L1.3132|
000c3c ebfffffe BL Uart_GetKey
000c40 e350000d CMP r0,#0xd
000c44 1a000000 BNE |L1.3148|
000c48 ea000000 B |L1.3152|
;;;744 }
|L1.3148|
000c4c eaffffd4 B |L1.2980|
;;;745
;;;746 rDMASKTRIG0 = 0; // Run, DMA3 channel on, no-sw trigger
|L1.3152|
000c50 e3a00000 MOV r0,#0
000c54 e51f11e0 LDR r1,|L1.2684|
000c58 e5810020 STR r0,[r1,#0x20]
;;;747 }
000c5c e8bd87fc LDMFD sp!,{r2-r10,pc}
|L1.3168|
000c60 00000048 DCD ||.bss$2|| + 72
|L1.3172|
000c64 00000000 DCD Irda_Dma_Done
|L1.3176|
000c68 303a445b DCB "[D:0"
000c6c 5d782578 DCB "x%x]"
000c70 00000020 DCB " \0\0\0"
|L1.3188|
000c74 303a485b DCB "[H:0"
000c78 5d782578 DCB "x%x]"
000c7c 00000020 DCB " \0\0\0"
|L1.3200|
000c80 303a545b DCB "[T:0"
000c84 5d782578 DCB "x%x]"
000c88 0000000a DCB "\n\0\0\0"
|L1.3212|
000c8c 00000a2e DCB ".\n\0\0"
ENDP
IrDA_Port_Init PROC
;;;162 void IrDA_Port_Init(void)
;;;163 {
000c90 e92d4008 STMFD sp!,{r3,lr}
;;;164 IrDA_rGPCON=rGPCON_U;
000c94 e51f0b00 LDR r0,|L1.412|
000c98 e5900000 LDR r0,[r0,#0]
000c9c e51f1b0c LDR r1,|L1.408|
000ca0 e5810000 STR r0,[r1,#0] ; IrDA_rGPCON
;;;165 IrDA_rGPUP=rGPPU;
000ca4 e51f0b10 LDR r0,|L1.412|
000ca8 e5900010 LDR r0,[r0,#0x10]
000cac e51f1b14 LDR r1,|L1.416|
000cb0 e5810000 STR r0,[r1,#0] ; IrDA_rGPUP
;;;166 rGPCON_U |= (3<<24)|(3<<22)|(3<<20); // Set IrDA_TXD, IrDA_RXD, IrDA_SDBW
000cb4 e51f0b20 LDR r0,|L1.412|
000cb8 e5900000 LDR r0,[r0,#0]
000cbc e38007fc ORR r0,r0,#0x3f00000
000cc0 e51f1b2c LDR r1,|L1.412|
000cc4 e5810000 STR r0,[r1,#0]
;;;167 rGPPU |= (7<<29); // Disable IrDA pullup
000cc8 e1a00001 MOV r0,r1
000ccc e5900010 LDR r0,[r0,#0x10]
000cd0 e38004e0 ORR r0,r0,#0xe0000000
000cd4 e5810010 STR r0,[r1,#0x10]
;;;168 Uart_Printf("IrDA Initialize is done!!!\n");
000cd8 e28f0004 ADR r0,|L1.3300|
000cdc ebfffffe BL _printf
;;;169 }
000ce0 e8bd8008 LDMFD sp!,{r3,pc}
|L1.3300|
000ce4 41447249 DCB "IrDA"
000ce8 696e4920 DCB " Ini"
000cec 6c616974 DCB "tial"
000cf0 20657a69 DCB "ize "
000cf4 64207369 DCB "is d"
000cf8 21656e6f DCB "one!"
000cfc 000a2121 DCB "!!\n\0"
ENDP
Test_IrDA_Fifo_Rx PROC
;;;132 void Test_IrDA_Fifo_Rx(void)
;;;133 {
000d00 e92d4008 STMFD sp!,{r3,lr}
;;;134 IrDA_Port_Init();
000d04 ebfffffe BL IrDA_Port_Init
;;;135
;;;136 Uart_Printf("IrDA Interrupt Rx Test\n");
000d08 e28f0058 ADR r0,|L1.3432|
000d0c ebfffffe BL _printf
;;;137 Uart_Printf("Select control mode : 1. Interrupt(D) 2. DMA\n");
000d10 e28f0068 ADR r0,|L1.3456|
000d14 ebfffffe BL _printf
;;;138
;;;139 if (Uart_Getch() == '2')
000d18 ebfffffe BL Uart_Getch
000d1c e3500032 CMP r0,#0x32
000d20 1a000007 BNE |L1.3396|
;;;140 Test_Irda_Fifo_Dma_Rx(MODE_VALUE, PREAMBLE_VALUE, STARTFLAG_VALUE, RXFL_VALUE, RXTR_VALUE);
000d24 e3a03001 MOV r3,#1
000d28 e58d3000 STR r3,[sp,#0]
000d2c e3a03d40 MOV r3,#0x1000
000d30 e3a02004 MOV r2,#4
000d34 e3a01000 MOV r1,#0
000d38 e3a00004 MOV r0,#4
000d3c ebfffffe BL Test_Irda_Fifo_Dma_Rx
000d40 ea000006 B |L1.3424|
;;;141 else
;;;142 Test_Irda_Fifo_Int_Rx(MODE_VALUE, PREAMBLE_VALUE, STARTFLAG_VALUE, RXFL_VALUE, RXTR_VALUE);
|L1.3396|
000d44 e3a03001 MOV r3,#1
000d48 e58d3000 STR r3,[sp,#0]
000d4c e3a03d40 MOV r3,#0x1000
000d50 e3a02004 MOV r2,#4
000d54 e3a01000 MOV r1,#0
000d58 e3a00004 MOV r0,#4
000d5c ebfffffe BL Test_Irda_Fifo_Int_Rx
;;;143
;;;144 IrDA_Port_Return();
|L1.3424|
000d60 ebfffffe BL IrDA_Port_Return
;;;145 }
000d64 e8bd8008 LDMFD sp!,{r3,pc}
|L1.3432|
000d68 41447249 DCB "IrDA"
000d6c 746e4920 DCB " Int"
000d70 75727265 DCB "erru"
000d74 52207470 DCB "pt R"
000d78 65542078 DCB "x Te"
000d7c 000a7473 DCB "st\n\0"
|L1.3456|
000d80 656c6553 DCB "Sele"
000d84 63207463 DCB "ct c"
000d88 72746e6f DCB "ontr"
000d8c 6d206c6f DCB "ol m"
000d90 2065646f DCB "ode "
000d94 2e31203a DCB ": 1."
000d98 746e4920 DCB " Int"
000d9c 75727265 DCB "erru"
000da0 44287470 DCB "pt(D"
000da4 20202029 DCB ") "
000da8 202e3220 DCB " 2. "
000dac 0a414d44 DCB "DMA\n"
000db0 00000000 DCB "\0\0\0\0"
ENDP
Irda_Int_Tx PROC
;;;541 void __irq Irda_Int_Tx()
;;;542 {
000db4 e92d503f STMFD sp!,{r0-r5,r12,lr}
;;;543 U8 status=0;
000db8 e3a05000 MOV r5,#0
;;;544 U8 i =0;
000dbc e3a04000 MOV r4,#0
;;;545
;;;546 // Mast interrupt Pending bit of IrDA
;;;547 rINTSUBMSK |= BIT_SUB_IrDA; // Mask IrDA sub-pending bit
000dc0 e51f09cc LDR r0,|L1.1020|
000dc4 e590001c LDR r0,[r0,#0x1c]
000dc8 e3800040 ORR r0,r0,#0x40
000dcc e51f19d8 LDR r1,|L1.1020|
000dd0 e581001c STR r0,[r1,#0x1c]
;;;548 rINTMSK |= BIT_IrDA_MSTICK; // Mask IrDA pending bit
000dd4 e1a00001 MOV r0,r1
000dd8 e5900008 LDR r0,[r0,#8]
000ddc e3800540 ORR r0,r0,#0x10000000
000de0 e5810008 STR r0,[r1,#8]
;;;549
;;;550 // Clear interrupt pending bit of IrDA
;;;551 rSUBSRCPND = BIT_SUB_IrDA;
000de4 e3a00040 MOV r0,#0x40
000de8 e1c11000 BIC r1,r1,r0
000dec e5810018 STR r0,[r1,#0x18]
;;;552 ClearPending(BIT_IrDA_MSTICK);
000df0 e3a00540 MOV r0,#0x10000000
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]
;;;553
;;;554 status = (U8)rIrDA_IIR; // Read IIR(Interrupt Identification Register) of IrDA
000e10 e2810758 ADD r0,r1,#0x1600000
000e14 e5900010 LDR r0,[r0,#0x10]
000e18 e20050ff AND r5,r0,#0xff
;;;555 //Uart_Printf("IrDA IIR:0x%x\n", status);
;;;556
;;;557 if(status & 0x2) // TX Trigger
000e1c e3150002 TST r5,#2
000e20 0a00002b BEQ |L1.3796|
;;;558 {
;;;559 for (i=0;i<16;i++)
000e24 e3a04000 MOV r4,#0
|L1.3624|
000e28 e3540010 CMP r4,#0x10
000e2c 2a000014 BCS |L1.3716|
000e30 ea000002 B |L1.3648|
|L1.3636|
000e34 e2840001 ADD r0,r4,#1
000e38 e20040ff AND r4,r0,#0xff
000e3c eafffff9 B |L1.3624|
;;;560 {
;;;561 rIrDA_RBR = cData;
|L1.3648|
000e40 e59f0148 LDR r0,|L1.3984|
000e44 e5d00000 LDRB r0,[r0,#0] ; cData
000e48 e51f1cac LDR r1,|L1.420|
000e4c e5810020 STR r0,[r1,#0x20]
;;;562 *IrDA_CKBUFFER++ = cData++;
000e50 e59f0138 LDR r0,|L1.3984|
000e54 e5d00000 LDRB r0,[r0,#0] ; cData
000e58 e2801001 ADD r1,r0,#1
000e5c e59f012c LDR r0,|L1.3984|
000e60 e5d02000 LDRB r2,[r0,#0] ; cData
000e64 e5c01000 STRB r1,[r0,#0] ; cData
000e68 e51f0580 LDR r0,|L1.2288|
000e6c e5900000 LDR r0,[r0,#0] ; IrDA_CKBUFFER
000e70 e5c02000 STRB r2,[r0,#0]
000e74 e2800001 ADD r0,r0,#1
000e78 e51f1590 LDR r1,|L1.2288|
000e7c e5810000 STR r0,[r1,#0] ; IrDA_CKBUFFER
;;;563 }
000e80 eaffffeb B |L1.3636|
;;;564
;;;565 IrDA_TxCnt += IrDA_TxBUFLEN;
|L1.3716|
000e84 e59f0108 LDR r0,|L1.3988|
000e88 e5900000 LDR r0,[r0,#0] ; IrDA_TxCnt
000e8c e2800010 ADD r0,r0,#0x10
000e90 e59f10fc LDR r1,|L1.3988|
000e94 e5810000 STR r0,[r1,#0] ; IrDA_TxCnt
;;;566 //IrDA_TxCnt +=IrDA_TxNum;
;;;567 if (IrDA_TxNum <= IrDA_TxCnt) {
000e98 e59f00f8 LDR r0,|L1.3992|
000e9c e5900000 LDR r0,[r0,#0] ; IrDA_TxNum
000ea0 e59f10ec LDR r1,|L1.3988|
000ea4 e5911000 LDR r1,[r1,#0] ; IrDA_TxCnt
000ea8 e1500001 CMP r0,r1
000eac ca00002c BGT |L1.3940|
;;;568 rIrDA_IER &= ~(1<<1);
000eb0 e51f0d14 LDR r0,|L1.420|
000eb4 e590000c LDR r0,[r0,#0xc]
000eb8 e3c00002 BIC r0,r0,#2
000ebc e51f1d20 LDR r1,|L1.420|
000ec0 e581000c STR r0,[r1,#0xc]
;;;569 IrDA_TxDone = 0;
000ec4 e3a00000 MOV r0,#0
000ec8 e59f10cc LDR r1,|L1.3996|
000ecc e5810000 STR r0,[r1,#0] ; IrDA_TxDone
000ed0 ea000023 B |L1.3940|
;;;570 }
;;;571
;;;572 }
;;;573 else if(status & 0x20) // TX Trigger
|L1.3796|
000ed4 e3150020 TST r5,#0x20
000ed8 0a000021 BEQ |L1.3940|
;;;574 {
;;;575 Uart_Printf("Tx Underrun error!! \n");
000edc e28f00bc ADR r0,|L1.4000|
000ee0 ebfffffe BL _printf
;;;576 IrDA_CKBUFFER = (unsigned char *)MemoryCk;
000ee4 e51f05f8 LDR r0,|L1.2292|
000ee8 e51f1600 LDR r1,|L1.2288|
000eec e5810000 STR r0,[r1,#0] ; IrDA_CKBUFFER
;;;577 IrDA_CKBUFFER1 = (unsigned char *)MemoryCk1;
000ef0 e2800d40 ADD r0,r0,#0x1000
000ef4 e59f10bc LDR r1,|L1.4024|
000ef8 e5810000 STR r0,[r1,#0] ; IrDA_CKBUFFER1
;;;578 for(i=0; i<IrDA_TxCnt ; i++)
000efc e3a04000 MOV r4,#0
|L1.3840|
000f00 e59f008c LDR r0,|L1.3988|
000f04 e5900000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -