systime.c File Reference

Implementation: system time services. More...

#include <config.h>
#include <sys/time.h>
#include <sys/h8.h>
#include <sys/irq.h>
#include <sys/dmotor.h>
#include <sys/dsound.h>
#include <sys/battery.h>
#include <sys/critsec.h>
#include <sys/timeout.h>

Include dependency graph for systime.c:

Go to the source code of this file.

Functions

void clock_handler (void)
 clock handler triggered on the WDT overflow (every msec) on the NMI
void subsystem_handler (void)
 subsystem handler for every 2nd msec
void task_switch_handler (void)
 task switch handler called every msec
void systime_init (void)
 initialize system timer
void systime_shutdown (void)
 shutdown system timer
void systime_set_switcher (void *switcher)
 set task switcher vector
void systime_set_timeslice (unsigned char slice)
 set multitasking timeslice in ms
time_t get_system_up_time (void)
 retrieve the current system time
 __asm__ ("\n\ .text\n\ .align 1\n\ .global _get_system_up_time\n\ _get_system_up_time:\n\ push r2\n\ try_again:\n\ mov.w @_sys_time+2, r1\n\ mov.w @_sys_time, r0\n\ mov.w @_sys_time+2, r2\n\ cmp r2, r1\n\ bne try_again\n\ pop r2\n\ rts\n\ ")

Variables

volatile time_t sys_time
 current system time in ms
volatile unsigned char tm_timeslice
 task time slice
volatile unsigned char tm_current_slice
 current time remaining
void * tm_switcher_vector
 pointer to task switcher


Detailed Description

Implementation: system time services.

Author:
Markus L. Noga <markus@noga.de>

Definition in file systime.c.


Function Documentation

__asm__ ( "\n\.text\n\.align 1\n\.global _get_system_up_time\n\_get_system_up_time:\n\ push r2\n\ try_again:\n\ mov.w @_sys_time+  2,
r1\n\mov.w @  _sys_time,
r0\n\mov.w @_sys_time+  2,
r2\n\cmp  r2,
r1\n\bne try_again\n\pop r2\n\rts\n\"   
)

void clock_handler ( void   ) 

clock handler triggered on the WDT overflow (every msec) on the NMI

this is the system clock

Referenced by systime_init().

time_t get_system_up_time ( void   ) 

retrieve the current system time

Returns:
number of msecs the system has been running Since sys_time is 32bits, it takes more than one instruction to retrieve; the NMI can fire mid retrieval; causing the upper and lower 16bits to be unmatched (lower 16bits could overflow and reset to 0, while upper 16bits were already read)

void subsystem_handler ( void   ) 

subsystem handler for every 2nd msec

this is the pulse of the system (subsystems). sound, motor and lcd driver calls are initiated here. task_switch_handler is called from here as well.

Referenced by systime_init().

void systime_init ( void   ) 

initialize system timer

task switcher initialized to empty handler motors turned off

Definition at line 270 of file systime.c.

References clock_handler(), dm_shutdown(), nmi_vector, ocia_vector, ocib_vector, rom_dummy_handler(), subsystem_handler(), sys_time, systime_shutdown(), T_CR, T_CSR, T_IER, T_OCR, T_OCRA, T_OCRB, task_switch_handler(), TCR_CLOCK_32, TCSR_RESET_ON_A, TIER_ENABLE_OCA, TIER_ENABLE_OCB, tm_current_slice, TM_DEFAULT_SLICE, tm_switcher_vector, tm_timeslice, TOCR_OCRA, TOCR_OCRB, WDT_CNT_MSEC_64, WDT_CNT_PASSWORD, WDT_CSR, WDT_CSR_CLOCK_64, WDT_CSR_ENABLE, WDT_CSR_MODE_WATCHDOG, WDT_CSR_PASSWORD, and WDT_CSR_WATCHDOG_NMI.

Referenced by kmain().

void systime_set_switcher ( void *  switcher  ) 

set task switcher vector

Parameters:
switcher the switcher

Definition at line 326 of file systime.c.

void systime_set_timeslice ( unsigned char  slice  ) 

set multitasking timeslice in ms

Parameters:
slice the timeslice. must be at least 5ms.

Definition at line 333 of file systime.c.

References tm_current_slice, and tm_timeslice.

void systime_shutdown ( void   ) 

shutdown system timer

will also stop task switching and motors.

Definition at line 317 of file systime.c.

References T_IER, TIER_ENABLE_OCA, TIER_ENABLE_OCB, WDT_CSR, and WDT_CSR_ENABLE.

Referenced by kmain(), and systime_init().

void task_switch_handler ( void   ) 

task switch handler called every msec

handles swapping between tasks

Referenced by systime_init().


Variable Documentation

volatile time_t sys_time

current system time in ms

Warning:
This is a 32 bit value which will overflow after 49.7 days of continuous operation.

Definition at line 63 of file systime.c.

Referenced by systime_init().

volatile unsigned char tm_current_slice

current time remaining

Definition at line 73 of file systime.c.

Referenced by systime_init(), and systime_set_timeslice().

void* tm_switcher_vector

pointer to task switcher

Definition at line 75 of file systime.c.

Referenced by systime_init().

volatile unsigned char tm_timeslice

task time slice

Definition at line 72 of file systime.c.

Referenced by systime_init(), and systime_set_timeslice().


brickOS is released under the Mozilla Public License.
Original code copyright 1998-2005 by the authors.

Generated on Fri Jan 25 08:13:51 2008 for brickOS Kernel Developer by doxygen 1.5.4