📄 irda.txt
字号:
;;;469 }
|L1.2272|
0008e0 e8bd83f8 LDMFD sp!,{r3-r9,pc}
|L1.2276|
0008e4 00000000 DCD Irda_Int_Rx
|L1.2280|
0008e8 13fff000 DCD 0x13fff000
|L1.2284|
0008ec 11001000 DCD 0x11001000
|L1.2288|
0008f0 0000002c DCD ||.bss$2|| + 44
|L1.2292|
0008f4 11003000 DCD 0x11003000
|L1.2296|
0008f8 00000018 DCD ||.bss$2|| + 24
|L1.2300|
0008fc 41447249 DCB "IrDA"
000900 5243465f DCB "_FCR"
000904 25203d20 DCB " = %"
000908 00000a78 DCB "x\n\0\0"
|L1.2316|
00090c 00000009 DCB "\t\0\0\0"
|L1.2320|
000910 253a445b DCB "[D:%"
000914 205d6433 DCB "3d] "
000918 00000000 DCB "\0\0\0\0"
|L1.2332|
00091c 0000090a DCB "\n\t\0\0"
ENDP
Init_Irda_Dma_Rx PROC
;;;688 void Init_Irda_Dma_Rx(void)
;;;689 {
000920 e59f0150 LDR r0,|L1.2680|
;;;690 // DMA3 IrDA Rx init
;;;691 rDISRC0=(unsigned)0x41800020; //Address of RxBUF Register
000924 e59f1150 LDR r1,|L1.2684|
000928 e5810000 STR r0,[r1,#0]
;;;692 rDISRCC0=(0<<1)|(1); //AHB(IrDA), fix
00092c e3a00001 MOV r0,#1
000930 e1c11000 BIC r1,r1,r0
000934 e5810004 STR r0,[r1,#4]
;;;693 rDIDST0=(unsigned)MemoryRx;//Address of Memory
000938 e51f0054 LDR r0,|L1.2284|
00093c e1c11000 BIC r1,r1,r0
000940 e5810008 STR r0,[r1,#8]
;;;694 rDIDSTC0=(0<<1)|(0); //AHB(Memory), inc
000944 e3a00000 MOV r0,#0
000948 e1c11000 BIC r1,r1,r0
00094c e581000c STR r0,[r1,#0xc]
;;;695 rDCON0=(0<<31)|(1<<30)|(1<<29)|(0<<28)|(1<<27)|(7<<24)|(1<<23)|(0<<22)|(0<<20)|(IrDA_RxBUFLEN);
000950 e59f0128 LDR r0,|L1.2688|
000954 e1c11340 BIC r1,r1,r0,ASR #6
000958 e5810010 STR r0,[r1,#0x10]
;;;696 //demand, sync HCLK, TC int, single transfer, whole service, IrDA, H/W request,
;;;697 //auto-reload, byte, transfer count = IrDA_RxBUFLEN
;;;698 }
00095c e12fff1e BX lr
ENDP
Irda_Dma_Done PROC
;;;661 void __irq Irda_Dma_Done()
;;;662 {
000960 e92d503f STMFD sp!,{r0-r5,r12,lr}
;;;663 int l = IrDA_RxBUFLEN;
000964 e3a04010 MOV r4,#0x10
;;;664 unsigned char *rxData = (unsigned char *)MemoryRx;
000968 e51f5084 LDR r5,|L1.2284|
;;;665
;;;666 rINTSUBMSK|=(BIT_SUB_DMA0|BIT_SUB_DMA1|BIT_SUB_DMA2|BIT_SUB_DMA3); // Just for the safety
00096c e51f0578 LDR r0,|L1.1020|
000970 e590001c LDR r0,[r0,#0x1c]
000974 e3800578 ORR r0,r0,#0x1e000000
000978 e51f1584 LDR r1,|L1.1020|
00097c e581001c STR r0,[r1,#0x1c]
;;;667
;;;668 if(rSUBSRCPND&BIT_SUB_DMA0) // Rx
000980 e1a00001 MOV r0,r1
000984 e5900018 LDR r0,[r0,#0x18]
000988 e3100780 TST r0,#0x2000000
00098c 0a000020 BEQ |L1.2580|
;;;669 {
;;;670 rSUBSRCPND = BIT_SUB_DMA0;
000990 e3a00780 MOV r0,#0x2000000
000994 e1c11000 BIC r1,r1,r0
000998 e5810018 STR r0,[r1,#0x18]
;;;671 ClearPending(BIT_DMA);
00099c e3a00940 MOV r0,#0x100000
0009a0 e1c11000 BIC r1,r1,r0
0009a4 e5810000 STR r0,[r1,#0]
0009a8 e1c10000 BIC r0,r1,r0
0009ac e5900010 LDR r0,[r0,#0x10]
0009b0 e5810010 STR r0,[r1,#0x10]
0009b4 e1a00001 MOV r0,r1
0009b8 e5900010 LDR r0,[r0,#0x10]
;;;672 while (l--) *bHead++ = *rxData++;
0009bc e1a00000 NOP
|L1.2496|
0009c0 e2440001 SUB r0,r4,#1
0009c4 e1a04000 MOV r4,r0
0009c8 e3700001 CMN r0,#1
0009cc 0a000006 BEQ |L1.2540|
0009d0 e4d51001 LDRB r1,[r5],#1
0009d4 e59f00a8 LDR r0,|L1.2692|
0009d8 e5900000 LDR r0,[r0,#0] ; bHead
0009dc e4c01001 STRB r1,[r0],#1
0009e0 e59f109c LDR r1,|L1.2692|
0009e4 e5810000 STR r0,[r1,#0] ; bHead
0009e8 eafffff4 B |L1.2496|
;;;673 IrDA_DONE = 0;
|L1.2540|
0009ec e3a00000 MOV r0,#0
0009f0 e51f15ec LDR r1,|L1.1036|
0009f4 e5810000 STR r0,[r1,#0] ; IrDA_DONE
;;;674 Uart_Printf("IrDA DMA0(Rx) Done.....\n");
0009f8 e28f0088 ADR r0,|L1.2696|
0009fc ebfffffe BL _printf
;;;675 rINTSUBMSK &= ~BIT_SUB_DMA0;
000a00 e51f060c LDR r0,|L1.1020|
000a04 e590001c LDR r0,[r0,#0x1c]
000a08 e3c00780 BIC r0,r0,#0x2000000
000a0c e51f1618 LDR r1,|L1.1020|
000a10 e581001c STR r0,[r1,#0x1c]
;;;676 }
;;;677
;;;678 if(rSUBSRCPND&BIT_SUB_DMA1) // Tx
|L1.2580|
000a14 e51f0620 LDR r0,|L1.1020|
000a18 e5900018 LDR r0,[r0,#0x18]
000a1c e3100640 TST r0,#0x4000000
000a20 0a000012 BEQ |L1.2672|
;;;679 {
;;;680 rSUBSRCPND = BIT_SUB_DMA1;
000a24 e3a00640 MOV r0,#0x4000000
000a28 e51f1634 LDR r1,|L1.1020|
000a2c e5810018 STR r0,[r1,#0x18]
;;;681 ClearPending(BIT_DMA);
000a30 e3a00940 MOV r0,#0x100000
000a34 e1c11000 BIC r1,r1,r0
000a38 e5810000 STR r0,[r1,#0]
000a3c e1c10000 BIC r0,r1,r0
000a40 e5900010 LDR r0,[r0,#0x10]
000a44 e5810010 STR r0,[r1,#0x10]
000a48 e1a00001 MOV r0,r1
000a4c e5900010 LDR r0,[r0,#0x10]
;;;682 rDMASKTRIG1=0; // STOP,DMA3 channel off, no-sw trigger
000a50 e3a00000 MOV r0,#0
000a54 e28119c0 ADD r1,r1,#0x300000
000a58 e5810020 STR r0,[r1,#0x20]
;;;683 IrDA_DONE=0; // Check Clear the semaphore
000a5c e3a00000 MOV r0,#0
000a60 e51f165c LDR r1,|L1.1036|
000a64 e5810000 STR r0,[r1,#0] ; IrDA_DONE
;;;684 Uart_Printf("IrDA DMA1(Tx) Done.....\n");
000a68 e28f0034 ADR r0,|L1.2724|
000a6c ebfffffe BL _printf
;;;685 }
;;;686 }
|L1.2672|
000a70 e8bd503f LDMFD sp!,{r0-r5,r12,lr}
000a74 e25ef004 SUBS pc,lr,#4
|L1.2680|
000a78 41800020 DCD 0x41800020
|L1.2684|
000a7c 40400000 DCD 0x40400000
|L1.2688|
000a80 6f800010 DCD 0x6f800010
|L1.2692|
000a84 00000044 DCD ||.bss$2|| + 68
|L1.2696|
000a88 41447249 DCB "IrDA"
000a8c 414d4420 DCB " DMA"
000a90 78522830 DCB "0(Rx"
000a94 6f442029 DCB ") Do"
000a98 2e2e656e DCB "ne.."
000a9c 0a2e2e2e DCB "...\n"
000aa0 00000000 DCB "\0\0\0\0"
|L1.2724|
000aa4 41447249 DCB "IrDA"
000aa8 414d4420 DCB " DMA"
000aac 78542831 DCB "1(Tx"
000ab0 6f442029 DCB ") Do"
000ab4 2e2e656e DCB "ne.."
000ab8 0a2e2e2e DCB "...\n"
000abc 00000000 DCB "\0\0\0\0"
ENDP
Test_Irda_Fifo_Dma_Rx PROC
;;;700 void Test_Irda_Fifo_Dma_Rx(int MODE,int PREAMBLE,int STARTFLAG,int RXFL,int RXTRIG)
;;;701 {
000ac0 e92d47fc STMFD sp!,{r2-r10,lr}
000ac4 e1a05000 MOV r5,r0
000ac8 e1a06001 MOV r6,r1
000acc e1a07002 MOV r7,r2
000ad0 e1a08003 MOV r8,r3
000ad4 e59d4028 LDR r4,[sp,#0x28]
;;;702 int cnt[255], busy[255], dst[255], precnt = 0;
000ad8 e3a09000 MOV r9,#0
;;;703 int i = 0;
000adc e3a0a000 MOV r10,#0
;;;704
;;;705 unsigned char c;
;;;706
;;;707 // Initialize Check Data ----------------START
;;;708 IrDA_RXBUFFER=(unsigned char *)MemoryRx;
000ae0 e51f01fc LDR r0,|L1.2284|
000ae4 e51f16ec LDR r1,|L1.1024|
000ae8 e5810000 STR r0,[r1,#0] ; IrDA_RXBUFFER
;;;709 bHead=(unsigned char *)MemoryCk;
000aec e2800d80 ADD r0,r0,#0x2000
000af0 e51f1074 LDR r1,|L1.2692|
000af4 e5810000 STR r0,[r1,#0] ; bHead
;;;710 bTail=(unsigned char *)MemoryCk;
000af8 e59f1160 LDR r1,|L1.3168|
000afc e5810000 STR r0,[r1,#0] ; bTail
;;;711
;;;712 // Initialize RX DMA -----------------START
;;;713 pISR_DMA=(unsigned)Irda_Dma_Done;
000b00 e59f015c LDR r0,|L1.3172|
000b04 e51f1224 LDR r1,|L1.2280|
000b08 e5810f70 STR r0,[r1,#0xf70]
;;;714 Init_Irda_Dma_Rx();
000b0c ebfffffe BL Init_Irda_Dma_Rx
;;;715 ClearPending(BIT_DMA);
000b10 e3a00940 MOV r0,#0x100000
000b14 e51f1720 LDR r1,|L1.1020|
000b18 e5810000 STR r0,[r1,#0]
000b1c e1c10000 BIC r0,r1,r0
000b20 e5900010 LDR r0,[r0,#0x10]
000b24 e5810010 STR r0,[r1,#0x10]
000b28 e1a00001 MOV r0,r1
000b2c e5900010 LDR r0,[r0,#0x10]
;;;716 rSUBSRCPND=BIT_SUB_DMA0;
000b30 e3a00780 MOV r0,#0x2000000
000b34 e1c11000 BIC r1,r1,r0
000b38 e5810018 STR r0,[r1,#0x18]
;;;717 // Initialize RX DMA -----------------END
;;;718
;;;719 Init_Irda(MODE, PREAMBLE, STARTFLAG, RXFL, RXTRIG); // Initialize IrDA
000b3c e1a03008 MOV r3,r8
000b40 e1a02007 MOV r2,r7
000b44 e1a01006 MOV r1,r6
000b48 e1a00005 MOV r0,r5
000b4c e58d4000 STR r4,[sp,#0]
000b50 ebfffffe BL Init_Irda
;;;720
;;;721 rIrDA_CNF=(1<<3)|(1<<2); // Enable Rx DMA
000b54 e3a0000c MOV r0,#0xc
000b58 e51f19bc LDR r1,|L1.420|
000b5c e5810008 STR r0,[r1,#8]
;;;722 rIrDA_CNT|=(1<<6); // Enable RX
000b60 e1c10000 BIC r0,r1,r0
000b64 e5900000 LDR r0,[r0,#0]
000b68 e3800040 ORR r0,r0,#0x40
000b6c e5810000 STR r0,[r1,#0]
;;;723 //Delay(5000);
;;;724 rDMASKTRIG0=(0<<2)|(1<<1)|(0); // Run, DMA3 channel on, no-sw trigger
000b70 e3a00002 MOV r0,#2
000b74 e2411750 SUB r1,r1,#0x1400000
000b78 e5810020 STR r0,[r1,#0x20]
;;;725 rINTMSK=~(BIT_DMA); // Unmask DMA done INT
000b7c e3e00940 MVN r0,#0x100000
000b80 e0811a80 ADD r1,r1,r0,LSL #21
000b84 e5810008 STR r0,[r1,#8]
;;;726 rINTSUBMSK=~(BIT_SUB_DMA0); // Unmask DMA done INT
000b88 e3e00780 MVN r0,#0x2000000
000b8c e0011000 AND r1,r1,r0
000b90 e581001c STR r0,[r1,#0x1c]
;;;727
;;;728 IrDA_DONE = 1;
000b94 e3a00001 MOV r0,#1
000b98 e51f1794 LDR r1,|L1.1036|
000b9c e5810000 STR r0,[r1,#0] ; IrDA_DONE
;;;729
;;;730 while(1)
000ba0 e1a00000 NOP
|L1.2980|
000ba4 e1a00000 NOP
;;;731 {
;;;732 if (!IrDA_DONE)
000ba8 e51f07a4 LDR r0,|L1.1036|
000bac e5900000 LDR r0,[r0,#0] ; IrDA_DONE
000bb0 e3500000 CMP r0,#0
000bb4 1a000020 BNE |L1.3132|
;;;733 {
;;;734 Uart_Printf("[D:0x%x] ", rDCDST0);
000bb8 e51f0144 LDR r0,|L1.2684|
000bbc e590001c LDR r0,[r0,#0x1c]
000bc0 e1a01000 MOV r1,r0
000bc4 e28f009c ADR r0,|L1.3176|
000bc8 ebfffffe BL _printf
;;;735 Uart_Printf("[H:0x%x] ", bHead);
000bcc e51f0150 LDR r0,|L1.2692|
000bd0 e5901000 LDR r1,[r0,#0] ; bHead
000bd4 e28f0098 ADR r0,|L1.3188|
000bd8 ebfffffe BL _printf
;;;736 Uart_Printf("[T:0x%x]\n", bTail);
000bdc e59f007c LDR r0,|L1.3168|
000be0 e5901000 LDR r1,[r0,#0] ; bTail
000be4 e28f0094 ADR r0,|L1.3200|
000be8 ebfffffe BL _printf
;;;737
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -