📄 iic.txt
字号:
;;;206 switch(_iicMode)
000318 e59f0340 LDR r0,|L1.1632|
00031c e5900000 LDR r0,[r0,#0] ; _iicMode
000320 e3500001 CMP r0,#1
000324 0a000038 BEQ |L1.1036|
000328 e3500002 CMP r0,#2
00032c 0a000004 BEQ |L1.836|
000330 e3500003 CMP r0,#3
000334 0a000005 BEQ |L1.848|
000338 e3500004 CMP r0,#4
00033c 1a000070 BNE |L1.1284|
000340 ea000054 B |L1.1176|
;;;207 {
;;;208 case POLLACK:
;;;209 _iicStatus = iicSt;
|L1.836|
000344 e59f0328 LDR r0,|L1.1652|
000348 e5805000 STR r5,[r0,#0] ; _iicStatus
;;;210 break;
00034c ea00006d B |L1.1288|
;;;211
;;;212 case RDDATA:
;;;213 if((_iicDataCount--)==0)
|L1.848|
000350 e59f0314 LDR r0,|L1.1644|
000354 e5900000 LDR r0,[r0,#0] ; _iicDataCount
000358 e2401001 SUB r1,r0,#1
00035c e59f0308 LDR r0,|L1.1644|
000360 e5902000 LDR r2,[r0,#0] ; _iicDataCount
000364 e5801000 STR r1,[r0,#0] ; _iicDataCount
000368 e3520000 CMP r2,#0
00036c 1a000011 BNE |L1.952|
;;;214 {
;;;215 _iicData[_iicPt++] = rIICDS;
000370 e59f02f8 LDR r0,|L1.1648|
000374 e590100c LDR r1,[r0,#0xc]
000378 e59f02e4 LDR r0,|L1.1636|
00037c e5900000 LDR r0,[r0,#0] ; _iicPt
000380 e2802001 ADD r2,r0,#1
000384 e59f32d8 LDR r3,|L1.1636|
000388 e5832000 STR r2,[r3,#0] ; _iicPt
00038c e59f22d4 LDR r2,|L1.1640|
000390 e7c21000 STRB r1,[r2,r0]
;;;216 rIICSTAT = 0x90; //Stop MasRx condition
000394 e3a00090 MOV r0,#0x90
000398 e59f12d0 LDR r1,|L1.1648|
00039c e5810004 STR r0,[r1,#4]
;;;217 rIICCON = 0xaf; //Resumes IIC operation.
0003a0 e3a000af MOV r0,#0xaf
0003a4 e1c11000 BIC r1,r1,r0
0003a8 e5810000 STR r0,[r1,#0]
;;;218 Delay(1); //Wait until stop condtion is in effect.
0003ac e3a00001 MOV r0,#1
0003b0 ebfffffe BL Delay
;;;219 //Too long time...
;;;220 //The pending bit will not be set after issuing stop condition.
;;;221 break;
0003b4 ea000053 B |L1.1288|
;;;222 }
;;;223 _iicData[_iicPt++] = rIICDS; //The last data has to be read with no ack.
|L1.952|
0003b8 e59f02b0 LDR r0,|L1.1648|
0003bc e590100c LDR r1,[r0,#0xc]
0003c0 e59f029c LDR r0,|L1.1636|
0003c4 e5900000 LDR r0,[r0,#0] ; _iicPt
0003c8 e2802001 ADD r2,r0,#1
0003cc e59f3290 LDR r3,|L1.1636|
0003d0 e5832000 STR r2,[r3,#0] ; _iicPt
0003d4 e59f228c LDR r2,|L1.1640|
0003d8 e7c21000 STRB r1,[r2,r0]
;;;224 if((_iicDataCount)==0)
0003dc e59f0288 LDR r0,|L1.1644|
0003e0 e5900000 LDR r0,[r0,#0] ; _iicDataCount
0003e4 e3500000 CMP r0,#0
0003e8 1a000003 BNE |L1.1020|
;;;225 rIICCON = 0x2f; //Resumes IIC operation with NOACK.
0003ec e3a0002f MOV r0,#0x2f
0003f0 e59f1278 LDR r1,|L1.1648|
0003f4 e5810000 STR r0,[r1,#0]
0003f8 ea000002 B |L1.1032|
;;;226 else
;;;227 rIICCON = 0xaf; //Resumes IIC operation with ACK
|L1.1020|
0003fc e3a000af MOV r0,#0xaf
000400 e59f1268 LDR r1,|L1.1648|
000404 e5810000 STR r0,[r1,#0]
;;;228 break;
|L1.1032|
000408 ea00003e B |L1.1288|
;;;229
;;;230 case WRDATA:
;;;231 if((_iicDataCount--)==0)
|L1.1036|
00040c e59f0258 LDR r0,|L1.1644|
000410 e5900000 LDR r0,[r0,#0] ; _iicDataCount
000414 e2401001 SUB r1,r0,#1
000418 e59f024c LDR r0,|L1.1644|
00041c e5902000 LDR r2,[r0,#0] ; _iicDataCount
000420 e5801000 STR r1,[r0,#0] ; _iicDataCount
000424 e3520000 CMP r2,#0
000428 1a000008 BNE |L1.1104|
;;;232 {
;;;233 rIICSTAT = 0xd0; //Stop MasTx condition, ACK flag clear
00042c e3a000d0 MOV r0,#0xd0
000430 e59f1238 LDR r1,|L1.1648|
000434 e5810004 STR r0,[r1,#4]
;;;234 rIICCON = 0xaf; //Resumes IIC operation.
000438 e3a000af MOV r0,#0xaf
00043c e1c11000 BIC r1,r1,r0
000440 e5810000 STR r0,[r1,#0]
;;;235 Delay(1); //Wait until stop condtion is in effect.
000444 e3a00001 MOV r0,#1
000448 ebfffffe BL Delay
;;;236 //The pending bit will not be set after issuing stop condition.
;;;237 break;
00044c ea00002d B |L1.1288|
;;;238 }
;;;239 rIICDS = _iicData[_iicPt++]; //_iicData[0] has dummy.
|L1.1104|
000450 e59f020c LDR r0,|L1.1636|
000454 e5900000 LDR r0,[r0,#0] ; _iicPt
000458 e2801001 ADD r1,r0,#1
00045c e59f2200 LDR r2,|L1.1636|
000460 e5821000 STR r1,[r2,#0] ; _iicPt
000464 e59f11fc LDR r1,|L1.1640|
000468 e7d10000 LDRB r0,[r1,r0]
00046c e59f11fc LDR r1,|L1.1648|
000470 e581000c STR r0,[r1,#0xc]
;;;240 for(i=0;i<10;i++); //for setup time until rising edge of IICSCL
000474 e3a04000 MOV r4,#0
|L1.1144|
000478 e354000a CMP r4,#0xa
00047c 2a000001 BCS |L1.1160|
000480 e2844001 ADD r4,r4,#1
000484 eafffffb B |L1.1144|
;;;241 rIICCON = 0xaf; //resumes IIC operation.
|L1.1160|
000488 e3a000af MOV r0,#0xaf
00048c e59f11dc LDR r1,|L1.1648|
000490 e5810000 STR r0,[r1,#0]
;;;242 break;
000494 ea00001b B |L1.1288|
;;;243
;;;244 case SETRDADDR:
;;;245 // Uart_Printf("[ S%d ]",_iicDataCount);
;;;246 if((_iicDataCount--)==0)
|L1.1176|
000498 e59f01cc LDR r0,|L1.1644|
00049c e5900000 LDR r0,[r0,#0] ; _iicDataCount
0004a0 e2401001 SUB r1,r0,#1
0004a4 e59f01c0 LDR r0,|L1.1644|
0004a8 e5902000 LDR r2,[r0,#0] ; _iicDataCount
0004ac e5801000 STR r1,[r0,#0] ; _iicDataCount
0004b0 e3520000 CMP r2,#0
0004b4 1a000000 BNE |L1.1212|
;;;247 break; //IIC operation is stopped because of IICCON[4]
0004b8 ea000012 B |L1.1288|
;;;248 rIICDS = _iicData[_iicPt++];
|L1.1212|
0004bc e59f01a0 LDR r0,|L1.1636|
0004c0 e5900000 LDR r0,[r0,#0] ; _iicPt
0004c4 e2801001 ADD r1,r0,#1
0004c8 e59f2194 LDR r2,|L1.1636|
0004cc e5821000 STR r1,[r2,#0] ; _iicPt
0004d0 e59f1190 LDR r1,|L1.1640|
0004d4 e7d10000 LDRB r0,[r1,r0]
0004d8 e59f1190 LDR r1,|L1.1648|
0004dc e581000c STR r0,[r1,#0xc]
;;;249 for(i=0;i<10;i++); //For setup time until rising edge of IICSCL
0004e0 e3a04000 MOV r4,#0
|L1.1252|
0004e4 e354000a CMP r4,#0xa
0004e8 2a000001 BCS |L1.1268|
0004ec e2844001 ADD r4,r4,#1
0004f0 eafffffb B |L1.1252|
;;;250 rIICCON = 0xaf; //Resumes IIC operation.
|L1.1268|
0004f4 e3a000af MOV r0,#0xaf
0004f8 e59f1170 LDR r1,|L1.1648|
0004fc e5810000 STR r0,[r1,#0]
;;;251 break;
000500 ea000000 B |L1.1288|
;;;252
;;;253 default:
;;;254 break;
|L1.1284|
000504 e1a00000 NOP
;;;255 }
;;;256 }
|L1.1288|
000508 e8bd503f LDMFD sp!,{r0-r5,r12,lr}
00050c e25ef004 SUBS pc,lr,#4
ENDP
Test_Iic PROC
;;;88 void Test_Iic(void)
;;;89 {
000510 e92d4038 STMFD sp!,{r3-r5,lr}
;;;90 unsigned int i,j;
;;;91 static U8 data[256];
;;;92
;;;93 Uart_Printf("[ IIC Test(Interrupt) using KS24C080 ]\n");
000514 e28f0f58 ADR r0,|L1.1660|
000518 ebfffffe BL _printf
;;;94
;;;95 pISR_IIC = (unsigned)IicInt;
00051c e59f0180 LDR r0,|L1.1700|
000520 e59f1180 LDR r1,|L1.1704|
000524 e5810f8c STR r0,[r1,#0xf8c]
;;;96 rINTMSK &= ~(BIT_IIC);
000528 e59f0148 LDR r0,|L1.1656|
00052c e5900008 LDR r0,[r0,#8]
000530 e3c00680 BIC r0,r0,#0x8000000
000534 e59f113c LDR r1,|L1.1656|
000538 e5810008 STR r0,[r1,#8]
;;;97
;;;98 //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
;;;99 // If PCLK 50.7MHz, IICCLK = 3.17MHz, Tx Clock = 0.198MHz
;;;100 rIICCON = (1<<7) | (0<<6) | (1<<5) | (0xf);
00053c e3a000af MOV r0,#0xaf
000540 e2811644 ADD r1,r1,#0x4400000
000544 e5810000 STR r0,[r1,#0]
;;;101
;;;102 rIICADD = 0x10; //2410 slave address = [7:1]
000548 e3a00010 MOV r0,#0x10
00054c e1c11000 BIC r1,r1,r0
000550 e5810008 STR r0,[r1,#8]
;;;103 rIICSTAT = 0x10; //IIC bus data output enable(Rx/Tx)
000554 e3a00010 MOV r0,#0x10
000558 e1c11000 BIC r1,r1,r0
00055c e5810004 STR r0,[r1,#4]
;;;104
;;;105 Uart_Printf("Write test data into KS24C080\n");
000560 e28f0f51 ADR r0,|L1.1708|
000564 ebfffffe BL _printf
;;;106
;;;107 for(i=0;i<256;i++)
000568 e3a04000 MOV r4,#0
|L1.1388|
00056c e3540f40 CMP r4,#0x100
000570 2a000007 BCS |L1.1428|
000574 ea000001 B |L1.1408|
|L1.1400|
000578 e2844001 ADD r4,r4,#1
00057c eafffffa B |L1.1388|
;;;108 Wr24C080(0xa0,(U8)i,i); // 7bit address format : address(device addr)+data(word addr)+data
|L1.1408|
000580 e20420ff AND r2,r4,#0xff
000584 e20410ff AND r1,r4,#0xff
000588 e3a000a0 MOV r0,#0xa0
00058c ebfffffe BL Wr24C080
000590 eafffff8 B |L1.1400|
;;;109
;;;110 for(i=0;i<256;i++)
|L1.1428|
000594 e3a04000 MOV r4,#0
|L1.1432|
000598 e3540f40 CMP r4,#0x100
00059c 2a000006 BCS |L1.1468|
0005a0 ea000001 B |L1.1452|
|L1.1444|
0005a4 e2844001 ADD r4,r4,#1
0005a8 eafffffa B |L1.1432|
;;;111 data[i] = 0;
|L1.1452|
0005ac e3a00000 MOV r0,#0
0005b0 e59f1114 LDR r1,|L1.1740|
0005b4 e7c10004 STRB r0,[r1,r4]
0005b8 eafffff9 B |L1.1444|
;;;112
;;;113 Uart_Printf("Read test data from KS24C080\n");
|L1.1468|
0005bc e28f0f43 ADR r0,|L1.1744|
0005c0 ebfffffe BL _printf
;;;114
;;;115 for(i=0;i<256;i++)
0005c4 e3a04000 MOV r4,#0
|L1.1480|
0005c8 e3540f40 CMP r4,#0x100
0005cc 2a000008 BCS |L1.1524|
0005d0 ea000001 B |L1.1500|
|L1.1492|
0005d4 e2844001 ADD r4,r4,#1
0005d8 eafffffa B |L1.1480|
;;;116 Rd24C080(0xa0,(U8)i,&(data[i])); // 7bit address format : address(device addr)+data(word addr)+data
|L1.1500|
0005dc e59f00e8 LDR r0,|L1.1740|
0005e0 e0802004 ADD r2,r0,r4
0005e4 e20410ff AND r1,r4,#0xff
0005e8 e3a000a0 MOV r0,#0xa0
0005ec ebfffffe BL Rd24C080
0005f0 eafffff7 B |L1.1492|
;;;117
;;;118 //Line changed 0 ~ f
;;;119 for(i=0;i<16;i++)
|L1.1524|
0005f4 e3a04000 MOV r4,#0
|L1.1528|
0005f8 e3540010 CMP r4,#0x10
0005fc 2a000011 BCS |L1.1608|
000600 ea000001 B |L1.1548|
|L1.1540|
000604 e2844001 ADD r4,r4,#1
000608 eafffffa B |L1.1528|
;;;120 {
;;;121 for(j=0;j<16;j++)
|L1.1548|
00060c e3a05000 MOV r5,#0
|L1.1552|
000610 e3550010 CMP r5,#0x10
000614 2a000008 BCS |L1.1596|
000618 ea000001 B |L1.1572|
|L1.1564|
00061c e2855001 ADD r5,r5,#1
000620 eafffffa B |L1.1552|
;;;122 Uart_Printf("%2x ",data[i*16+j]);
|L1.1572|
000624 e0850204 ADD r0,r5,r4,LSL #4
000628 e59f209c LDR r2,|L1.1740|
00062c e7d21000 LDRB r1,[r2,r0]
000630 e28f00b8 ADR r0,|L1.1776|
000634 ebfffffe BL _printf
000638 eafffff7 B |L1.1564|
;;;123 Uart_Printf("\n");
|L1.1596|
00063c e28f00a8 ADR r0,|L1.1772|
000640 ebfffffe BL _printf
;;;124 }
000644 eaffffee B |L1.1540|
;;;125 rINTMSK |= BIT_IIC;
|L1.1608|
000648 e59f0028 LDR r0,|L1.1656|
00064c e5900008 LDR r0,[r0,#8]
000650 e3800680 ORR r0,r0,#0x8000000
000654 e59f101c LDR r1,|L1.1656|
000658 e5810008 STR r0,[r1,#8]
;;;126 }
00065c e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.1632|
000660 00000228 DCD ||.bss$2|| + 552
|L1.1636|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -