📄 hal_key.lst
字号:
147 #if defined (HAL_BOARD_CC2430BB)
148 #define HAL_KEY_POINT_HIGH_USED 0
149 #endif
150
151 #if defined (HAL_BOARD_CC2430EB)
152 #define HAL_KEY_JOYSTICK_ENABLE
153 #define HAL_KEY_JOY_CHN HAL_ADC_CHANNEL_6
154
155 #define HAL_KEY_SW_5_ENABLE
156 #define HAL_KEY_SW_5_PORT P0 /* Port location of SW5 */
157 #define HAL_KEY_SW_5_BIT HAL_KEY_BIT5 /* Bit location of SW5 */
158 #define HAL_KEY_SW_5_SEL P0SEL /* Port Select Register for SW5 */
159 #define HAL_KEY_SW_5_DIR P0DIR /* Port Direction Register for SW5 */
160 #define HAL_KEY_SW_5_INP P0INP /* Port Input Mode Register for SW5 */
161 #define HAL_KEY_SW_5_IEN IEN1 /* Interrupt Enable Register for SW5 */
162 #define HAL_KEY_SW_5_IENBIT HAL_KEY_BIT5 /* Interrupt Enable bit for SW5 */
163 #define HAL_KEY_SW_5_EDGE HAL_KEY_RISING_EDGE /* Type of interrupt for SW5 */
164 #define HAL_KEY_SW_5_EDGEBIT HAL_KEY_BIT2 /* EdgeType enable bit SW5 */
165 #define HAL_KEY_SW_5_ICTL PICTL /* Port Interrupt Control for SW5 */
166 #define HAL_KEY_SW_5_ICTLBIT HAL_KEY_BIT4 /* Interrupt enable bit for SW5 */
167 #define HAL_KEY_SW_5_PXIFG P0IFG /* Port Interrupt Flag for SW5 */
168
169 #define HAL_KEY_POINT_HIGH_USED HAL_KEY_SW_5_BIT /* P0 can only be enabled/disabled as group of high or low nibble */
170 #endif
171
172 /**************************************************************************************************
173 * TYPEDEFS
174 **************************************************************************************************/
175
176
177 /**************************************************************************************************
178 * GLOBAL VARIABLES
179 **************************************************************************************************/
180 static uint8 halKeySavedKeys; /* used to store previous key state in polling mode */
^
Warning[Pe177]: variable "halKeySavedKeys" was declared but never referenced
181 static halKeyCBack_t pHalKeyProcessFunction;
^
Warning[Pe177]: variable "pHalKeyProcessFunction" was declared but never
referenced
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
182 bool Hal_KeyIntEnable; /* interrupt enable/disable flag */
\ Hal_KeyIntEnable:
\ 000000 DS 1
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
183 uint8 halSaveIntKey; /* used by ISR to save state of interrupt-driven keys */
\ halSaveIntKey:
\ 000000 DS 1
184
185 static uint8 HalKeyConfigured;
^
Warning[Pe177]: variable "HalKeyConfigured" was declared but never referenced
186
187 /**************************************************************************************************
188 * FUNCTIONS - Local
189 **************************************************************************************************/
190 void halProcessKeyInterrupt (void);
191
192
193 /**************************************************************************************************
194 * FUNCTIONS - API
195 **************************************************************************************************/
196 /**************************************************************************************************
197 * @fn HalKeyInit
198 *
199 * @brief Initilize Key Service
200 *
201 * @param none
202 *
203 * @return None
204 **************************************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
205 void HalKeyInit( void )
\ HalKeyInit:
206 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
207 #if (HAL_KEY == TRUE)
208 /* Initialize previous key to 0 */
209 halKeySavedKeys = 0;
210
211 #if defined (HAL_KEY_SW_6_ENABLE)
212 HAL_KEY_SW_6_SEL &= ~(HAL_KEY_SW_6_BIT); /* Set pin function to GPIO */
213 HAL_KEY_SW_6_DIR &= ~(HAL_KEY_SW_6_BIT); /* Set pin direction to Input */
214 #endif
215
216 #if defined (HAL_KEY_SW_5_ENABLE)
217 HAL_KEY_SW_5_SEL &= ~(HAL_KEY_SW_5_BIT); /* Set pin function to GPIO */
218 HAL_KEY_SW_5_DIR &= ~(HAL_KEY_SW_5_BIT); /* Set pin direction to Input */
219 HAL_KEY_SW_5_INP |= HAL_KEY_SW_5_BIT; /* Set pin input mode to tri-state */
220 #endif
221
222 /* Initialize callback function */
223 pHalKeyProcessFunction = NULL;
224
225 /* Start with key is not configured */
226 HalKeyConfigured = FALSE;
227 #endif /* HAL_KEY */
228 }
\ 000000 02.... LJMP ?BRET
229
230 /**************************************************************************************************
231 * @fn HalKeyConfig
232 *
233 * @brief Configure the Key serivce
234 *
235 * @param interruptEnable - TRUE/FALSE, enable/disable interrupt
236 * cback - pointer to the CallBack function
237 *
238 * @return None
239 **************************************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
240 void HalKeyConfig (bool interruptEnable, halKeyCBack_t cback)
\ HalKeyConfig:
241 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
242 #if (HAL_KEY == TRUE)
243 /* Enable/Disable Interrupt or */
244 Hal_KeyIntEnable = interruptEnable;
245
246 /* Register the callback fucntion */
247 pHalKeyProcessFunction = cback;
248
249 /* Determine if interrupt is enable or not */
250 if (Hal_KeyIntEnable)
251 {
252
253 /*
254 Work around for CC2430DB when interrupt is enabled and SW5 (center joystick)
255 is used. This SW5 uses P2 which also has debug lines connected to it. This
256 causes contant interruption on P2INT_VECTOR. Disable the usage of P2 interrupt
257 will stop this problem.
258 */
259 #if defined (HAL_BOARD_CC2430DB)
260 #undef HAL_KEY_SW_5_ENABLE /* Dis-allow SW5 when key interrupt is enable */
261 #endif
262
263 #if defined (HAL_KEY_SW_5_ENABLE)
264 PICTL &= ~(HAL_KEY_SW_5_EDGEBIT); /* Set rising or falling edge */
265 #if (HAL_KEY_SW_5_EDGE == HAL_KEY_FALLING_EDGE)
266 PICTL |= HAL_KEY_SW_5_EDGEBIT;
267 #endif
268 HAL_KEY_SW_5_ICTL |= HAL_KEY_SW_5_ICTLBIT; /* Set interrupt enable bit */
269 HAL_KEY_SW_5_IEN |= HAL_KEY_SW_5_IENBIT;
270 HAL_KEY_SW_5_PXIFG = ~(HAL_KEY_SW_5_BIT); /* Clear any pending interrupts */
271 #endif
272
273 #if defined (HAL_KEY_SW_6_ENABLE)
274 PICTL &= ~(HAL_KEY_SW_6_EDGEBIT); /* Set rising or falling edge */
275 #if (HAL_KEY_SW_6_EDGE == HAL_KEY_FALLING_EDGE)
276 PICTL |= HAL_KEY_SW_6_EDGEBIT;
277 #endif
278 HAL_KEY_SW_6_ICTL |= HAL_KEY_SW_6_ICTLBIT; /* Set interrupt enable bit */
279 HAL_KEY_SW_6_IEN |= HAL_KEY_SW_6_IENBIT;
280 HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); /* Clear any pending interrupts */
281 #endif
282
283 /* Do this only after the hal_key is configured - to work with sleep stuff */
284 if (HalKeyConfigured == TRUE)
285 {
286 osal_stop_timerEx( Hal_TaskID, HAL_KEY_EVENT); /* Cancel polling if active */
287 }
288 }
289 else /* Interrupts NOT enabled */
290 {
291
292 /*
293 Work around for CC2430DB when interrupt is enabled and SW5 (center joystick)
294 is used. This SW5 uses P2 which also has debug lines connected to it. This
295 causes contant interruption on P2INT_VECTOR. Disable the usage of P2 interrupt
296 will stop this problem.
297 */
298 #if defined (HAL_BOARD_CC2430DB)
299 #define HAL_KEY_SW_5_ENABLE /* Allow SW5 only when key interrupt is disable */
300 #endif
301
302 #if defined (HAL_KEY_SW_6_ENABLE)
303 HAL_KEY_SW_6_ICTL &= ~(HAL_KEY_SW_6_ICTLBIT); /* Clear interrupt enable bit */
304 HAL_KEY_SW_6_IEN &= ~(HAL_KEY_SW_6_IENBIT);
305 #endif
306
307 #if defined (HAL_KEY_SW_5_ENABLE)
308 HAL_KEY_SW_5_ICTL &= ~(HAL_KEY_SW_5_ICTLBIT); /* Clear interrupt enable bit */
309 HAL_KEY_SW_5_IEN &= ~(HAL_KEY_SW_5_IENBIT);
310 #endif
311 osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_POLLING_VALUE); /* Kick off polling */
312 }
313
314 /* Key now is configured */
315 HalKeyConfigured = TRUE;
316 #endif /* HAL_KEY */
317 }
\ 000000 02.... LJMP ?BRET
318
319 /**************************************************************************************************
320 * @fn HalKeyRead
321 *
322 * @brief Read the current value of a key
323 *
324 * @param None
325 *
326 * @return keys - current keys status
327 **************************************************************************************************/
328
\ In segment BANKED_CODE, align 1, keep-with-next
329 uint8 HalKeyRead ( void )
\ HalKeyRead:
330 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
331
332 uint8 keys = 0;
333
334 #if (HAL_KEY == TRUE)
335
336 #if defined (HAL_KEY_JOYSTICK_ENABLE)
337 uint8 ksave0 = 0;
338 uint8 ksave1;
339 uint8 adc;
340 #endif
341
342 #if defined (HAL_KEY_SW_6_ENABLE)
343 if (!(HAL_KEY_SW_6_PORT & HAL_KEY_SW_6_BIT)) /* Key is active low */
344 {
345 keys |= HAL_KEY_SW_6;
346 }
347 #endif
348 #if defined (HAL_KEY_SW_5_ENABLE)
349 if (HAL_KEY_SW_5_PORT & HAL_KEY_SW_5_BIT) /* Key is active high */
350 {
351 keys |= HAL_KEY_SW_5;
352 }
353 #endif
354
355 #if defined (HAL_KEY_JOYSTICK_ENABLE)
356 /*
357 * The joystick control is encoded as an analog voltage. Keep on reading
358 * the ADC until two consecutive key decisions are the same.
359 */
360
361 do
362 {
363 ksave1 = ksave0; /* save previouse key reading */
364
365 adc = HalAdcRead (HAL_KEY_JOY_CHN, HAL_ADC_RESOLUTION_8);
366
367 if (CHVER == 0x01)
368 {
369 /* Rev B */
370 if ((adc >= 90) && (adc <= 100))
371 {
372 ksave0 |= HAL_KEY_UP;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -