📄 irda.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\irda.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
Ch12_IrDA PROC
;;;104 void Ch12_IrDA(void)
;;;105 {
|L1.0|
000000 e92d4010 STMFD sp!,{r4,lr}
;;;106 while(1)
000004 e1a00000 NOP
|L1.8|
000008 e1a00000 NOP
;;;107 {
;;;108 int i = 0;
00000c e3a04000 MOV r4,#0
;;;109
;;;110 while(1)
000010 e1a00000 NOP
|L1.20|
000014 e1a00000 NOP
;;;111 { //display menu
;;;112 Uart_Printf("%2d:%s",i,IrDA_func[i][1]);
000018 e59f008c LDR r0,|L1.172|
00001c e0800184 ADD r0,r0,r4,LSL #3
000020 e1a01004 MOV r1,r4
000024 e5902004 LDR r2,[r0,#4]
000028 e28f0080 ADR r0,|L1.176|
00002c ebfffffe BL _printf
;;;113 i++;
000030 e2844001 ADD r4,r4,#1
;;;114 if((int)(IrDA_func[i][0])==0)
000034 e59f0070 LDR r0,|L1.172|
000038 e7900184 LDR r0,[r0,r4,LSL #3]
00003c e3500000 CMP r0,#0
000040 1a000002 BNE |L1.80|
;;;115 {
;;;116 Uart_Printf("\n");
000044 e28f006c ADR r0,|L1.184|
000048 ebfffffe BL _printf
;;;117 break;
00004c ea000004 B |L1.100|
;;;118 }
;;;119 if((i%4)==0)
|L1.80|
000050 e3140003 TST r4,#3
000054 1a000001 BNE |L1.96|
;;;120 Uart_Printf("\n");
000058 e28f0058 ADR r0,|L1.184|
00005c ebfffffe BL _printf
;;;121 }
|L1.96|
000060 eaffffeb B |L1.20|
;;;122
;;;123 Uart_Printf("\nSelect the function to test : ");
|L1.100|
000064 e28f0050 ADR r0,|L1.188|
000068 ebfffffe BL _printf
;;;124 i = Uart_GetIntNum();
00006c ebfffffe BL Uart_GetIntNum
000070 e1a04000 MOV r4,r0
;;;125 Uart_Printf("\n");
000074 e28f003c ADR r0,|L1.184|
000078 ebfffffe BL _printf
;;;126 if(i==-1) break;
00007c e3740001 CMN r4,#1
000080 1a000000 BNE |L1.136|
000084 ea000007 B |L1.168|
;;;127 if(i>=0 && (i<(sizeof(IrDA_func)/8)) )
|L1.136|
000088 e3540000 CMP r4,#0
00008c ba000004 BLT |L1.164|
000090 e3540003 CMP r4,#3
000094 2a000002 BCS |L1.164|
;;;128 ( (void (*)(void)) (IrDA_func[i][0]) )();
000098 e59f100c LDR r1,|L1.172|
00009c e7910184 LDR r0,[r1,r4,LSL #3]
0000a0 e12fff30 BLX r0
;;;129 }
|L1.164|
0000a4 eaffffd7 B |L1.8|
;;;130 }
|L1.168|
0000a8 e8bd8010 LDMFD sp!,{r4,pc}
|L1.172|
0000ac 00000000 DCD IrDA_func
|L1.176|
0000b0 3a643225 DCB "%2d:"
0000b4 00007325 DCB "%s\0\0"
|L1.184|
0000b8 0000000a DCB "\n\0\0\0"
|L1.188|
0000bc 6c65530a DCB "\nSel"
0000c0 20746365 DCB "ect "
0000c4 20656874 DCB "the "
0000c8 636e7566 DCB "func"
0000cc 6e6f6974 DCB "tion"
0000d0 206f7420 DCB " to "
0000d4 74736574 DCB "test"
0000d8 00203a20 DCB " : \0"
ENDP
IrDA_Port_Return PROC
;;;171 void IrDA_Port_Return(void)
;;;172 {
0000dc e59f00b4 LDR r0,|L1.408|
;;;173 rGPCON_M=IrDA_rGPCON;
0000e0 e5900000 LDR r0,[r0,#0] ; IrDA_rGPCON
0000e4 e59f10b0 LDR r1,|L1.412|
0000e8 e5810004 STR r0,[r1,#4]
;;;174 rGPPU=IrDA_rGPUP;
0000ec e59f00ac LDR r0,|L1.416|
0000f0 e5900000 LDR r0,[r0,#0] ; IrDA_rGPUP
0000f4 e5810010 STR r0,[r1,#0x10]
;;;175 }
0000f8 e12fff1e BX lr
ENDP
__sub_Irda_Err_Int_Rx PROC
;;;383 void __sub_Irda_Err_Int_Rx()
;;;384 {
0000fc e92d4008 STMFD sp!,{r3,lr}
;;;385 switch((rIrDA_LSR & 0x1c)>>2)//to clear and check the status of register bits
000100 e59f009c LDR r0,|L1.420|
000104 e5900014 LDR r0,[r0,#0x14]
000108 e1a00d80 MOV r0,r0,LSL #27
00010c e1a00ea0 MOV r0,r0,LSR #29
000110 e3500007 CMP r0,#7
000114 908ff100 ADDLS pc,pc,r0,LSL #2
000118 ea00001c B |L1.400|
00011c ea00001b B |L1.400|
000120 ea000005 B |L1.316|
000124 ea000007 B |L1.328|
000128 ea000009 B |L1.340|
00012c ea00000b B |L1.352|
000130 ea00000d B |L1.364|
000134 ea00000f B |L1.376|
000138 ea000011 B |L1.388|
;;;386 {
;;;387 case 1:
;;;388 Uart_Printf("CRC error\n");
|L1.316|
00013c e28f0064 ADR r0,|L1.424|
000140 ebfffffe BL _printf
;;;389 break;
000144 ea000012 B |L1.404|
;;;390 case 2:
;;;391 Uart_Printf("Phy error\n");
|L1.328|
000148 e28f0064 ADR r0,|L1.436|
00014c ebfffffe BL _printf
;;;392 break;
000150 ea00000f B |L1.404|
;;;393 case 3:
;;;394 Uart_Printf("CRC and Phy error\n");
|L1.340|
000154 e28f0064 ADR r0,|L1.448|
000158 ebfffffe BL _printf
;;;395 break;
00015c ea00000c B |L1.404|
;;;396 case 4:
;;;397 Uart_Printf("Frame Length error\n");
|L1.352|
000160 e28f006c ADR r0,|L1.468|
000164 ebfffffe BL _printf
;;;398 break;
000168 ea000009 B |L1.404|
;;;399 case 5:
;;;400 Uart_Printf("CRC and Frame Length error\n");
|L1.364|
00016c e28f0074 ADR r0,|L1.488|
000170 ebfffffe BL _printf
;;;401 break;
000174 ea000006 B |L1.404|
;;;402 case 6:
;;;403 Uart_Printf("Phy and Frame Length error\n");
|L1.376|
000178 e28f0084 ADR r0,|L1.516|
00017c ebfffffe BL _printf
;;;404 break;
000180 ea000003 B |L1.404|
;;;405 case 7:
;;;406 Uart_Printf("CRC, Phy and Frame Length error\n");
|L1.388|
000184 e28f0094 ADR r0,|L1.544|
000188 ebfffffe BL _printf
;;;407 break;
00018c ea000000 B |L1.404|
;;;408 default :
;;;409 break;
|L1.400|
000190 e1a00000 NOP
;;;410 }
;;;411 }
|L1.404|
000194 e8bd8008 LDMFD sp!,{r3,pc}
|L1.408|
000198 0000001c DCD ||.bss$2|| + 28
|L1.412|
00019c 44800000 DCD 0x44800000
|L1.416|
0001a0 00000020 DCD ||.bss$2|| + 32
|L1.420|
0001a4 41800000 DCD 0x41800000
|L1.424|
0001a8 20435243 DCB "CRC "
0001ac 6f727265 DCB "erro"
0001b0 00000a72 DCB "r\n\0\0"
|L1.436|
0001b4 20796850 DCB "Phy "
0001b8 6f727265 DCB "erro"
0001bc 00000a72 DCB "r\n\0\0"
|L1.448|
0001c0 20435243 DCB "CRC "
0001c4 20646e61 DCB "and "
0001c8 20796850 DCB "Phy "
0001cc 6f727265 DCB "erro"
0001d0 00000a72 DCB "r\n\0\0"
|L1.468|
0001d4 6d617246 DCB "Fram"
0001d8 654c2065 DCB "e Le"
0001dc 6874676e DCB "ngth"
0001e0 72726520 DCB " err"
0001e4 000a726f DCB "or\n\0"
|L1.488|
0001e8 20435243 DCB "CRC "
0001ec 20646e61 DCB "and "
0001f0 6d617246 DCB "Fram"
0001f4 654c2065 DCB "e Le"
0001f8 6874676e DCB "ngth"
0001fc 72726520 DCB " err"
000200 000a726f DCB "or\n\0"
|L1.516|
000204 20796850 DCB "Phy "
000208 20646e61 DCB "and "
00020c 6d617246 DCB "Fram"
000210 654c2065 DCB "e Le"
000214 6874676e DCB "ngth"
000218 72726520 DCB " err"
00021c 000a726f DCB "or\n\0"
|L1.544|
000220 2c435243 DCB "CRC,"
000224 79685020 DCB " Phy"
000228 646e6120 DCB " and"
00022c 61724620 DCB " Fra"
000230 4c20656d DCB "me L"
000234 74676e65 DCB "engt"
000238 72652068 DCB "h er"
00023c 0a726f72 DCB "ror\n"
000240 00000000 DCB "\0\0\0\0"
ENDP
Irda_Int_Rx PROC
;;;256 void __irq Irda_Int_Rx(void)
;;;257 {
000244 e92d503f STMFD sp!,{r0-r5,r12,lr}
;;;258 U8 status=0;
000248 e3a04000 MOV r4,#0
;;;259 U8 i;
;;;260 U8 RxCount=0;
00024c e3a05000 MOV r5,#0
;;;261
;;;262 // masking
;;;263 rINTSUBMSK |= BIT_SUB_IrDA;
000250 e59f01a4 LDR r0,|L1.1020|
000254 e590001c LDR r0,[r0,#0x1c]
000258 e3800040 ORR r0,r0,#0x40
00025c e59f1198 LDR r1,|L1.1020|
000260 e581001c STR r0,[r1,#0x1c]
;;;264 rINTMSK |= BIT_IrDA_MSTICK;
000264 e1a00001 MOV r0,r1
000268 e5900008 LDR r0,[r0,#8]
00026c e3800540 ORR r0,r0,#0x10000000
000270 e5810008 STR r0,[r1,#8]
;;;265
;;;266
;;;267 // clear pending bit
;;;268 status = (U8)rIrDA_IIR; // Sub-sub pending clear
000274 e2810758 ADD r0,r1,#0x1600000
000278 e5900010 LDR r0,[r0,#0x10]
00027c e20040ff AND r4,r0,#0xff
;;;269
;;;270 rSUBSRCPND = BIT_SUB_IrDA;
000280 e3a00040 MOV r0,#0x40
000284 e1c11000 BIC r1,r1,r0
000288 e5810018 STR r0,[r1,#0x18]
;;;271 ClearPending(BIT_IrDA_MSTICK);
00028c e3a00540 MOV r0,#0x10000000
000290 e1c11000 BIC r1,r1,r0
000294 e5810000 STR r0,[r1,#0]
000298 e1c10000 BIC r0,r1,r0
00029c e5900010 LDR r0,[r0,#0x10]
0002a0 e5810010 STR r0,[r1,#0x10]
0002a4 e1a00001 MOV r0,r1
0002a8 e5900010 LDR r0,[r0,#0x10]
;;;272
;;;273 // Uart_Printf("rIrDA_IIR=%x\n",status);
;;;274
;;;275 if(status & 0x40) { // RX error indication
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -