⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irda.txt

📁 支持三星原产的S3C24A0开发板
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;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 + -