📄 camproset.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 842]
; 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
;;;37 void Wr_CamIIC(U32 slvAddr, U32 addr, U8 data)
;;;38 {
|L1.0|
000000 e3a03001 MOV r3,#1
;;;39 _CAMiicMode = CAMWRDATA;
000004 e59fc4ec LDR r12,|L1.1272|
000008 e58c3000 STR r3,[r12,#0] ; _CAMiicMode
;;;40 _CAMiicPt = 0;
00000c e3a03000 MOV r3,#0
000010 e59fc4e4 LDR r12,|L1.1276|
000014 e58c3000 STR r3,[r12,#0] ; _CAMiicPt
;;;41 _CAMiicData[0] = (U8)addr;
000018 e59f34e0 LDR r3,|L1.1280|
00001c e5c31000 STRB r1,[r3,#0] ; _CAMiicData
;;;42 _CAMiicData[1] = data;
000020 e59f34d8 LDR r3,|L1.1280|
000024 e5c32001 STRB r2,[r3,#1] ; _CAMiicData
;;;43 _CAMiicDataCount = 2;
000028 e3a03002 MOV r3,#2
00002c e59fc4d0 LDR r12,|L1.1284|
000030 e58c3000 STR r3,[r12,#0] ; _CAMiicDataCount
;;;44
;;;45 rIICDS = slvAddr;
000034 e59f34cc LDR r3,|L1.1288|
000038 e583000c STR r0,[r3,#0xc]
;;;46 rIICSTAT = 0xf0; //Start Master TX Condition
00003c e3a030f0 MOV r3,#0xf0
000040 e59fc4c0 LDR r12,|L1.1288|
000044 e58c3004 STR r3,[r12,#4]
;;;47 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]
;;;48
;;;49 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|
;;;50
;;;51 }
000068 e12fff1e BX lr
ENDP
Rd_CamIIC PROC
;;;53 void Rd_CamIIC(U32 slvAddr,U32 addr,U8 *data)
;;;54 {
00006c e3a03004 MOV r3,#4
;;;55
;;;56 /*IIC Slave Addr Write + IIC Reg Addr Write */
;;;57 _CAMiicMode = CAMSETRDADDR;
000070 e59fc480 LDR r12,|L1.1272|
000074 e58c3000 STR r3,[r12,#0] ; _CAMiicMode
;;;58 _CAMiicPt = 0;
000078 e3a03000 MOV r3,#0
00007c e59fc478 LDR r12,|L1.1276|
000080 e58c3000 STR r3,[r12,#0] ; _CAMiicPt
;;;59 _CAMiicData[0] = (U8)addr;
000084 e59f3474 LDR r3,|L1.1280|
000088 e5c31000 STRB r1,[r3,#0] ; _CAMiicData
;;;60 _CAMiicDataCount = 1;
00008c e3a03001 MOV r3,#1
000090 e59fc46c LDR r12,|L1.1284|
000094 e58c3000 STR r3,[r12,#0] ; _CAMiicDataCount
;;;61
;;;62 rIICDS = slvAddr;
000098 e59f3468 LDR r3,|L1.1288|
00009c e583000c STR r0,[r3,#0xc]
;;;63 rIICSTAT = 0xf0; //Master Tx, Start
0000a0 e3a030f0 MOV r3,#0xf0
0000a4 e59fc45c LDR r12,|L1.1288|
0000a8 e58c3004 STR r3,[r12,#4]
;;;64 rIICCON = 0xef; //Resumes IIC operation.
0000ac e3a030ef MOV r3,#0xef
0000b0 e1ccc003 BIC r12,r12,r3
0000b4 e58c3000 STR r3,[r12,#0]
;;;65 //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;66 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|
;;;67
;;;68 _CAMiicMode = CAMRDDATA;
0000cc e3a03003 MOV r3,#3
0000d0 e59fc420 LDR r12,|L1.1272|
0000d4 e58c3000 STR r3,[r12,#0] ; _CAMiicMode
;;;69 _CAMiicPt = 0;
0000d8 e3a03000 MOV r3,#0
0000dc e59fc418 LDR r12,|L1.1276|
0000e0 e58c3000 STR r3,[r12,#0] ; _CAMiicPt
;;;70 _CAMiicDataCount = 1;
0000e4 e3a03001 MOV r3,#1
0000e8 e59fc414 LDR r12,|L1.1284|
0000ec e58c3000 STR r3,[r12,#0] ; _CAMiicDataCount
;;;71
;;;72 rIICDS = slvAddr;
0000f0 e59f3410 LDR r3,|L1.1288|
0000f4 e583000c STR r0,[r3,#0xc]
;;;73 rIICSTAT = 0xb0; //Master Rx,Start
0000f8 e3a030b0 MOV r3,#0xb0
0000fc e59fc404 LDR r12,|L1.1288|
000100 e58c3004 STR r3,[r12,#4]
;;;74 rIICCON = 0xef; //Resumes IIC operation.
000104 e3a030ef MOV r3,#0xef
000108 e1ccc003 BIC r12,r12,r3
00010c e58c3000 STR r3,[r12,#0]
;;;75
;;;76 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|
;;;77
;;;78 *data = _CAMiicData[1];
000124 e59f33d4 LDR r3,|L1.1280|
000128 e5d33001 LDRB r3,[r3,#1] ; _CAMiicData
00012c e5c23000 STRB r3,[r2,#0]
;;;79 }
000130 e12fff1e BX lr
ENDP
Cam_IICInt PROC
;;;82 void __irq Cam_IICInt(void)
;;;83 {
000134 e92d503f STMFD sp!,{r0-r5,r12,lr}
;;;84 U32 iicSt,i;
;;;85
;;;86 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]
;;;87 iicSt = rIICSTAT;
000158 e2810644 ADD r0,r1,#0x4400000
00015c e5900004 LDR r0,[r0,#4]
000160 e1a05000 MOV r5,r0
;;;88 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]
;;;89
;;;90 if(iicSt & 0x8){} //When bus arbitration is failed.
000174 e1a00000 NOP
;;;91 if(iicSt & 0x4){} //When a slave address is matched with IICADD
000178 e1a00000 NOP
;;;92 if(iicSt & 0x2){} //When a slave address is 0000000b
00017c e1a00000 NOP
;;;93 if(iicSt & 0x1){} //When ACK isn't received
000180 e1a00000 NOP
;;;94
;;;95 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|
;;;96 case CAMRDDATA:
;;;97 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|
;;;98 _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]
;;;99
;;;100 rIICSTAT = 0x90; //Stop MasRx condition
0001ec e3a00090 MOV r0,#0x90
0001f0 e59f1310 LDR r1,|L1.1288|
0001f4 e5810004 STR r0,[r1,#4]
;;;101 rIICCON = 0xef; //Resumes IIC operation.
0001f8 e3a000ef MOV r0,#0xef
0001fc e1c11000 BIC r1,r1,r0
000200 e5810000 STR r0,[r1,#0]
;;;102 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
;;;103 //The pending bit will not be set after issuing stop condition.
;;;104 break;
00020c ea00005b B |L1.896|
;;;105 }
;;;106 _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]
;;;107
;;;108 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|
;;;109 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|
;;;110 else
;;;111 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]
;;;112 break;
|L1.608|
000260 ea000046 B |L1.896|
;;;113 case CAMWRDATA:
;;;114 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|
;;;115 rIICSTAT = 0xd0; //stop MasTx condition
000284 e3a000d0 MOV r0,#0xd0
000288 e59f1278 LDR r1,|L1.1288|
00028c e5810004 STR r0,[r1,#4]
;;;116 rIICCON = 0xef; //resumes IIC operation.
000290 e3a000ef MOV r0,#0xef
000294 e1c11000 BIC r1,r1,r0
000298 e5810000 STR r0,[r1,#0]
;;;117 Delay(2); //wait until stop condtion is in effect. # need the time 2440:Delay(1), 24A0: Delay(2)
00029c e3a00002 MOV r0,#2
0002a0 ebfffffe BL Delay
;;;118 //The pending bit will not be set after issuing stop condition.
;;;119 break;
0002a4 ea000035 B |L1.896|
;;;120 }
;;;121 rIICDS = _CAMiicData[_CAMiicPt++]; //_iicData[0] has dummy.
|L1.680|
0002a8 e59f024c LDR r0,|L1.1276|
0002ac e5900000 LDR r0,[r0,#0] ; _CAMiicPt
0002b0 e2801001 ADD r1,r0,#1
0002b4 e59f2240 LDR r2,|L1.1276|
0002b8 e5821000 STR r1,[r2,#0] ; _CAMiicPt
0002bc e59f123c LDR r1,|L1.1280|
0002c0 e7d10000 LDRB r0,[r1,r0]
0002c4 e59f123c LDR r1,|L1.1288|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -