📄 bsp_i2c.lst
字号:
\ In segment CODE, align 4, keep-with-next
126 void I2C_Init (void)
127 {
\ I2C_Init:
\ 00000000 00402DE9 PUSH {LR}
128 CPU_INT32U pinsel;
129
130
131 VICIntSelect &= ~(1 << VIC_I2C0); /* Configure the I2C interrupt as an IRQ source */
\ 00000004 F300E0E3 MVN R0,#+243
\ 00000008 F00EC0E3 BIC R0,R0,#0xF00
\ 0000000C F310E0E3 MVN R1,#+243
\ 00000010 F01EC1E3 BIC R1,R1,#0xF00
\ 00000014 001091E5 LDR R1,[R1, #+0]
\ 00000018 801FD1E3 BICS R1,R1,#0x200
\ 0000001C 001080E5 STR R1,[R0, #+0]
132 VICVectAddr9 = (CPU_INT32U)I2C_ISR_Handler; /* Set the vector address */
\ 00000020 DB00E0E3 MVN R0,#+219
\ 00000024 E00EC0E3 BIC R0,R0,#0xE00
\ 00000028 78109FE5 LDR R1,??I2C_Init_0 ;; I2C_ISR_Handler
\ 0000002C 001080E5 STR R1,[R0, #+0]
133 VICIntEnClear = (1 << VIC_I2C0); /* Disable the interrupt source */
\ 00000030 EB00E0E3 MVN R0,#+235
\ 00000034 F00EC0E3 BIC R0,R0,#0xF00
\ 00000038 801FA0E3 MOV R1,#+512
\ 0000003C 001080E5 STR R1,[R0, #+0]
134
135 pinsel = PINSEL1;
\ 00000040 4E02A0E3 MOV R0,#-536870908
\ 00000044 B00B80E3 ORR R0,R0,#0x2C000
\ 00000048 000090E5 LDR R0,[R0, #+0]
136 pinsel &= 0xFC3FFFFF;
\ 0000004C F007D0E3 BICS R0,R0,#0x3C00000
137 pinsel |= 0x01400000;
\ 00000050 500790E3 ORRS R0,R0,#0x1400000
138 PINSEL1 = pinsel;
\ 00000054 4E12A0E3 MOV R1,#-536870908
\ 00000058 B01B81E3 ORR R1,R1,#0x2C000
\ 0000005C 000081E5 STR R0,[R1, #+0]
139
140 I20CONCLR = 0x006C; /* Clear flags */
\ 00000060 ........ LDR R0,??DataTable66 ;; 0xffffffffe001c018
\ 00000064 6C10A0E3 MOV R1,#+108
\ 00000068 001080E5 STR R1,[R0, #+0]
141
142 I20SCLH = 0x00F0;
\ 0000006C 38009FE5 LDR R0,??I2C_Init_0+0x4 ;; 0xffffffffe001c010
\ 00000070 F010A0E3 MOV R1,#+240
\ 00000074 001080E5 STR R1,[R0, #+0]
143 I20SCLL = 0x0160;
\ 00000078 30009FE5 LDR R0,??I2C_Init_0+0x8 ;; 0xffffffffe001c014
\ 0000007C 581FA0E3 MOV R1,#+352
\ 00000080 001080E5 STR R1,[R0, #+0]
144
145 I2C_SemWait = OSSemCreate(0);
\ 00000084 0000A0E3 MOV R0,#+0
\ 00000088 ........ _BLF OSSemCreate,??OSSemCreate??rA
\ 0000008C ........ LDR R1,??DataTable65 ;; I2C_SemWait
\ 00000090 000081E5 STR R0,[R1, #+0]
146 I2C_SemBusy = OSSemCreate(1);
\ 00000094 0100A0E3 MOV R0,#+1
\ 00000098 ........ _BLF OSSemCreate,??OSSemCreate??rA
\ 0000009C ........ LDR R1,??DataTable28 ;; I2C_SemBusy
\ 000000A0 000081E5 STR R0,[R1, #+0]
147 }
\ 000000A4 0080BDE8 POP {PC} ;; return
\ ??I2C_Init_0:
\ 000000A8 ........ DC32 I2C_ISR_Handler
\ 000000AC 10C001E0 DC32 0xffffffffe001c010
\ 000000B0 14C001E0 DC32 0xffffffffe001c014
148
149 /*
150 *********************************************************************************************************
151 * I2C_Read()
152 *
153 * Description : This function reads from the I2C bus.
154 *
155 * Arguements : p_buf is a pointer to the buffer into which the bytes will be stored
156 * count is the number of bytes to read
157 *
158 * Returns : None
159 *********************************************************************************************************
160 */
161
\ In segment CODE, align 4, keep-with-next
162 void I2C_Read (CPU_INT08U *p_buf, CPU_INT08U count)
163 {
\ I2C_Read:
\ 00000000 30402DE9 PUSH {R4,R5,LR}
\ 00000004 04D04DE2 SUB SP,SP,#+4
\ 00000008 0040B0E1 MOVS R4,R0
\ 0000000C 0150B0E1 MOVS R5,R1
164 CPU_INT08U err;
165
166
167 OSSemPend(I2C_SemBusy, 0, &err); /* Wait until I2C is free */
\ 00000010 0D20B0E1 MOVS R2,SP
\ 00000014 0010A0E3 MOV R1,#+0
\ 00000018 ........ LDR R0,??DataTable28 ;; I2C_SemBusy
\ 0000001C 000090E5 LDR R0,[R0, #+0]
\ 00000020 ........ _BLF OSSemPend,??OSSemPend??rA
168
169 I20CONCLR = I2CON_I2EN
170 | I2CON_STA
171 | I2CON_SI
172 | I2CON_AA;
\ 00000024 ........ LDR R0,??DataTable66 ;; 0xffffffffe001c018
\ 00000028 6C10A0E3 MOV R1,#+108
\ 0000002C 001080E5 STR R1,[R0, #+0]
173
174 I20CONSET = I2CON_I2EN;
\ 00000030 E004A0E3 MOV R0,#-536870912
\ 00000034 700B80E3 ORR R0,R0,#0x1C000
\ 00000038 4010A0E3 MOV R1,#+64
\ 0000003C 001080E5 STR R1,[R0, #+0]
175
176 I2C_Address = (PCA9532_ADDRESS | 0x01); /* Set lower bit of address */
\ 00000040 ........ LDR R0,??DataTable29 ;; I2C_Address
\ 00000044 C110A0E3 MOV R1,#+193
\ 00000048 0010C0E5 STRB R1,[R0, #+0]
177 I2C_BufPtr = p_buf;
\ 0000004C ........ LDR R0,??DataTable61 ;; I2C_BufPtr
\ 00000050 004080E5 STR R4,[R0, #+0]
178 I2C_Count = count;
\ 00000054 ........ LDR R0,??DataTable63 ;; I2C_Count
\ 00000058 0050C0E5 STRB R5,[R0, #+0]
179
180 I20CONSET = I2CON_STA
181 | I2CON_AA;
\ 0000005C E004A0E3 MOV R0,#-536870912
\ 00000060 700B80E3 ORR R0,R0,#0x1C000
\ 00000064 2410A0E3 MOV R1,#+36
\ 00000068 001080E5 STR R1,[R0, #+0]
182
183
184 VICIntEnable = (1 << VIC_I2C0); /* Enable the interrupt source */
\ 0000006C EF00E0E3 MVN R0,#+239
\ 00000070 F00EC0E3 BIC R0,R0,#0xF00
\ 00000074 801FA0E3 MOV R1,#+512
\ 00000078 001080E5 STR R1,[R0, #+0]
185 OSSemPend(I2C_SemWait, 0, &err); /* Wait until complete */
\ 0000007C 0D20B0E1 MOVS R2,SP
\ 00000080 0010A0E3 MOV R1,#+0
\ 00000084 ........ LDR R0,??DataTable65 ;; I2C_SemWait
\ 00000088 000090E5 LDR R0,[R0, #+0]
\ 0000008C ........ _BLF OSSemPend,??OSSemPend??rA
186
187 OSSemPost(I2C_SemBusy); /* Free I2C */
\ 00000090 ........ LDR R0,??DataTable28 ;; I2C_SemBusy
\ 00000094 000090E5 LDR R0,[R0, #+0]
\ 00000098 ........ _BLF OSSemPost,??OSSemPost??rA
188 }
\ 0000009C 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning
\ 000000A0 3080BDE8 POP {R4,R5,PC} ;; return
189
190 /*
191 *********************************************************************************************************
192 * I2C_ReadReg()
193 *
194 * Description : This function reads a register on an I2C device.
195 *
196 * Arguements : p_buf is a pointer to the buffer into which the bytes will be stored
197 * count is the number of bytes to read
198 * reg is the register to read
199 *
200 * Returns : None
201 *********************************************************************************************************
202 */
203
\ In segment CODE, align 4, keep-with-next
204 void I2C_ReadReg (CPU_INT08U *p_buf, CPU_INT08U count, CPU_INT08U reg)
205 {
\ I2C_ReadReg:
\ 00000000 34402DE9 PUSH {R2,R4,R5,LR}
\ 00000004 04D04DE2 SUB SP,SP,#+4
\ 00000008 0040B0E1 MOVS R4,R0
\ 0000000C 0150B0E1 MOVS R5,R1
206 CPU_INT08U err;
207
208
209 OSSemPend(I2C_SemBusy, 0, &err); /* Wait until I2C is free */
\ 00000010 0D20B0E1 MOVS R2,SP
\ 00000014 0010A0E3 MOV R1,#+0
\ 00000018 ........ LDR R0,??DataTable28 ;; I2C_SemBusy
\ 0000001C 000090E5 LDR R0,[R0, #+0]
\ 00000020 ........ _BLF OSSemPend,??OSSemPend??rA
210
211
212
213 I20CONCLR = I2CON_I2EN
214 | I2CON_STA
215 | I2CON_SI
216 | I2CON_AA;
\ 00000024 ........ LDR R0,??DataTable66 ;; 0xffffffffe001c018
\ 00000028 6C10A0E3 MOV R1,#+108
\ 0000002C 001080E5 STR R1,[R0, #+0]
217
218 I20CONSET = I2CON_I2EN;
\ 00000030 E004A0E3 MOV R0,#-536870912
\ 00000034 700B80E3 ORR R0,R0,#0x1C000
\ 00000038 4010A0E3 MOV R1,#+64
\ 0000003C 001080E5 STR R1,[R0, #+0]
219
220 I2C_Address = (PCA9532_ADDRESS & 0xFE); /* Clear lower bit of address */
\ 00000040 ........ LDR R0,??DataTable29 ;; I2C_Address
\ 00000044 C010A0E3 MOV R1,#+192
\ 00000048 0010C0E5 STRB R1,[R0, #+0]
221 I2C_BufPtr = ®
\ 0000004C ........ LDR R0,??DataTable61 ;; I2C_BufPtr
\ 00000050 04108DE2 ADD R1,SP,#+4
\ 00000054 001080E5 STR R1,[R0, #+0]
222 I2C_Count = 1;
\ 00000058 ........ LDR R0,??DataTable63 ;; I2C_Count
\ 0000005C 0110A0E3 MOV R1,#+1
\ 00000060 0010C0E5 STRB R1,[R0, #+0]
223
224 I20CONSET = I2CON_STA
225 | I2CON_AA;
\ 00000064 E004A0E3 MOV R0,#-536870912
\ 00000068 700B80E3 ORR R0,R0,#0x1C000
\ 0000006C 2410A0E3 MOV R1,#+36
\ 00000070 001080E5 STR R1,[R0, #+0]
226
227 VICIntEnable = (1 << VIC_I2C0); /* Enable the interrupt source */
\ 00000074 EF00E0E3 MVN R0,#+239
\ 00000078 F00EC0E3 BIC R0,R0,#0xF00
\ 0000007C 801FA0E3 MOV R1,#+512
\ 00000080 001080E5 STR R1,[R0, #+0]
228 OSSemPend(I2C_SemWait, 0, &err); /* Wait until complete */
\ 00000084 0D20B0E1 MOVS R2,SP
\ 00000088 0010A0E3 MOV R1,#+0
\ 0000008C ........ LDR R0,??DataTable65 ;; I2C_SemWait
\ 00000090 000090E5 LDR R0,[R0, #+0]
\ 00000094 ........ _BLF OSSemPend,??OSSemPend??rA
229
230
231
232 I20CONCLR = I2CON_I2EN
233 | I2CON_STA
234 | I2CON_SI
235 | I2CON_AA;
\ 00000098 ........ LDR R0,??DataTable66 ;; 0xffffffffe001c018
\ 0000009C 6C10A0E3 MOV R1,#+108
\ 000000A0 001080E5 STR R1,[R0, #+0]
236
237 I20CONSET = I2CON_I2EN;
\ 000000A4 E004A0E3 MOV R0,#-536870912
\ 000000A8 700B80E3 ORR R0,R0,#0x1C000
\ 000000AC 4010A0E3 MOV R1,#+64
\ 000000B0 001080E5 STR R1,[R0, #+0]
238
239 I2C_Address = (PCA9532_ADDRESS | 0x01); /* Set lower bit of address */
\ 000000B4 ........ LDR R0,??DataTable29 ;; I2C_Address
\ 000000B8 C110A0E3 MOV R1,#+193
\ 000000BC 0010C0E5 STRB R1,[R0, #+0]
240 I2C_BufPtr = p_buf;
\ 000000C0 ........ LDR R0,??DataTable61 ;; I2C_BufPtr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -