mirror of
https://github.com/drasko/codezero.git
synced 2026-01-24 08:43:15 +01:00
Cleaned the timer driver to make it generic.
This commit is contained in:
@@ -9,19 +9,35 @@
|
||||
|
||||
#include INC_PLAT(platform.h)
|
||||
|
||||
#define SP804_TIMER01_BASE PLATFORM_TIMER_BASE
|
||||
/* Run mode of timers */
|
||||
#define SP804_TIMER_RUNMODE_FREERUN 0
|
||||
#define SP804_TIMER_RUNMODE_PERIODIC 1
|
||||
|
||||
#define SP804_TIMER1LOAD (SP804_TIMER01_BASE + 0x0)
|
||||
#define SP804_TIMER1VALUE (SP804_TIMER01_BASE + 0x4)
|
||||
#define SP804_TIMER1CONTROL (SP804_TIMER01_BASE + 0x8)
|
||||
#define SP804_TIMER1INTCLR (SP804_TIMER01_BASE + 0xC)
|
||||
#define SP804_TIMER1RIS (SP804_TIMER01_BASE + 0x10)
|
||||
#define SP804_TIMER1MIS (SP804_TIMER01_BASE + 0x14)
|
||||
#define SP804_TIMER1BGLOAD (SP804_TIMER01_BASE + 0x18)
|
||||
#define SP804_TIMER2OFFSET 0x20
|
||||
/* Wrap mode of timers */
|
||||
#define SP804_TIMER_WRAPMODE_WRAPPING 0
|
||||
#define SP804_TIMER_WRAPMODE_ONESHOT 1
|
||||
|
||||
/* Operational width of timer */
|
||||
#define SP804_TIMER_WIDTH16BIT 0
|
||||
#define SP804_TIMER_WIDTH32BIT 1
|
||||
|
||||
/* Enable/disable irq on timer */
|
||||
#define SP804_TIMER_IRQDISABLE 0
|
||||
#define SP804_TIMER_IRQENABLE 1
|
||||
|
||||
/* Register offsets */
|
||||
#define SP804_TIMERLOAD 0x0
|
||||
#define SP804_TIMERVALUE 0x4
|
||||
#define SP804_TIMERCONTROL 0x8
|
||||
#define SP804_TIMERINTCLR 0xC
|
||||
#define SP804_TIMERRIS 0x10
|
||||
#define SP804_TIMERMIS 0x14
|
||||
#define SP804_TIMERBGLOAD 0x18
|
||||
|
||||
void sp804_init(unsigned int timer_base, int runmode, int wrapmode, \
|
||||
int width, int irq_enable);
|
||||
void sp804_irq_handler(unsigned int timer_base);
|
||||
void sp804_enable(unsigned int timer_base, int enable);
|
||||
void sp804_set_irq(unsigned int timer_base, int enable);
|
||||
|
||||
void sp804_init(void);
|
||||
void sp804_irq_handler(void);
|
||||
void sp804_enable(int timer, int enable);
|
||||
void sp804_set_irq(int timer, int enable);
|
||||
#endif /* __SP804_TIMER_H__ */
|
||||
|
||||
@@ -56,5 +56,6 @@
|
||||
#define PB926_SYSCTRL_VBASE (IO_AREA0_VADDR + PB926_SYSCTRL_VOFFSET)
|
||||
#define PB926_VIC_VBASE (IO_AREA0_VADDR + PB926_VIC_VOFFSET)
|
||||
#define PB926_SIC_VBASE (IO_AREA0_VADDR + PB926_SIC_VOFFSET)
|
||||
|
||||
#endif /* __PLATFORM_PB926_OFFSETS_H__ */
|
||||
|
||||
|
||||
@@ -11,11 +11,22 @@
|
||||
#include INC_GLUE(memlayout.h)
|
||||
|
||||
#define PLATFORM_CONSOLE_BASE PB926_UART0_VBASE
|
||||
#define PLATFORM_TIMER_BASE PB926_TIMER01_VBASE
|
||||
|
||||
/* SP804 timer has TIMER1 at TIMER0 + 0x20 address */
|
||||
#define PLATFORM_TIMER0_BASE PB926_TIMER01_VBASE
|
||||
|
||||
#define PLATFORM_SP810_BASE PB926_SYSCTRL_VBASE
|
||||
#define PLATFORM_IRQCTRL_BASE PB926_VIC_VBASE
|
||||
#define PLATFORM_SIRQCTRL_BASE PB926_SIC_VBASE
|
||||
|
||||
/* Total number of timers present in this platform */
|
||||
#define TOTAL_TIMERS 4
|
||||
|
||||
#define PLATFORM_TIMER0 0
|
||||
#define PLATFORM_TIMER1 1
|
||||
#define PLATFORM_TIMER2 2
|
||||
#define PLATFORM_TIMER3 3
|
||||
|
||||
void platform_irq_enable(int irq);
|
||||
void platform_irq_disable(int irq);
|
||||
void timer_start(void);
|
||||
|
||||
Reference in New Issue
Block a user