annotate src/testmode.asm @ 77:131e6dd9e201

BUGFIX: Potential bug to freeze the OSTC3 after battery change or update
author heinrichsweikamp
date Thu, 20 Feb 2014 10:12:45 +0100
parents 7815bf21d353
children 3274e87fd027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
heinrichsweikamp
parents:
diff changeset
1 ;=============================================================================
heinrichsweikamp
parents:
diff changeset
2 ;
heinrichsweikamp
parents:
diff changeset
3 ; File tesmode.asm
heinrichsweikamp
parents:
diff changeset
4 ;
heinrichsweikamp
parents:
diff changeset
5 ; Test Mode for Hardware check
heinrichsweikamp
parents:
diff changeset
6 ;
heinrichsweikamp
parents:
diff changeset
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
heinrichsweikamp
parents:
diff changeset
8 ;=============================================================================
heinrichsweikamp
parents:
diff changeset
9 ; HISTORY
heinrichsweikamp
parents:
diff changeset
10 ; 2012-10-31 : [mH] Creation
heinrichsweikamp
parents:
diff changeset
11
heinrichsweikamp
parents:
diff changeset
12 #include "ostc3.inc" ; Mandatory header
heinrichsweikamp
parents:
diff changeset
13 #include "shared_definitions.h" ; Mailbox from/to p2_deco.c
heinrichsweikamp
parents:
diff changeset
14 #include "start.inc"
heinrichsweikamp
parents:
diff changeset
15 #include "tft.inc"
heinrichsweikamp
parents:
diff changeset
16 #include "tft_outputs.inc"
heinrichsweikamp
parents:
diff changeset
17 #include "isr.inc"
heinrichsweikamp
parents:
diff changeset
18 #include "adc_lightsensor.inc"
heinrichsweikamp
parents:
diff changeset
19 #include "strings.inc"
heinrichsweikamp
parents:
diff changeset
20 #include "sleepmode.inc"
heinrichsweikamp
parents:
diff changeset
21 #include "wait.inc" ; speed_*
heinrichsweikamp
parents:
diff changeset
22 #include "mcp.inc" ; RX
heinrichsweikamp
parents:
diff changeset
23 #include "i2c.inc"
heinrichsweikamp
parents:
diff changeset
24 #include "surfmode.inc"
heinrichsweikamp
parents:
diff changeset
25 #include "math.inc"
heinrichsweikamp
parents:
diff changeset
26 #include "eeprom_rs232.inc"
67
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
27 #include "ms5541.inc"
0
heinrichsweikamp
parents:
diff changeset
28
heinrichsweikamp
parents:
diff changeset
29 extern compass
heinrichsweikamp
parents:
diff changeset
30 extern compass_filter
heinrichsweikamp
parents:
diff changeset
31 extern compass_filter_init
heinrichsweikamp
parents:
diff changeset
32 extern compass_reset_calibration
heinrichsweikamp
parents:
diff changeset
33 extern compass_add_calibration
heinrichsweikamp
parents:
diff changeset
34 extern compass_solve_calibration
heinrichsweikamp
parents:
diff changeset
35
heinrichsweikamp
parents:
diff changeset
36 testmode CODE
heinrichsweikamp
parents:
diff changeset
37
heinrichsweikamp
parents:
diff changeset
38 ;=============================================================================
heinrichsweikamp
parents:
diff changeset
39 ; Boot tasks for all modes
heinrichsweikamp
parents:
diff changeset
40 global testloop
67
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
41 testloop: ; Page1
0
heinrichsweikamp
parents:
diff changeset
42 call speed_normal
heinrichsweikamp
parents:
diff changeset
43 bcf no_sensor_int ; Sensor ISR
heinrichsweikamp
parents:
diff changeset
44
heinrichsweikamp
parents:
diff changeset
45 clrf CCP1CON ; stop PWM
heinrichsweikamp
parents:
diff changeset
46 bcf PORTC,2 ; Pull PWM output to GND
heinrichsweikamp
parents:
diff changeset
47 call TFT_boot ; Initialize TFT (includes clear screen)
heinrichsweikamp
parents:
diff changeset
48 call enable_ir ; Enable IR-Port
heinrichsweikamp
parents:
diff changeset
49 WIN_TOP .0
heinrichsweikamp
parents:
diff changeset
50 WIN_LEFT .0
heinrichsweikamp
parents:
diff changeset
51 WIN_FONT FT_SMALL
heinrichsweikamp
parents:
diff changeset
52 WIN_INVERT .0 ; Init new Wordprocessor
heinrichsweikamp
parents:
diff changeset
53 call TFT_standard_color
heinrichsweikamp
parents:
diff changeset
54 call TFT_Display_FadeIn
heinrichsweikamp
parents:
diff changeset
55
heinrichsweikamp
parents:
diff changeset
56 call I2C_init_compass
heinrichsweikamp
parents:
diff changeset
57 call I2C_init_accelerometer
heinrichsweikamp
parents:
diff changeset
58
heinrichsweikamp
parents:
diff changeset
59 ; Init compass/accel filtering value.
heinrichsweikamp
parents:
diff changeset
60 call I2C_RX_compass
heinrichsweikamp
parents:
diff changeset
61 call I2C_RX_accelerometer
heinrichsweikamp
parents:
diff changeset
62 call compass_filter_init
heinrichsweikamp
parents:
diff changeset
63
heinrichsweikamp
parents:
diff changeset
64 clrf timeout_counter2
heinrichsweikamp
parents:
diff changeset
65 clrf timeout_counter3
heinrichsweikamp
parents:
diff changeset
66 bcf premenu ; clear premenu flag
heinrichsweikamp
parents:
diff changeset
67 bcf menubit ; clear menu flag
heinrichsweikamp
parents:
diff changeset
68
heinrichsweikamp
parents:
diff changeset
69 bcf switch_left
heinrichsweikamp
parents:
diff changeset
70 bcf switch_right
heinrichsweikamp
parents:
diff changeset
71
heinrichsweikamp
parents:
diff changeset
72 testloop_loop:
heinrichsweikamp
parents:
diff changeset
73 btfss onesecupdate ; do every second tasks?
heinrichsweikamp
parents:
diff changeset
74 bra testloop_loop2 ; no, loop
heinrichsweikamp
parents:
diff changeset
75
heinrichsweikamp
parents:
diff changeset
76 ; One Second tasks
heinrichsweikamp
parents:
diff changeset
77 call speed_normal
heinrichsweikamp
parents:
diff changeset
78 call I2C_RX_compass ; Test Compass
heinrichsweikamp
parents:
diff changeset
79 call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
80 call compass_filter ; Filter Raw compass + accel readings.
heinrichsweikamp
parents:
diff changeset
81 banksel common
heinrichsweikamp
parents:
diff changeset
82
heinrichsweikamp
parents:
diff changeset
83 ; Make a second measure and filter, to show faster reactions.
heinrichsweikamp
parents:
diff changeset
84 call I2C_RX_compass ; Test Compass
heinrichsweikamp
parents:
diff changeset
85 call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
86 call compass_filter ; Filter Raw compass + accel readings.
heinrichsweikamp
parents:
diff changeset
87 call compass ; Do compass corrections.
heinrichsweikamp
parents:
diff changeset
88 banksel common
heinrichsweikamp
parents:
diff changeset
89
heinrichsweikamp
parents:
diff changeset
90 call TFT_update_raw_data
heinrichsweikamp
parents:
diff changeset
91 movlw .240
heinrichsweikamp
parents:
diff changeset
92 call timeout_testmode ; check timeout
heinrichsweikamp
parents:
diff changeset
93
heinrichsweikamp
parents:
diff changeset
94 bcf onesecupdate ; every second tasks done
heinrichsweikamp
parents:
diff changeset
95
heinrichsweikamp
parents:
diff changeset
96 testloop_loop2:
heinrichsweikamp
parents:
diff changeset
97 ; Tasks approx. every 50ms for all modes
heinrichsweikamp
parents:
diff changeset
98 bcf LEDg
heinrichsweikamp
parents:
diff changeset
99 btfsc vusb_in
heinrichsweikamp
parents:
diff changeset
100 bsf LEDg
heinrichsweikamp
parents:
diff changeset
101
heinrichsweikamp
parents:
diff changeset
102 ; Mode tasks
heinrichsweikamp
parents:
diff changeset
103 extern surfloop
heinrichsweikamp
parents:
diff changeset
104 btfsc switch_left
67
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
105 bra testloop2 ; Page 2
0
heinrichsweikamp
parents:
diff changeset
106
heinrichsweikamp
parents:
diff changeset
107 btfsc switch_right
heinrichsweikamp
parents:
diff changeset
108 goto compass_calibration_loop
heinrichsweikamp
parents:
diff changeset
109
heinrichsweikamp
parents:
diff changeset
110 btfsc sleepmode ; Sleepmode active?
67
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
111 bra testloop2 ; Page 2
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
112
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
113 bra testloop_loop ; loop testmode
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
114
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
115 testloop2: ; Page2
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
116 call speed_normal
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
117 bsf no_sensor_int ; disable sensor interrupt
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
118 call get_calibration_data ; Get calibration data from pressure sensor
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
119 banksel common ; get_calibration_data uses isr_backup
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
120 bcf no_sensor_int ; normal sensor interrupt mode
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
121
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
122 clrf CCP1CON ; stop PWM
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
123 bcf PORTC,2 ; Pull PWM output to GND
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
124 call TFT_boot ; Initialize TFT (includes clear screen)
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
125 WIN_TOP .0
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
126 WIN_LEFT .0
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
127 WIN_FONT FT_SMALL
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
128 WIN_INVERT .0 ; Init new Wordprocessor
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
129 call TFT_standard_color
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
130 call TFT_Display_FadeIn
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
131
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
132 clrf timeout_counter2
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
133 clrf timeout_counter3
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
134 bcf premenu ; clear premenu flag
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
135 bcf menubit ; clear menu flag
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
136
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
137 bcf switch_left
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
138 bcf switch_right
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
139
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
140 testloop2_loop:
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
141 btfss onesecupdate ; do every second tasks?
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
142 bra testloop2_loop2 ; no, loop
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
143
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
144 ; One Second tasks
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
145 call TFT_update_raw_data2
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
146 movlw .240
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
147 call timeout_testmode ; check timeout
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
148
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
149 bcf onesecupdate ; every second tasks done
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
150
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
151 testloop2_loop2:
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
152 ; Tasks approx. every 50ms for all modes
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
153 bcf LEDg
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
154 btfsc vusb_in
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
155 bsf LEDg
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
156
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
157 ; Mode tasks
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
158 btfsc switch_left
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
159 goto surfloop ; Exit
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
160
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
161 btfsc sleepmode ; Sleepmode active?
0
heinrichsweikamp
parents:
diff changeset
162 goto sleeploop ; Yes, switch into sleepmode!
heinrichsweikamp
parents:
diff changeset
163
67
7815bf21d353 second debug mode page
heinrichsweikamp
parents: 50
diff changeset
164 bra testloop2_loop ; loop testmode
0
heinrichsweikamp
parents:
diff changeset
165
heinrichsweikamp
parents:
diff changeset
166
heinrichsweikamp
parents:
diff changeset
167 global compass_calibration_loop
heinrichsweikamp
parents:
diff changeset
168 compass_calibration_loop: ; Compass calibration
heinrichsweikamp
parents:
diff changeset
169 bsf no_sensor_int ; No Sensor ISR
heinrichsweikamp
parents:
diff changeset
170 call I2C_init_accelerometer
heinrichsweikamp
parents:
diff changeset
171 call I2C_init_compass_fast
heinrichsweikamp
parents:
diff changeset
172 call TFT_ClearScreen
heinrichsweikamp
parents:
diff changeset
173
heinrichsweikamp
parents:
diff changeset
174 ; Mask
heinrichsweikamp
parents:
diff changeset
175 WIN_COLOR color_greenish
heinrichsweikamp
parents:
diff changeset
176 WIN_SMALL .16,.0
heinrichsweikamp
parents:
diff changeset
177 STRCPY_TEXT_PRINT tCompassMenu
heinrichsweikamp
parents:
diff changeset
178 call TFT_standard_color
heinrichsweikamp
parents:
diff changeset
179 WIN_SMALL .0,.215
heinrichsweikamp
parents:
diff changeset
180 STRCPY_TEXT_PRINT tExit
heinrichsweikamp
parents:
diff changeset
181
heinrichsweikamp
parents:
diff changeset
182 clrf timeout_counter2
heinrichsweikamp
parents:
diff changeset
183 clrf timeout_counter3
heinrichsweikamp
parents:
diff changeset
184
heinrichsweikamp
parents:
diff changeset
185 call speed_fastest
heinrichsweikamp
parents:
diff changeset
186 call I2C_RX_compass ; read compass
heinrichsweikamp
parents:
diff changeset
187 call I2C_RX_accelerometer ; read Accelerometer
heinrichsweikamp
parents:
diff changeset
188 call compass_filter_init ; set DX_f values
heinrichsweikamp
parents:
diff changeset
189 call compass_reset_calibration ; Reset CX_f values
heinrichsweikamp
parents:
diff changeset
190 banksel common
heinrichsweikamp
parents:
diff changeset
191
heinrichsweikamp
parents:
diff changeset
192 compass_calibration_loop2:
heinrichsweikamp
parents:
diff changeset
193 call I2C_RX_compass ; read compass
heinrichsweikamp
parents:
diff changeset
194 call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
195 call compass_filter ; Filter compass raw data
heinrichsweikamp
parents:
diff changeset
196 banksel common
heinrichsweikamp
parents:
diff changeset
197
heinrichsweikamp
parents:
diff changeset
198 ; Twice
heinrichsweikamp
parents:
diff changeset
199 call I2C_RX_compass ; read compass
heinrichsweikamp
parents:
diff changeset
200 call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
201 call compass_filter ; Filter compass raw data
heinrichsweikamp
parents:
diff changeset
202 banksel common
heinrichsweikamp
parents:
diff changeset
203 ;
heinrichsweikamp
parents:
diff changeset
204 ; ; Three
heinrichsweikamp
parents:
diff changeset
205 ; call I2C_RX_compass ; read compass
heinrichsweikamp
parents:
diff changeset
206 ; call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
207 ; call compass_filter ; Filter compass raw data
heinrichsweikamp
parents:
diff changeset
208 ; banksel common
heinrichsweikamp
parents:
diff changeset
209 ;
heinrichsweikamp
parents:
diff changeset
210 ; ; Four times to get cleaner values
heinrichsweikamp
parents:
diff changeset
211 ; call I2C_RX_compass ; read compass
heinrichsweikamp
parents:
diff changeset
212 ; call I2C_RX_accelerometer ; Test Accelerometer
heinrichsweikamp
parents:
diff changeset
213 ; call compass_filter ; Filter compass raw data
heinrichsweikamp
parents:
diff changeset
214
heinrichsweikamp
parents:
diff changeset
215 ; And register only one value out of four:
heinrichsweikamp
parents:
diff changeset
216 call compass_add_calibration ; check and store new max/min values
heinrichsweikamp
parents:
diff changeset
217 banksel common
heinrichsweikamp
parents:
diff changeset
218
heinrichsweikamp
parents:
diff changeset
219 call TFT_compass_fast ; show values
heinrichsweikamp
parents:
diff changeset
220 ; btg LEDg ; Show read-out interval
heinrichsweikamp
parents:
diff changeset
221
heinrichsweikamp
parents:
diff changeset
222 btfsc sleepmode ; Sleepmode active?
heinrichsweikamp
parents:
diff changeset
223 bra compass_calibration_exit ; Yes, exit
heinrichsweikamp
parents:
diff changeset
224
heinrichsweikamp
parents:
diff changeset
225 btfsc switch_left ; Button pressed?
heinrichsweikamp
parents:
diff changeset
226 bra compass_calibration_exit ; Yes, exit
heinrichsweikamp
parents:
diff changeset
227
heinrichsweikamp
parents:
diff changeset
228 btfss onesecupdate ; do every second tasks?
heinrichsweikamp
parents:
diff changeset
229 bra compass_calibration_loop2 ; no, loop here
heinrichsweikamp
parents:
diff changeset
230
heinrichsweikamp
parents:
diff changeset
231 movlw .240
heinrichsweikamp
parents:
diff changeset
232 call timeout_testmode ; check timeout
heinrichsweikamp
parents:
diff changeset
233 bcf onesecupdate ; clear flag
heinrichsweikamp
parents:
diff changeset
234
heinrichsweikamp
parents:
diff changeset
235 bra compass_calibration_loop2 ; loop here
heinrichsweikamp
parents:
diff changeset
236
heinrichsweikamp
parents:
diff changeset
237 compass_calibration_exit:
heinrichsweikamp
parents:
diff changeset
238 call compass_solve_calibration
heinrichsweikamp
parents:
diff changeset
239 banksel common
heinrichsweikamp
parents:
diff changeset
240 extern option_save_all
heinrichsweikamp
parents:
diff changeset
241 call option_save_all ; save all settings into EEPROM
heinrichsweikamp
parents:
diff changeset
242 bcf sleepmode ; Clear the flag before exiting to surfacemode
heinrichsweikamp
parents:
diff changeset
243 movlw .6
heinrichsweikamp
parents:
diff changeset
244 movwf menupos3 ; Set to compass view...
heinrichsweikamp
parents:
diff changeset
245 goto surfloop ; ...and exit
heinrichsweikamp
parents:
diff changeset
246
heinrichsweikamp
parents:
diff changeset
247 END