📄 camproset.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\camproset.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
Wr_CamIIC PROC
;;;36 void Wr_CamIIC(U32 slvAddr, U32 addr, U8 data)
;;;37 {
|L1.0|
000000 e3a03001 MOV r3,#1
;;;38 _CAMiicMode = CAMWRDATA;
000004 e59fc4ec LDR r12,|L1.1272|
000008 e58c3000 STR r3,[r12,#0] ; _CAMiicMode
;;;39 _CAMiicPt = 0;
00000c e3a03000 MOV r3,#0
000010 e59fc4e4 LDR r12,|L1.1276|
000014 e58c3000 STR r3,[r12,#0] ; _CAMiicPt
;;;40 _CAMiicData[0] = (U8)addr;
000018 e59f34e0 LDR r3,|L1.1280|
00001c e5c31000 STRB r1,[r3,#0] ; _CAMiicData
;;;41 _CAMiicData[1] = data;
000020 e59f34d8 LDR r3,|L1.1280|
000024 e5c32001 STRB r2,[r3,#1] ; _CAMiicData
;;;42 _CAMiicDataCount = 2;
000028 e3a03002 MOV r3,#2
00002c e59fc4d0 LDR r12,|L1.1284|
000030 e58c3000 STR r3,[r12,#0] ; _CAMiicDataCount
;;;43
;;;44 rIICDS = slvAddr;
000034 e59f34cc LDR r3,|L1.1288|
000038 e583000c STR r0,[r3,#0xc]
;;;45 rIICSTAT = 0xf0; //Start Master TX Condition
00003c e3a030f0 MOV r3,#0xf0
000040 e59fc4c0 LDR r12,|L1.1288|
000044 e58c3004 STR r3,[r12,#4]
;;;46 rIICCON = 0xef; //Clearing the pending bit isn't needed because the pending bit has been cleared.
000048 e3a030ef MOV r3,#0xef
00004c e1ccc003 BIC r12,r12,r3
000050 e58c3000 STR r3,[r12,#0]
;;;47
;;;48 while(_CAMiicDataCount!=-1);
000054 e1a00000 NOP
|L1.88|
000058 e59f34a4 LDR r3,|L1.1284|
00005c e5933000 LDR r3,[r3,#0] ; _CAMiicDataCount
000060 e3730001 CMN r3,#1
000064 1afffffb BNE |L1.88|
;;;49
;;;50 }
000068 e12fff1e BX lr
ENDP
Rd_CamIIC PROC
;;;52 void Rd_CamIIC(U32 slvAddr,U32 addr,U8 *data)
;;;53 {
00006c e3a03004 MOV r3,#4
;;;54
;;;55 /*IIC Slave Addr Write + IIC Reg Addr Write */
;;;56 _CAMiicMode = CAMSETRDADDR;
000070 e59fc480 LDR r12,|L1.1272|
000074 e58c3000 STR r3,[r12,#0] ; _CAMiicMode
;;;57 _CAMiicPt = 0;
000078 e3a03000 MOV r3,#0
00007c e59fc478 LDR r12,|L1.1276|
000080 e58c3000 STR r3,[r12,#0] ; _CAMiicPt
;;;58 _CAMiicData[0] = (U8)addr;
000084 e59f3474 LDR r3,|L1.1280|
000088 e5c31000 STRB r1,[r3,#0] ; _CAMiicData
;;;59 _CAMiicDataCount = 1;
00008c e3a03001 MOV r3,#1
000090 e59fc46c LDR r12,|L1.1284|
000094 e58c3000 STR r3,[r12,#0] ; _CAMiicDataCount
;;;60
;;;61 rIICDS = slvAddr;
000098 e59f3468 LDR r3,|L1.1288|
00009c e583000c STR r0,[r3,#0xc]
;;;62 rIICSTAT = 0xf0; //Master Tx, Start
0000a0 e3a030f0 MOV r3,#0xf0
0000a4 e59fc45c LDR r12,|L1.1288|
0000a8 e58c3004 STR r3,[r12,#4]
;;;63 rIICCON = 0xef; //Resumes IIC operation.
0000ac e3a030ef MOV r3,#0xef
0000b0 e1ccc003 BIC r12,r12,r3
0000b4 e58c3000 STR r3,[r12,#0]
;;;64 //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;65 while(_CAMiicDataCount!=-1);
0000b8 e1a00000 NOP
|L1.188|
0000bc e59f3440 LDR r3,|L1.1284|
0000c0 e5933000 LDR r3,[r3,#0] ; _CAMiicDataCount
0000c4 e3730001 CMN r3,#1
0000c8 1afffffb BNE |L1.188|
;;;66
;;;67 _CAMiicMode = CAMRDDATA;
0000cc e3a03003 MOV r3,#3
0000d0 e59fc420 LDR r12,|L1.1272|
0000d4 e58c3000 STR r3,[r12,#0] ; _CAMiicMode
;;;68 _CAMiicPt = 0;
0000d8 e3a03000 MOV r3,#0
0000dc e59fc418 LDR r12,|L1.1276|
0000e0 e58c3000 STR r3,[r12,#0] ; _CAMiicPt
;;;69 _CAMiicDataCount = 1;
0000e4 e3a03001 MOV r3,#1
0000e8 e59fc414 LDR r12,|L1.1284|
0000ec e58c3000 STR r3,[r12,#0] ; _CAMiicDataCount
;;;70
;;;71 rIICDS = slvAddr;
0000f0 e59f3410 LDR r3,|L1.1288|
0000f4 e583000c STR r0,[r3,#0xc]
;;;72 rIICSTAT = 0xb0; //Master Rx,Start
0000f8 e3a030b0 MOV r3,#0xb0
0000fc e59fc404 LDR r12,|L1.1288|
000100 e58c3004 STR r3,[r12,#4]
;;;73 rIICCON = 0xef; //Resumes IIC operation.
000104 e3a030ef MOV r3,#0xef
000108 e1ccc003 BIC r12,r12,r3
00010c e58c3000 STR r3,[r12,#0]
;;;74
;;;75 while(_CAMiicDataCount!=-1);
000110 e1a00000 NOP
|L1.276|
000114 e59f33e8 LDR r3,|L1.1284|
000118 e5933000 LDR r3,[r3,#0] ; _CAMiicDataCount
00011c e3730001 CMN r3,#1
000120 1afffffb BNE |L1.276|
;;;76
;;;77 *data = _CAMiicData[1];
000124 e59f33d4 LDR r3,|L1.1280|
000128 e5d33001 LDRB r3,[r3,#1] ; _CAMiicData
00012c e5c23000 STRB r3,[r2,#0]
;;;78 }
000130 e12fff1e BX lr
ENDP
Cam_IICInt PROC
;;;81 void __irq Cam_IICInt(void)
;;;82 {
000134 e92d503f STMFD sp!,{r0-r5,r12,lr}
;;;83 U32 iicSt,i;
;;;84
;;;85 ClearPending(BIT_IIC);
000138 e3a00680 MOV r0,#0x8000000
00013c e59f13c8 LDR r1,|L1.1292|
000140 e5810000 STR r0,[r1,#0]
000144 e1c10000 BIC r0,r1,r0
000148 e5900010 LDR r0,[r0,#0x10]
00014c e5810010 STR r0,[r1,#0x10]
000150 e1a00001 MOV r0,r1
000154 e5900010 LDR r0,[r0,#0x10]
;;;86 iicSt = rIICSTAT;
000158 e2810644 ADD r0,r1,#0x4400000
00015c e5900004 LDR r0,[r0,#4]
000160 e1a05000 MOV r5,r0
;;;87 rINTMSK |= BIT_IIC;
000164 e1a00001 MOV r0,r1
000168 e5900008 LDR r0,[r0,#8]
00016c e3800680 ORR r0,r0,#0x8000000
000170 e5810008 STR r0,[r1,#8]
;;;88
;;;89 if(iicSt & 0x8){} //When bus arbitration is failed.
000174 e1a00000 NOP
;;;90 if(iicSt & 0x4){} //When a slave address is matched with IICADD
000178 e1a00000 NOP
;;;91 if(iicSt & 0x2){} //When a slave address is 0000000b
00017c e1a00000 NOP
;;;92 if(iicSt & 0x1){} //When ACK isn't received
000180 e1a00000 NOP
;;;93
;;;94 switch(_CAMiicMode) {
000184 e59f036c LDR r0,|L1.1272|
000188 e5900000 LDR r0,[r0,#0] ; _CAMiicMode
00018c e3500001 CMP r0,#1
000190 0a000033 BEQ |L1.612|
000194 e3500003 CMP r0,#3
000198 0a000002 BEQ |L1.424|
00019c e3500004 CMP r0,#4
0001a0 1a000075 BNE |L1.892|
0001a4 ea000051 B |L1.752|
;;;95 case CAMRDDATA:
;;;96 if((_CAMiicDataCount--)==0) {
|L1.424|
0001a8 e59f0354 LDR r0,|L1.1284|
0001ac e5900000 LDR r0,[r0,#0] ; _CAMiicDataCount
0001b0 e2401001 SUB r1,r0,#1
0001b4 e59f0348 LDR r0,|L1.1284|
0001b8 e5902000 LDR r2,[r0,#0] ; _CAMiicDataCount
0001bc e5801000 STR r1,[r0,#0] ; _CAMiicDataCount
0001c0 e3520000 CMP r2,#0
0001c4 1a000011 BNE |L1.528|
;;;97 _CAMiicData[_CAMiicPt++] = rIICDS;
0001c8 e59f0338 LDR r0,|L1.1288|
0001cc e590100c LDR r1,[r0,#0xc]
0001d0 e59f0324 LDR r0,|L1.1276|
0001d4 e5900000 LDR r0,[r0,#0] ; _CAMiicPt
0001d8 e2802001 ADD r2,r0,#1
0001dc e59f3318 LDR r3,|L1.1276|
0001e0 e5832000 STR r2,[r3,#0] ; _CAMiicPt
0001e4 e59f2314 LDR r2,|L1.1280|
0001e8 e7c21000 STRB r1,[r2,r0]
;;;98
;;;99 rIICSTAT = 0x90; //Stop MasRx condition
0001ec e3a00090 MOV r0,#0x90
0001f0 e59f1310 LDR r1,|L1.1288|
0001f4 e5810004 STR r0,[r1,#4]
;;;100 rIICCON = 0xef; //Resumes IIC operation.
0001f8 e3a000ef MOV r0,#0xef
0001fc e1c11000 BIC r1,r1,r0
000200 e5810000 STR r0,[r1,#0]
;;;101 Delay(2); //Wait until stop condtion is in effect., Too long time... # need the time 2440:Delay(1), 24A0: Delay(2)
000204 e3a00002 MOV r0,#2
000208 ebfffffe BL Delay
;;;102 //The pending bit will not be set after issuing stop condition.
;;;103 break;
00020c ea00005b B |L1.896|
;;;104 }
;;;105 _CAMiicData[_CAMiicPt++] = rIICDS; //The last data has to be read with no ack.
|L1.528|
000210 e59f02f0 LDR r0,|L1.1288|
000214 e590100c LDR r1,[r0,#0xc]
000218 e59f02dc LDR r0,|L1.1276|
00021c e5900000 LDR r0,[r0,#0] ; _CAMiicPt
000220 e2802001 ADD r2,r0,#1
000224 e59f32d0 LDR r3,|L1.1276|
000228 e5832000 STR r2,[r3,#0] ; _CAMiicPt
00022c e59f22cc LDR r2,|L1.1280|
000230 e7c21000 STRB r1,[r2,r0]
;;;106
;;;107 if((_CAMiicDataCount)==0)
000234 e59f02c8 LDR r0,|L1.1284|
000238 e5900000 LDR r0,[r0,#0] ; _CAMiicDataCount
00023c e3500000 CMP r0,#0
000240 1a000003 BNE |L1.596|
;;;108 rIICCON = 0x6f; //Resumes IIC operation with NOACK in case of S5X532 Cameara
000244 e3a0006f MOV r0,#0x6f
000248 e59f12b8 LDR r1,|L1.1288|
00024c e5810000 STR r0,[r1,#0]
000250 ea000002 B |L1.608|
;;;109 else
;;;110 rIICCON = 0xef; //Resumes IIC operation with ACK
|L1.596|
000254 e3a000ef MOV r0,#0xef
000258 e59f12a8 LDR r1,|L1.1288|
00025c e5810000 STR r0,[r1,#0]
;;;111 break;
|L1.608|
000260 ea000046 B |L1.896|
;;;112 case CAMWRDATA:
;;;113 if((_CAMiicDataCount--)==0) {
|L1.612|
000264 e59f0298 LDR r0,|L1.1284|
000268 e5900000 LDR r0,[r0,#0] ; _CAMiicDataCount
00026c e2401001 SUB r1,r0,#1
000270 e59f028c LDR r0,|L1.1284|
000274 e5902000 LDR r2,[r0,#0] ; _CAMiicDataCount
000278 e5801000 STR r1,[r0,#0] ; _CAMiicDataCount
00027c e3520000 CMP r2,#0
000280 1a000008 BNE |L1.680|
;;;114 rIICSTAT = 0xd0; //stop MasTx condition
000284 e3a000d0 MOV r0,#0xd0
000288 e59f1278 LDR r1,|L1.1288|
00028c e5810004 STR r0,[r1,#4]
;;;115 rIICCON = 0xef; //resumes IIC operation.
000290 e3a000ef MOV r0,#0xef
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -