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

📄 irda.txt

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