view target-utils/include/timer.h @ 698:9ecbf1bf2e1b

fc-iram: added '+' to getopt magic string like in fc-xram Both fc-iram and fc-xram now support secondary program invokation. If the user needs to pass some options to the secondary program, we don't want fc-iram or fc-xram to claim these options as its own, thus we need to stop getopt() from reordering arguments. This fix was already implemented in fc-xram a long time ago, but the issue was overlooked when secondary program invokation ability was added to fc-iram.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 31 Mar 2020 03:23:26 +0000
parents 0f11da299b7d
children
line wrap: on
line source

/*
 * Definitions for Calypso general-purpose timer registers
 *
 * This header is usable from both .c and .S source files.
 */

#ifndef _CALYPSO_TIMER_H
#define _CALYPSO_TIMER_H

#define	TIMER1_BASE_ADDR	0xFFFE3800
#define	TIMER2_BASE_ADDR	0xFFFE6800

#ifdef __ASSEMBLER__

/*
 * Assembly source with cpp
 *
 * The most convenient way to access registers like these from ARM
 * assembly is to load the base address of the register block in some
 * ARM register, using only one ldr rN, =xxx instruction and only one
 * literal pool entry, and then access various registers in the block
 * from the same base using the immediate offset addressing mode.
 *
 * Here we define the offsets for the usage scenario above.
 */

#define	CNTL_TIM	0x00
#define	LOAD_TIM	0x02
#define	READ_TIM	0x04

#else

/*
 * C source
 *
 * For access from C, we define the layout of each timer register block
 * as a struct, and then define a pleudo-global-var for easy "volatile"
 * access to each of the 2 timers.
 */

struct timer_regs {
	unsigned char	cntl;
	unsigned char	pad;
	unsigned short	load;
	unsigned short	read;
};

#define	TIMER1_REGS	(*(volatile struct timer_regs *) TIMER1_BASE_ADDR)
#define	TIMER2_REGS	(*(volatile struct timer_regs *) TIMER2_BASE_ADDR)

#endif

/* CNTL register bit definitions */
#define	CNTL_START		0x01
#define	CNTL_AUTO_RELOAD	0x02
#define	CNTL_CLOCK_ENABLE	0x20

#endif /* include guard */