📄 ecp_i2c_hw.lst
字号:
129 0000C0
; w/o offset
130 0000C0 C2437600 mov.b #0x00, &I2CDRB
; Return NULL
131 0000C4 0013 reti
132 0000C6 TX_DATA
133 0000C6 0412 PUSH R4
134 0000C8 0512 PUSH R5
135 0000CA 0E12 PUSH R14
136 0000CC 0F12 PUSH R15
137 0000CE 5440.... mov.b I2COFFSET,R4
; Offset
in R4
138 0000D2 B012.... call #ProcessI2CRead
; Process the read
139 0000D6
; (R14 contains read
140 0000D6
; data)
141 0000D6 C24E7600 mov.b R14,&I2CDRB
; Load the
I2CDRB
142 0000DA C043.... mov.b #0x00, RXED_OFFSET
; Clr RX'ed offset fl
143 0000DE 3F41 POP R15
144 0000E0 3E41 POP R14
145 0000E2 3541 POP R5
146 0000E4 3441 POP R4
147 0000E6 0013 reti
; That's it
148 0000E8
149 0000E8 ; **********************************************
******************************
150 0000E8 ; Function: ValidateECPOffset
151 0000E8 ;
152 0000E8 ; Purpose: Thus function ensures that the
offset recieved from I2C is valid
153 0000E8 ;
154 0000E8 ; Inputs: R4 - Contains the offset to be
tested
155 0000E8 ;
156 0000E8 ; Returns: R15 - Zero if no error
157 0000E8 ; **********************************************
******************************
158 0000E8 0493 ValidateECPOffset cmp #0x00,R4
; Test offset
159 0000EA 0538 jl InvalidOffset
; Offset < 0?
160 0000EC 34901900 cmp #0x19,R4
; Test offset
161 0000F0 0234 jge InvalidOffset
; Offset > 0x019?
162 0000F2 0F43 clr R15
; Offset is valid
163 0000F4 ; bic.b #ECP_BAD_OFFSET,
ECPStatus ; Clear Error Flag
164 0000F4 3041 ret
; Return
165 0000F6 D0D3.... InvalidOffset bis.b #ECP_BAD_OFFSET,
ECPStatus ; Set Error Flag
166 0000FA 3041 ret
167 0000FC
168 0000FC ; **********************************************
******************************
169 0000FC ; Function: ValidateECPCMD
170 0000FC ;
171 0000FC ; Purpose: This function ensures that the
COMMAND received from I2C is valid
172 0000FC ; for the command register
173 0000FC ;
174 0000FC ; Inputs: R5 - Contains the offset to be
tested
175 0000FC ;
176 0000FC ; Returns: R15 - Zero if no error
177 0000FC ; **********************************************
******************************
178 0000FC 0593 ValidateECPCMD cmp #0x00,R5
; Test offset
179 0000FE 0538 jl InvalidOffset2
; Offset < 0?
180 000100 35900600 cmp #0x06,R5
; Test offset
181 000104 0234 jge InvalidOffset2
; Offset > 0x05?
182 000106 0F43 clr R15
; Offset is valid
183 000108 3041 ret
; Return
184 00010A E0D3.... InvalidOffset2 bis.b #ECP_BAD_COMMAND,
ECPStatus ; Set Error Flag
185 00010E 1F43 mov #0x0001,R15
; Indicate Error
186 000110 3041 ret
187 000112
188 000112 ; **********************************************
******************************
189 000112 ; Function: ProcessI2CRead
190 000112 ;
191 000112 ; Purpose: Carries out the I2C read command
recieved from the master
192 000112 ;
193 000112 ; Inputs: R4 - Contains the offset to the
register to read
194 000112 ;
195 000112 ; Returns: R14 - Read data
196 000112 ; R15 - Nonzero if offset is
bad
197 000112 ; **********************************************
******************************
198 000000 PUBLIC ProcessI2CRead
199 000112 B012.... ProcessI2CRead call #ValidateECPOffset
; Make sure offset is good
200 000116 0F93 cmp #0x0000,R15
; R15 = 0 good offset
201 000118 0224 jeq ReadOffsetValid
; Offset is okay
202 00011A 0E43 clr R14
; Offset is bad,
203 00011C 3041 ret
; abort
204 00011E 0412 ReadOffsetValid push R4
; Save R4
205 000120 0612 push R6
; Save R6
206 000122 0454 add R4,R4
; Multiply
offset by 2
207 000124 0054 add R4,PC
; Jump to
routine
208 000126 183C jmp ReadOffset0x00
209 000128 1A3C jmp ReadOffset0x01
210 00012A 1C3C jmp ReadOffset0x02
211 00012C 3C3C jmp ReadOffset0x03
212 00012E 3E3C jmp ReadOffset0x04
213 000130 403C jmp ReadOffset0x05
214 000132 443C jmp ReadOffset0x06
215 000134 4B3C jmp ReadOffset0x07
216 000136 4D3C jmp ReadOffset0x08
217 000138 513C jmp ReadOffset0x09
218 00013A 653C jmp ReadOffset0x0A
219 00013C 693C jmp ReadOffset0x0B
220 00013E 6B3C jmp ReadOffset0x0C
221 000140 6F3C jmp ReadOffset0x0D
222 000142 713C jmp ReadOffset0x0E
223 000144 753C jmp ReadOffset0x0F
224 000146 773C jmp ReadOffset0x10
225 000148 7B3C jmp ReadOffset0x11
226 00014A 883C jmp ReadOffset0x12
227 00014C 8B3C jmp ReadOffset0x13
228 00014E 8C3C jmp ReadOffset0x14
229 000150 8F3C jmp ReadOffset0x15
230 000152 9A3C jmp ReadOffset0x16
231 000154 A33C jmp ReadOffset0x17
232 000156 BA3C jmp ReadOffset0x18
233 000158
234 000158 ; Offset 0x00 - ECP Command Register
235 000158 5E40.... ReadOffset0x00 mov.b ECPCommand, R14
236 00015C D93C jmp I2CReadProcessed
; We are done
237 00015E ; Offset 0x01 - ECP Status Register
238 00015E 5E40.... ReadOffset0x01 mov.b ECPStatus, R14
239 000162 D63C jmp I2CReadProcessed
; We are done
240 000164 ; Offset 0x02 - Reset Output Register
241 000164 0E43 ReadOffset0x02 clr R14
; Clear return
242 000166 54422000 mov.b &P1IN,R4
; Read Port
1
243 00016A 74F03000 and.b #ETHERNET_RSTz+SYSTEM_RS
Tz,R4 ; Mask resets
244 00016E 4ED4 bis.b R4,R14
; Save Port 1
result
245 000170 54422800 mov.b &P2IN,R4
; Read Port
2
246 000174 74F08000 and.b #AIC33_RSTz, R4
; Mask Port 2 resets
247 000178 4ED4 bis.b R4,R14
; Save Port 2
result
248 00017A 76400500 mov.b #DC5_RSTz+TV_RSTz,R6
; Create mask bits
249 00017E 76D04000 bis.b #CPLD_RSTz,R6
; Add mask bits
250 000182 54421800 mov.b &P3IN,R4
; Read port
3
251 000186 44F6 and.b R6,R4
; Mask port 3
non-shifted
252 000188
; resets
253 000188 4ED4 bis.b R4,R14
; Save port 3
non-shifted
254 00018A
; results
255 00018A 54421800 mov.b &P3IN,R4
; Re-read
port 3
256 00018E 4411 rra.b R4
; 3 right shifts
257 000190 4411 rra.b R4
258 000192 4411 rra.b R4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -