📄 iic.txt
字号:
;;;407 //The last data has to be read with no ack.
;;;408 if((_iicDataCount)==0)
000848 e51f0170 LDR r0,|L1.1760|
00084c e5900000 LDR r0,[r0,#0] ; _iicDataCount
000850 e3500000 CMP r0,#0
000854 1a000003 BNE |L1.2152|
;;;409 rIICCON = 0x2f; //Resumes IIC operation with NOACK.
000858 e3a0002f MOV r0,#0x2f
00085c e3a01454 MOV r1,#0x54000000
000860 e5810000 STR r0,[r1,#0]
000864 ea000002 B |L1.2164|
;;;410 else
;;;411 rIICCON = 0xaf; //Resumes IIC operation with ACK
|L1.2152|
000868 e3a000af MOV r0,#0xaf
00086c e3a01454 MOV r1,#0x54000000
000870 e5810000 STR r0,[r1,#0]
;;;412 break;
|L1.2164|
000874 ea00003e B |L1.2420|
;;;413
;;;414 case WRDATA:
;;;415 if((_iicDataCount--)==0)
|L1.2168|
000878 e51f01a0 LDR r0,|L1.1760|
00087c e5900000 LDR r0,[r0,#0] ; _iicDataCount
000880 e2401001 SUB r1,r0,#1
000884 e51f01ac LDR r0,|L1.1760|
000888 e5902000 LDR r2,[r0,#0] ; _iicDataCount
00088c e5801000 STR r1,[r0,#0] ; _iicDataCount
000890 e3520000 CMP r2,#0
000894 1a000008 BNE |L1.2236|
;;;416 {
;;;417 rIICSTAT = 0xd0; //stop MasTx condition
000898 e3a000d0 MOV r0,#0xd0
00089c e3a01454 MOV r1,#0x54000000
0008a0 e5810004 STR r0,[r1,#4]
;;;418 rIICCON = 0xaf; //resumes IIC operation.
0008a4 e3a000af MOV r0,#0xaf
0008a8 e3a01454 MOV r1,#0x54000000
0008ac e5810000 STR r0,[r1,#0]
;;;419 Delay(1); //wait until stop condtion is in effect.
0008b0 e3a00001 MOV r0,#1
0008b4 ebfffffe BL Delay
;;;420 //The pending bit will not be set after issuing stop condition.
;;;421 break;
0008b8 ea00002d B |L1.2420|
;;;422 }
;;;423 rIICDS = _iicData[_iicPt++]; //_iicData[0] has dummy.
|L1.2236|
0008bc e51f01ec LDR r0,|L1.1752|
0008c0 e5900000 LDR r0,[r0,#0] ; _iicPt
0008c4 e2801001 ADD r1,r0,#1
0008c8 e51f21f8 LDR r2,|L1.1752|
0008cc e5821000 STR r1,[r2,#0] ; _iicPt
0008d0 e51f11fc LDR r1,|L1.1756|
0008d4 e7d10000 LDRB r0,[r1,r0]
0008d8 e3a01454 MOV r1,#0x54000000
0008dc e581000c STR r0,[r1,#0xc]
;;;424 for(i=0;i<10;i++); //for setup time until rising edge of IICSCL
0008e0 e3a04000 MOV r4,#0
|L1.2276|
0008e4 e354000a CMP r4,#0xa
0008e8 2a000001 BCS |L1.2292|
0008ec e2844001 ADD r4,r4,#1
0008f0 eafffffb B |L1.2276|
;;;425 rIICCON = 0xaf; //resumes IIC operation.
|L1.2292|
0008f4 e3a000af MOV r0,#0xaf
0008f8 e3a01454 MOV r1,#0x54000000
0008fc e5810000 STR r0,[r1,#0]
;;;426 break;
000900 ea00001b B |L1.2420|
;;;427
;;;428 case SETRDADDR:
;;;429 // Uart_Printf("[S%d]",_iicDataCount);
;;;430 if((_iicDataCount--)==0)
|L1.2308|
000904 e51f022c LDR r0,|L1.1760|
000908 e5900000 LDR r0,[r0,#0] ; _iicDataCount
00090c e2401001 SUB r1,r0,#1
000910 e51f0238 LDR r0,|L1.1760|
000914 e5902000 LDR r2,[r0,#0] ; _iicDataCount
000918 e5801000 STR r1,[r0,#0] ; _iicDataCount
00091c e3520000 CMP r2,#0
000920 1a000000 BNE |L1.2344|
;;;431 {
;;;432 break; //IIC operation is stopped because of IICCON[4]
000924 ea000012 B |L1.2420|
;;;433 }
;;;434 rIICDS = _iicData[_iicPt++];
|L1.2344|
000928 e51f0258 LDR r0,|L1.1752|
00092c e5900000 LDR r0,[r0,#0] ; _iicPt
000930 e2801001 ADD r1,r0,#1
000934 e51f2264 LDR r2,|L1.1752|
000938 e5821000 STR r1,[r2,#0] ; _iicPt
00093c e51f1268 LDR r1,|L1.1756|
000940 e7d10000 LDRB r0,[r1,r0]
000944 e3a01454 MOV r1,#0x54000000
000948 e581000c STR r0,[r1,#0xc]
;;;435 for(i=0;i<10;i++); //for setup time until rising edge of IICSCL
00094c e3a04000 MOV r4,#0
|L1.2384|
000950 e354000a CMP r4,#0xa
000954 2a000001 BCS |L1.2400|
000958 e2844001 ADD r4,r4,#1
00095c eafffffb B |L1.2384|
;;;436 rIICCON = 0xaf; //resumes IIC operation.
|L1.2400|
000960 e3a000af MOV r0,#0xaf
000964 e3a01454 MOV r1,#0x54000000
000968 e5810000 STR r0,[r1,#0]
;;;437 break;
00096c ea000000 B |L1.2420|
;;;438
;;;439 default:
;;;440 break;
|L1.2416|
000970 e1a00000 NOP
;;;441 }
;;;442 }
|L1.2420|
000974 e8bd8038 LDMFD sp!,{r3-r5,pc}
ENDP
Run_IicPoll PROC
;;;371 void Run_IicPoll(void)
;;;372 {
000978 e92d4008 STMFD sp!,{r3,lr}
;;;373 if(rIICCON & 0x10) //Tx/Rx Interrupt Enable
00097c e3a00454 MOV r0,#0x54000000
000980 e5900000 LDR r0,[r0,#0]
000984 e3100010 TST r0,#0x10
000988 0a000000 BEQ |L1.2448|
;;;374 IicPoll();
00098c ebfffffe BL IicPoll
;;;375 }
|L1.2448|
000990 e8bd8008 LDMFD sp!,{r3,pc}
ENDP
_Rd24C080 PROC
;;;344 void _Rd24C080(U32 slvAddr,U32 addr,U8 *data)
;;;345 {
000994 e92d4070 STMFD sp!,{r4-r6,lr}
000998 e1a04000 MOV r4,r0
00099c e1a05001 MOV r5,r1
0009a0 e1a06002 MOV r6,r2
;;;346 _iicMode = SETRDADDR;
0009a4 e3a00004 MOV r0,#4
0009a8 e51f12dc LDR r1,|L1.1748|
0009ac e5810000 STR r0,[r1,#0] ; _iicMode
;;;347 _iicPt = 0;
0009b0 e3a00000 MOV r0,#0
0009b4 e51f12e4 LDR r1,|L1.1752|
0009b8 e5810000 STR r0,[r1,#0] ; _iicPt
;;;348 _iicData[0] = (U8)addr;
0009bc e51f02e8 LDR r0,|L1.1756|
0009c0 e5c05000 STRB r5,[r0,#0] ; _iicData
;;;349 _iicDataCount = 1;
0009c4 e3a00001 MOV r0,#1
0009c8 e51f12f0 LDR r1,|L1.1760|
0009cc e5810000 STR r0,[r1,#0] ; _iicDataCount
;;;350
;;;351 rIICDS = slvAddr;
0009d0 e3a00454 MOV r0,#0x54000000
0009d4 e580400c STR r4,[r0,#0xc]
;;;352 rIICSTAT = 0xf0; //MasTx,Start
0009d8 e3a000f0 MOV r0,#0xf0
0009dc e3a01454 MOV r1,#0x54000000
0009e0 e5810004 STR r0,[r1,#4]
;;;353 //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;354 while(_iicDataCount!=-1)
0009e4 e1a00000 NOP
|L1.2536|
0009e8 e51f0310 LDR r0,|L1.1760|
0009ec e5900000 LDR r0,[r0,#0] ; _iicDataCount
0009f0 e3700001 CMN r0,#1
0009f4 0a000001 BEQ |L1.2560|
;;;355 Run_IicPoll();
0009f8 ebfffffe BL Run_IicPoll
0009fc eafffff9 B |L1.2536|
;;;356
;;;357 _iicMode = RDDATA;
|L1.2560|
000a00 e3a00003 MOV r0,#3
000a04 e51f1338 LDR r1,|L1.1748|
000a08 e5810000 STR r0,[r1,#0] ; _iicMode
;;;358 _iicPt = 0;
000a0c e3a00000 MOV r0,#0
000a10 e51f1340 LDR r1,|L1.1752|
000a14 e5810000 STR r0,[r1,#0] ; _iicPt
;;;359 _iicDataCount = 1;
000a18 e3a00001 MOV r0,#1
000a1c e51f1344 LDR r1,|L1.1760|
000a20 e5810000 STR r0,[r1,#0] ; _iicDataCount
;;;360
;;;361 rIICDS = slvAddr;
000a24 e3a00454 MOV r0,#0x54000000
000a28 e580400c STR r4,[r0,#0xc]
;;;362 rIICSTAT = 0xb0; //Master Rx,Start
000a2c e3a000b0 MOV r0,#0xb0
000a30 e3a01454 MOV r1,#0x54000000
000a34 e5810004 STR r0,[r1,#4]
;;;363 rIICCON = 0xaf; //Resumes IIC operation.
000a38 e3a000af MOV r0,#0xaf
000a3c e3a01454 MOV r1,#0x54000000
000a40 e5810000 STR r0,[r1,#0]
;;;364 while(_iicDataCount!=-1)
000a44 e1a00000 NOP
|L1.2632|
000a48 e51f0370 LDR r0,|L1.1760|
000a4c e5900000 LDR r0,[r0,#0] ; _iicDataCount
000a50 e3700001 CMN r0,#1
000a54 0a000001 BEQ |L1.2656|
;;;365 Run_IicPoll();
000a58 ebfffffe BL Run_IicPoll
000a5c eafffff9 B |L1.2632|
;;;366
;;;367 *data = _iicData[1];
|L1.2656|
000a60 e51f038c LDR r0,|L1.1756|
000a64 e5d00001 LDRB r0,[r0,#1] ; _iicData
000a68 e5c60000 STRB r0,[r6,#0]
;;;368 }
000a6c e8bd8070 LDMFD sp!,{r4-r6,pc}
ENDP
_Wr24C080 PROC
;;;306 void _Wr24C080(U32 slvAddr,U32 addr,U8 data)
;;;307 {
000a70 e92d4070 STMFD sp!,{r4-r6,lr}
000a74 e1a04000 MOV r4,r0
000a78 e1a05001 MOV r5,r1
000a7c e1a06002 MOV r6,r2
;;;308 _iicMode = WRDATA;
000a80 e3a00001 MOV r0,#1
000a84 e51f13b8 LDR r1,|L1.1748|
000a88 e5810000 STR r0,[r1,#0] ; _iicMode
;;;309 _iicPt = 0;
000a8c e3a00000 MOV r0,#0
000a90 e51f13c0 LDR r1,|L1.1752|
000a94 e5810000 STR r0,[r1,#0] ; _iicPt
;;;310 _iicData[0] = (U8)addr;
000a98 e51f03c4 LDR r0,|L1.1756|
000a9c e5c05000 STRB r5,[r0,#0] ; _iicData
;;;311 _iicData[1] = data;
000aa0 e51f03cc LDR r0,|L1.1756|
000aa4 e5c06001 STRB r6,[r0,#1] ; _iicData
;;;312 _iicDataCount = 2;
000aa8 e3a00002 MOV r0,#2
000aac e51f13d4 LDR r1,|L1.1760|
000ab0 e5810000 STR r0,[r1,#0] ; _iicDataCount
;;;313
;;;314 rIICDS = slvAddr; //0xa0
000ab4 e3a00454 MOV r0,#0x54000000
000ab8 e580400c STR r4,[r0,#0xc]
;;;315 //Master Tx mode, Start(Write), IIC-bus data output enable
;;;316 //Bus arbitration sucessful, Address as slave status flag Cleared,
;;;317 //Address zero status flag cleared, Last received bit is 0
;;;318 rIICSTAT = 0xf0;
000abc e3a000f0 MOV r0,#0xf0
000ac0 e3a01454 MOV r1,#0x54000000
000ac4 e5810004 STR r0,[r1,#4]
;;;319 //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;320 while(_iicDataCount!=-1)
000ac8 e1a00000 NOP
|L1.2764|
000acc e51f03f4 LDR r0,|L1.1760|
000ad0 e5900000 LDR r0,[r0,#0] ; _iicDataCount
000ad4 e3700001 CMN r0,#1
000ad8 0a000001 BEQ |L1.2788|
;;;321 Run_IicPoll();
000adc ebfffffe BL Run_IicPoll
000ae0 eafffff9 B |L1.2764|
;;;322
;;;323 _iicMode = POLLACK;
|L1.2788|
000ae4 e3a00002 MOV r0,#2
000ae8 e51f141c LDR r1,|L1.1748|
000aec e5810000 STR r0,[r1,#0] ; _iicMode
;;;324
;;;325 while(1)
000af0 e1a00000 NOP
|L1.2804|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -