Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

kernel/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:

Include dependency graph

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.

void systime_set_switcher void *  switcher  ) 
 

set task switcher vector

Parameters:
switcher the switcher

Definition at line 326 of file systime.c.

References tm_switcher_vector.

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 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(), and systime_set_switcher().

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-2002 by the authors.

Generated on Mon Feb 16 21:02:32 2004 for brickOS Kernel Developer by doxygen 1.3.5