📄 iic.txt
字号:
0009b8 e51f0350 LDR r0,|L1.1648|
0009bc e580400c STR r4,[r0,#0xc]
;;;352 rIICSTAT = 0xb0; //Master Rx,Start
0009c0 e3a000b0 MOV r0,#0xb0
0009c4 e51f135c LDR r1,|L1.1648|
0009c8 e5810004 STR r0,[r1,#4]
;;;353 rIICCON = 0xaf; //Resumes IIC operation.
0009cc e3a000af MOV r0,#0xaf
0009d0 e1c11000 BIC r1,r1,r0
0009d4 e5810000 STR r0,[r1,#0]
;;;354 while(_iicDataCount!=-1)
0009d8 e1a00000 NOP
|L1.2524|
0009dc e51f0378 LDR r0,|L1.1644|
0009e0 e5900000 LDR r0,[r0,#0] ; _iicDataCount
0009e4 e3700001 CMN r0,#1
0009e8 0a000001 BEQ |L1.2548|
;;;355 Run_IicPoll();
0009ec ebfffffe BL Run_IicPoll
0009f0 eafffff9 B |L1.2524|
;;;356
;;;357 *data = _iicData[1];
|L1.2548|
0009f4 e51f0394 LDR r0,|L1.1640|
0009f8 e5d00001 LDRB r0,[r0,#1] ; _iicData
0009fc e5c60000 STRB r0,[r6,#0]
;;;358 }
000a00 e8bd8070 LDMFD sp!,{r4-r6,pc}
ENDP
_Wr24C080 PROC
;;;296 void _Wr24C080(U32 slvAddr,U32 addr,U8 data)
;;;297 {
000a04 e92d4070 STMFD sp!,{r4-r6,lr}
000a08 e1a04000 MOV r4,r0
000a0c e1a05001 MOV r5,r1
000a10 e1a06002 MOV r6,r2
;;;298 _iicMode = WRDATA;
000a14 e3a00001 MOV r0,#1
000a18 e51f13c0 LDR r1,|L1.1632|
000a1c e5810000 STR r0,[r1,#0] ; _iicMode
;;;299 _iicPt = 0;
000a20 e3a00000 MOV r0,#0
000a24 e51f13c8 LDR r1,|L1.1636|
000a28 e5810000 STR r0,[r1,#0] ; _iicPt
;;;300 _iicData[0] = (U8)addr;
000a2c e51f03cc LDR r0,|L1.1640|
000a30 e5c05000 STRB r5,[r0,#0] ; _iicData
;;;301 _iicData[1] = data;
000a34 e51f03d4 LDR r0,|L1.1640|
000a38 e5c06001 STRB r6,[r0,#1] ; _iicData
;;;302 _iicDataCount = 2;
000a3c e3a00002 MOV r0,#2
000a40 e51f13dc LDR r1,|L1.1644|
000a44 e5810000 STR r0,[r1,#0] ; _iicDataCount
;;;303
;;;304 rIICDS = slvAddr; //0xa0
000a48 e51f03e0 LDR r0,|L1.1648|
000a4c e580400c STR r4,[r0,#0xc]
;;;305 //Master Tx mode, Start(Write), IIC-bus data output enable
;;;306 //Bus arbitration sucessful, Address as slave status flag Cleared,
;;;307 //Address zero status flag cleared, Last received bit is 0
;;;308 rIICSTAT = 0xf0;
000a50 e3a000f0 MOV r0,#0xf0
000a54 e51f13ec LDR r1,|L1.1648|
000a58 e5810004 STR r0,[r1,#4]
;;;309 //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;310 while(_iicDataCount!=-1)
000a5c e1a00000 NOP
|L1.2656|
000a60 e51f03fc LDR r0,|L1.1644|
000a64 e5900000 LDR r0,[r0,#0] ; _iicDataCount
000a68 e3700001 CMN r0,#1
000a6c 0a000001 BEQ |L1.2680|
;;;311 Run_IicPoll();
000a70 ebfffffe BL Run_IicPoll
000a74 eafffff9 B |L1.2656|
;;;312
;;;313 _iicMode = POLLACK;
|L1.2680|
000a78 e3a00002 MOV r0,#2
000a7c e51f1424 LDR r1,|L1.1632|
000a80 e5810000 STR r0,[r1,#0] ; _iicMode
;;;314
;;;315 while(1)
000a84 e1a00000 NOP
|L1.2696|
000a88 e1a00000 NOP
;;;316 {
;;;317 rIICDS = slvAddr;
000a8c e51f0424 LDR r0,|L1.1648|
000a90 e580400c STR r4,[r0,#0xc]
;;;318 _iicStatus = 0x100; //To check if _iicStatus is changed
000a94 e3a00f40 MOV r0,#0x100
000a98 e51f142c LDR r1,|L1.1652|
000a9c e5810000 STR r0,[r1,#0] ; _iicStatus
;;;319 rIICSTAT = 0xf0; //Master Tx, Start, Output Enable, Sucessful, Cleared, Cleared, 0
000aa0 e3a000f0 MOV r0,#0xf0
000aa4 e51f143c LDR r1,|L1.1648|
000aa8 e5810004 STR r0,[r1,#4]
;;;320 rIICCON = 0xaf; //Resumes IIC operation.
000aac e3a000af MOV r0,#0xaf
000ab0 e1c11000 BIC r1,r1,r0
000ab4 e5810000 STR r0,[r1,#0]
;;;321 while(_iicStatus==0x100)
000ab8 e1a00000 NOP
|L1.2748|
000abc e51f0450 LDR r0,|L1.1652|
000ac0 e5900000 LDR r0,[r0,#0] ; _iicStatus
000ac4 e3500f40 CMP r0,#0x100
000ac8 1a000001 BNE |L1.2772|
;;;322 Run_IicPoll();
000acc ebfffffe BL Run_IicPoll
000ad0 eafffff9 B |L1.2748|
;;;323
;;;324 if(!(_iicStatus & 0x1))
|L1.2772|
000ad4 e51f0468 LDR r0,|L1.1652|
000ad8 e5900000 LDR r0,[r0,#0] ; _iicStatus
000adc e3100001 TST r0,#1
000ae0 1a000000 BNE |L1.2792|
;;;325 break; //When ACK is received
000ae4 ea000000 B |L1.2796|
;;;326 }
|L1.2792|
000ae8 eaffffe6 B |L1.2696|
;;;327 rIICSTAT = 0xd0; //Master Tx condition, Stop(Write), Output Enable
|L1.2796|
000aec e3a000d0 MOV r0,#0xd0
000af0 e51f1488 LDR r1,|L1.1648|
000af4 e5810004 STR r0,[r1,#4]
;;;328 rIICCON = 0xaf; //Resumes IIC operation.
000af8 e3a000af MOV r0,#0xaf
000afc e1c11000 BIC r1,r1,r0
000b00 e5810000 STR r0,[r1,#0]
;;;329 Delay(1); //Wait until stop condtion is in effect.
000b04 e3a00001 MOV r0,#1
000b08 ebfffffe BL Delay
;;;330 //Write is completed.
;;;331 }
000b0c e8bd8070 LDMFD sp!,{r4-r6,pc}
ENDP
Test_Iic2 PROC
;;;263 void Test_Iic2(void)
;;;264 {
000b10 e92d4038 STMFD sp!,{r3-r5,lr}
;;;265 unsigned int i,j;
;;;266 static U8 data[256];
;;;267
;;;268 Uart_Printf("[ IIC Test(Polling) using KS24C080 ]\n");
000b14 e28f0f45 ADR r0,|L1.3120|
000b18 ebfffffe BL _printf
;;;269
;;;270 //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
;;;271 rIICCON = (1<<7) | (0<<6) | (1<<5) | (0xf);
000b1c e3a000af MOV r0,#0xaf
000b20 e51f14b8 LDR r1,|L1.1648|
000b24 e5810000 STR r0,[r1,#0]
;;;272
;;;273 rIICADD = 0x10; //2410 slave address = [7:1]
000b28 e3a00010 MOV r0,#0x10
000b2c e1c11000 BIC r1,r1,r0
000b30 e5810008 STR r0,[r1,#8]
;;;274 rIICSTAT = 0x10; //IIC bus data output enable(Rx/Tx)
000b34 e3a00010 MOV r0,#0x10
000b38 e1c11000 BIC r1,r1,r0
000b3c e5810004 STR r0,[r1,#4]
;;;275
;;;276 Uart_Printf("Write test data into KS24C080\n");
000b40 e59f0110 LDR r0,|L1.3160|
000b44 ebfffffe BL _printf
;;;277
;;;278 for(i=0;i<256;i++)
000b48 e3a04000 MOV r4,#0
|L1.2892|
000b4c e3540f40 CMP r4,#0x100
000b50 2a000008 BCS |L1.2936|
000b54 ea000001 B |L1.2912|
|L1.2904|
000b58 e2844001 ADD r4,r4,#1
000b5c eafffffa B |L1.2892|
;;;279 _Wr24C080(0xa0,(U8)i,255-i);
|L1.2912|
000b60 e26400ff RSB r0,r4,#0xff
000b64 e20020ff AND r2,r0,#0xff
000b68 e20410ff AND r1,r4,#0xff
000b6c e3a000a0 MOV r0,#0xa0
000b70 ebfffffe BL _Wr24C080
000b74 eafffff7 B |L1.2904|
;;;280 for(i=0;i<256;i++)
|L1.2936|
000b78 e3a04000 MOV r4,#0
|L1.2940|
000b7c e3540f40 CMP r4,#0x100
000b80 2a000006 BCS |L1.2976|
000b84 ea000001 B |L1.2960|
|L1.2952|
000b88 e2844001 ADD r4,r4,#1
000b8c eafffffa B |L1.2940|
;;;281 data[i] = 0;
|L1.2960|
000b90 e3a00000 MOV r0,#0
000b94 e59f10c0 LDR r1,|L1.3164|
000b98 e7c10004 STRB r0,[r1,r4]
000b9c eafffff9 B |L1.2952|
;;;282
;;;283 Uart_Printf("Read test data from KS24C080\n");
|L1.2976|
000ba0 e59f00b8 LDR r0,|L1.3168|
000ba4 ebfffffe BL _printf
;;;284 for(i=0;i<256;i++)
000ba8 e3a04000 MOV r4,#0
|L1.2988|
000bac e3540f40 CMP r4,#0x100
000bb0 2a000008 BCS |L1.3032|
000bb4 ea000001 B |L1.3008|
|L1.3000|
000bb8 e2844001 ADD r4,r4,#1
000bbc eafffffa B |L1.2988|
;;;285 _Rd24C080(0xa0,(U8)i,&(data[i]));
|L1.3008|
000bc0 e59f0094 LDR r0,|L1.3164|
000bc4 e0802004 ADD r2,r0,r4
000bc8 e20410ff AND r1,r4,#0xff
000bcc e3a000a0 MOV r0,#0xa0
000bd0 ebfffffe BL _Rd24C080
000bd4 eafffff7 B |L1.3000|
;;;286
;;;287 for(i=0;i<16;i++)
|L1.3032|
000bd8 e3a04000 MOV r4,#0
|L1.3036|
000bdc e3540010 CMP r4,#0x10
000be0 2a000011 BCS |L1.3116|
000be4 ea000001 B |L1.3056|
|L1.3048|
000be8 e2844001 ADD r4,r4,#1
000bec eafffffa B |L1.3036|
;;;288 {
;;;289 for(j=0;j<16;j++)
|L1.3056|
000bf0 e3a05000 MOV r5,#0
|L1.3060|
000bf4 e3550010 CMP r5,#0x10
000bf8 2a000008 BCS |L1.3104|
000bfc ea000001 B |L1.3080|
|L1.3072|
000c00 e2855001 ADD r5,r5,#1
000c04 eafffffa B |L1.3060|
;;;290 Uart_Printf("%2x ",data[i*16+j]);
|L1.3080|
000c08 e0850204 ADD r0,r5,r4,LSL #4
000c0c e59f2048 LDR r2,|L1.3164|
000c10 e7d21000 LDRB r1,[r2,r0]
000c14 e28f0048 ADR r0,|L1.3172|
000c18 ebfffffe BL _printf
000c1c eafffff7 B |L1.3072|
;;;291 Uart_Printf("\n");
|L1.3104|
000c20 e28f002c ADR r0,|L1.3156|
000c24 ebfffffe BL _printf
;;;292 }
000c28 eaffffee B |L1.3048|
;;;293 }
|L1.3116|
000c2c e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.3120|
000c30 4949205b DCB "[ II"
000c34 65542043 DCB "C Te"
000c38 50287473 DCB "st(P"
000c3c 696c6c6f DCB "olli"
000c40 2029676e DCB "ng) "
000c44 6e697375 DCB "usin"
000c48 534b2067 DCB "g KS"
000c4c 30433432 DCB "24C0"
000c50 5d203038 DCB "80 ]"
|L1.3156|
000c54 0000000a DCB "\n\0\0\0"
|L1.3160|
000c58 00000000 DCD |L1.1708|
|L1.3164|
000c5c 00000100 DCD ||.bss$2|| + 256
|L1.3168|
000c60 00000000 DCD |L1.1744|
|L1.3172|
000c64 20783225 DCB "%2x "
000c68 00000000 DCB "\0\0\0\0"
ENDP
AREA ||.data||, DATA, ALIGN=2
||.data$0||
func_iic_test
DCD Test_Iic
DCD ||.constdata$1||
DCD Test_Iic2
DCD ||.constdata$1||+0x13
DCD 0x00000000
DCD 0x00000000
AREA ||.constdata||, DATA, READONLY, ALIGN=0
||.constdata$1||
DCB 0x49,0x49,0x43,0x20
DCB 0x62,0x79,0x20,0x69
DCB 0x6e,0x74,0x65,0x72
DCB 0x72,0x75,0x70,0x74
DCB 0x20,0x20,0x00
DCB 0x49,0x49,0x43,0x20
DCB 0x62,0x79,0x20,0x70
DCB 0x6f,0x6c,0x6c,0x69
DCB 0x6e,0x67,0x20,0x20
DCB 0x20,0x20,0x00
AREA ||.bss||, NOINIT, ALIGN=2
||data@Test_Iic_0||
||.bss$2||
% 256
||data@Test_Iic2_0||
% 256
_iicData
% 32
_iicDataCount
% 4
_iicStatus
% 4
_iicMode
% 4
_iicPt
% 4
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -