📄 osal_timers.lst
字号:
\ 000026 02.... LJMP ?Subroutine4 & 0xFFFF
268 }
269
270 /*********************************************************************
271 * @fn osal_start_timerEx
272 *
273 * @brief
274 *
275 * This function is called to start a timer to expire in n mSecs.
276 * When the timer expires, the calling task will get the specified event.
277 *
278 * @param byte taskID - task id to set timer for
279 * @param UINT16 event_id - event to be notified with
280 * @param UNINT16 timeout_value - in milliseconds.
281 *
282 * @return ZSUCCESS, or NO_TIMER_AVAIL.
283 */
\ In segment BANKED_CODE, align 1, keep-with-next
284 byte osal_start_timerEx( byte taskID, UINT16 event_id, UINT16 timeout_value )
\ osal_start_timerEx:
285 {
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
286 halIntState_t intState;
287 osalTimerRec_t *newTimer;
288
289 HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts.
\ 000005 A2AF MOV C,0xa8.7
\ 000007 E4 CLR A
\ 000008 92E0 MOV 0xE0 /* A */.0,C
\ 00000A F5.. MOV ?V0 + 0,A
\ 00000C C2AF CLR 0xa8.7
290
291 // Add timer
292 newTimer = osalAddTimer( taskID, event_id, timeout_value );
\ 00000E ; Setup parameters for call to function osalAddTimer
\ 00000E 90.... MOV DPTR,#(osalAddTimer & 0xffff)
\ 000011 74.. MOV A,#((osalAddTimer >> 16) & 0xff)
\ 000013 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000016 8A.. MOV ?V0 + 2,R2
\ 000018 8B.. MOV ?V0 + 3,R3
\ 00001A AE.. MOV R6,?V0 + 2
\ 00001C AF.. MOV R7,?V0 + 3
293 if ( newTimer )
\ 00001E EE MOV A,R6
\ 00001F 7001 JNZ ??osal_start_timerEx_0
\ 000021 EF MOV A,R7
\ ??osal_start_timerEx_0:
\ 000022 6010 JZ ??osal_start_timerEx_1
294 {
295 #ifdef POWER_SAVING
296 // Update timer registers
297 osal_retune_timers();
298 (void)timerActive;
299 #endif
300 // Does the timer need to be started?
301 if ( timerActive == FALSE )
\ 000024 90.... MOV DPTR,#timerActive
\ 000027 E0 MOVX A,@DPTR
\ 000028 700A JNZ ??osal_start_timerEx_1
302 {
303 osal_timer_activate( TRUE );
\ 00002A ; Setup parameters for call to function osal_timer_activate
\ 00002A 7901 MOV R1,#0x1
\ 00002C 90.... MOV DPTR,#(osal_timer_activate & 0xffff)
\ 00002F 74.. MOV A,#((osal_timer_activate >> 16) & 0xff)
\ 000031 12.... LCALL ?BCALL ; Banked call to: DPTR()
304 }
305 }
306
307 HAL_EXIT_CRITICAL_SECTION( intState ); // Re-enable interrupts.
\ ??osal_start_timerEx_1:
\ 000034 E5.. MOV A,?V0 + 0
\ 000036 A2E0 MOV C,0xE0 /* A */.0
\ 000038 92AF MOV 0xa8.7,C
308
309 return ( (newTimer != NULL) ? ZSUCCESS : NO_TIMER_AVAIL );
\ 00003A EE MOV A,R6
\ 00003B 7001 JNZ ??osal_start_timerEx_2
\ 00003D EF MOV A,R7
\ ??osal_start_timerEx_2:
\ 00003E 6004 JZ ??osal_start_timerEx_3
\ 000040 7900 MOV R1,#0x0
\ 000042 8002 SJMP ??osal_start_timerEx_4
\ ??osal_start_timerEx_3:
\ 000044 790C MOV R1,#0xc
\ ??osal_start_timerEx_4:
\ 000046 02.... LJMP ?Subroutine3 & 0xFFFF
310 }
311
312 /*********************************************************************
313 * @fn osal_stop_timer
314 *
315 * @brief
316 *
317 * This function is called to stop a timer that has already been started.
318 * If ZSUCCESS, the function will cancel the timer and prevent the event
319 * associated with the timer from being set for the calling task.
320 *
321 * @param UINT16 event_id - identifier of the timer that is to be stopped
322 *
323 * @return ZSUCCESS or INVALID_EVENT_ID
324 */
\ In segment BANKED_CODE, align 1, keep-with-next
325 byte osal_stop_timer( UINT16 event_id )
\ osal_stop_timer:
326 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
327 return osal_stop_timerEx( osal_self(), event_id );
\ 000005 ; Setup parameters for call to function osal_stop_timerEx
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
\ 000009 ; Setup parameters for call to function osal_self
\ 000009 90.... MOV DPTR,#(osal_self & 0xffff)
\ 00000C 74.. MOV A,#((osal_self >> 16) & 0xff)
\ 00000E 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000011 EE MOV A,R6
\ 000012 FA MOV R2,A
\ 000013 EF MOV A,R7
\ 000014 FB MOV R3,A
\ 000015 90.... MOV DPTR,#(osal_stop_timerEx & 0xffff)
\ 000018 74.. MOV A,#((osal_stop_timerEx >> 16) & 0xff)
\ 00001A 02.... LJMP ?Subroutine4 & 0xFFFF
328 }
329
330 /*********************************************************************
331 * @fn osal_stop_timerEx
332 *
333 * @brief
334 *
335 * This function is called to stop a timer that has already been started.
336 * If ZSUCCESS, the function will cancel the timer and prevent the event
337 * associated with the timer from being set for the calling task.
338 *
339 * @param byte task_id - task id of timer to stop
340 * @param UINT16 event_id - identifier of the timer that is to be stopped
341 *
342 * @return ZSUCCESS or INVALID_EVENT_ID
343 */
\ In segment BANKED_CODE, align 1, keep-with-next
344 byte osal_stop_timerEx( byte task_id, UINT16 event_id )
\ osal_stop_timerEx:
345 {
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
346 halIntState_t intState;
347 osalTimerRec_t *foundTimer;
348
349 HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts.
\ 000005 A2AF MOV C,0xa8.7
\ 000007 E4 CLR A
\ 000008 92E0 MOV 0xE0 /* A */.0,C
\ 00000A F5.. MOV ?V0 + 0,A
\ 00000C C2AF CLR 0xa8.7
350
351 // Find the timer to stop
352 foundTimer = osalFindTimer( task_id, event_id );
\ 00000E ; Setup parameters for call to function osalFindTimer
\ 00000E 90.... MOV DPTR,#(osalFindTimer & 0xffff)
\ 000011 74.. MOV A,#((osalFindTimer >> 16) & 0xff)
\ 000013 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000016 8A.. MOV ?V0 + 2,R2
\ 000018 8B.. MOV ?V0 + 3,R3
\ 00001A AE.. MOV R6,?V0 + 2
\ 00001C AF.. MOV R7,?V0 + 3
353 if ( foundTimer )
\ 00001E EE MOV A,R6
\ 00001F 7001 JNZ ??osal_stop_timerEx_0
\ 000021 EF MOV A,R7
\ ??osal_stop_timerEx_0:
\ 000022 6008 JZ ??osal_stop_timerEx_1
354 {
355 osalDeleteTimer( foundTimer );
\ 000024 ; Setup parameters for call to function osalDeleteTimer
\ 000024 90.... MOV DPTR,#(osalDeleteTimer & 0xffff)
\ 000027 74.. MOV A,#((osalDeleteTimer >> 16) & 0xff)
\ 000029 12.... LCALL ?BCALL ; Banked call to: DPTR()
356
357 #ifdef POWER_SAVING
358 osal_retune_timers();
359 #endif
360 }
361
362 HAL_EXIT_CRITICAL_SECTION( intState ); // Re-enable interrupts.
\ ??osal_stop_timerEx_1:
\ 00002C E5.. MOV A,?V0 + 0
\ 00002E A2E0 MOV C,0xE0 /* A */.0
\ 000030 92AF MOV 0xa8.7,C
363
364 return ( (foundTimer != NULL) ? ZSUCCESS : INVALID_EVENT_ID );
\ 000032 EE MOV A,R6
\ 000033 7001 JNZ ??osal_stop_timerEx_2
\ 000035 EF MOV A,R7
\ ??osal_stop_timerEx_2:
\ 000036 6004 JZ ??osal_stop_timerEx_3
\ 000038 7900 MOV R1,#0x0
\ 00003A 8002 SJMP ??osal_stop_timerEx_4
\ ??osal_stop_timerEx_3:
\ 00003C 7907 MOV R1,#0x7
\ ??osal_stop_timerEx_4:
\ 00003E 80.. SJMP ?Subroutine3
365 }
366
367 /*********************************************************************
368 * @fn osal_get_timeoutEx
369 *
370 * @brief
371 *
372 * @param byte task_id - task id of timer to check
373 * @param UINT16 event_id - identifier of timer to be checked
374 *
375 * @return Return the timer's tick count if found, zero otherwise.
376 */
\ In segment BANKED_CODE, align 1, keep-with-next
377 UINT16 osal_get_timeoutEx( byte task_id, UINT16 event_id )
\ osal_get_timeoutEx:
378 {
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
379 halIntState_t intState;
380 uint16 rtrn = 0;
\ 000005 7E00 MOV R6,#0x0
\ 000007 7F00 MOV R7,#0x0
381 osalTimerRec_t *tmr;
382
383 HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts.
\ 000009 A2AF MOV C,0xa8.7
\ 00000B E4 CLR A
\ 00000C 92E0 MOV 0xE0 /* A */.0,C
\ 00000E F5.. MOV ?V0 + 0,A
\ 000010 C2AF CLR 0xa8.7
384
385 tmr = osalFindTimer( task_id, event_id );
\ 000012 ; Setup parameters for call to function osalFindTimer
\ 000012 90.... MOV DPTR,#(osalFindTimer & 0xffff)
\ 000015 74.. MOV A,#((osalFindTimer >> 16) & 0xff)
\ 000017 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00001A 8A82 MOV DPL,R2
\ 00001C 8B83 MOV DPH,R3
386
387 if ( tmr )
\ 00001E E582 MOV A,DPL
\ 000020 7002 JNZ ??osal_get_timeoutEx_0
\ 000022 E583 MOV A,DPH
\ ??osal_get_timeoutEx_0:
\ 000024 6007 JZ ??osal_get_timeoutEx_1
388 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -