96 lines
4.9 KiB
C
96 lines
4.9 KiB
C
|
#ifndef _OMAP_TIMER_H
|
||
|
#define _OMAP_TIMER_H
|
||
|
|
||
|
/* General-purpose timer register map */
|
||
|
#define OMAP3_GPTIMER1_BASE 0x48318000 /* GPTIMER1 physical address */
|
||
|
#define OMAP3_GPTIMER2_BASE 0x49032000 /* GPTIMER2 physical address */
|
||
|
#define OMAP3_GPTIMER3_BASE 0x49034000 /* GPTIMER3 physical address */
|
||
|
#define OMAP3_GPTIMER4_BASE 0x49036000 /* GPTIMER4 physical address */
|
||
|
#define OMAP3_GPTIMER5_BASE 0x49038000 /* GPTIMER5 physical address */
|
||
|
#define OMAP3_GPTIMER6_BASE 0x4903A000 /* GPTIMER6 physical address */
|
||
|
#define OMAP3_GPTIMER7_BASE 0x4903C000 /* GPTIMER7 physical address */
|
||
|
#define OMAP3_GPTIMER8_BASE 0x4903E000 /* GPTIMER8 physical address */
|
||
|
#define OMAP3_GPTIMER9_BASE 0x49040000 /* GPTIMER9 physical address */
|
||
|
#define OMAP3_GPTIMER10_BASE 0x48086000 /* GPTIMER10 physical address */
|
||
|
#define OMAP3_GPTIMER11_BASE 0x48088000 /* GPTIMER11 physical address */
|
||
|
|
||
|
/* General-purpose timer registers */
|
||
|
#define OMAP3_TIDR 0x000 /* IP revision code */
|
||
|
#define OMAP3_TIOCP_CFG 0x010 /* Controls params for GP timer L4 interface */
|
||
|
#define OMAP3_TISTAT 0x014 /* Status (excl. interrupt status) */
|
||
|
#define OMAP3_TISR 0x018 /* Pending interrupt status */
|
||
|
#define OMAP3_TIER 0x01C /* Interrupt enable */
|
||
|
#define OMAP3_TWER 0x020 /* Wakeup enable */
|
||
|
#define OMAP3_TCLR 0x024 /* Controls optional features */
|
||
|
#define OMAP3_TCRR 0x028 /* Internal counter value */
|
||
|
#define OMAP3_TLDR 0x02C /* Timer load value */
|
||
|
#define OMAP3_TTGR 0x030 /* Triggers counter reload */
|
||
|
#define OMAP3_TWPS 0x034 /* Indicates if Write-Posted pending */
|
||
|
#define OMAP3_TMAR 0x038 /* Value to be compared with counter */
|
||
|
#define OMAP3_TCAR1 0x03C /* First captured value of counter register */
|
||
|
#define OMAP3_TSICR 0x040 /* Control posted mode and functional SW reset */
|
||
|
#define OMAP3_TCAR2 0x044 /* Second captured value of counter register */
|
||
|
#define OMAP3_TPIR 0x048 /* Positive increment (1 ms tick) */
|
||
|
#define OMAP3_TNIR 0x04C /* Negative increment (1 ms tick) */
|
||
|
#define OMAP3_TCVR 0x050 /* Defines TCRR is sub/over-period (1 ms tick) */
|
||
|
#define OMAP3_TOCR 0x054 /* Masks tick interrupt */
|
||
|
#define OMAP3_TOWR 0x058 /* Number of masked overflow interrupts */
|
||
|
|
||
|
/* Interrupt status register fields */
|
||
|
#define OMAP3_TISR_MAT_IT_FLAG (1 << 0) /* Pending match interrupt status */
|
||
|
#define OMAP3_TISR_OVF_IT_FLAG (1 << 1) /* Pending overflow interrupt status */
|
||
|
#define OMAP3_TISR_TCAR_IT_FLAG (1 << 2) /* Pending capture interrupt status */
|
||
|
|
||
|
/* Interrupt enable register fields */
|
||
|
#define OMAP3_TIER_MAT_IT_ENA (1 << 0) /* Enable match interrupt */
|
||
|
#define OMAP3_TIER_OVF_IT_ENA (1 << 1) /* Enable overflow interrupt */
|
||
|
#define OMAP3_TIER_TCAR_IT_ENA (1 << 2) /* Enable capture interrupt */
|
||
|
|
||
|
/* Timer control fields */
|
||
|
#define OMAP3_TCLR_ST (1 << 0) /* Start/stop timer */
|
||
|
#define OMAP3_TCLR_AR (1 << 1) /* Autoreload or one-shot mode */
|
||
|
#define OMAP3_TCLR_OVF_TRG (1 << 10) /* Overflow trigger */
|
||
|
|
||
|
#define OMAP3_GPTIMER1_TIDR (OMAP3_GPTIMER1_BASE + OMAP3_TIDR)
|
||
|
#define OMAP3_GPTIMER1_TIOCP_CFG (OMAP3_GPTIMER1_BASE + OMAP3_TIOCP_CFG)
|
||
|
#define OMAP3_GPTIMER1_TISTAT (OMAP3_GPTIMER1_BASE + OMAP3_TISTAT)
|
||
|
#define OMAP3_GPTIMER1_TISR (OMAP3_GPTIMER1_BASE + OMAP3_TISR)
|
||
|
#define OMAP3_GPTIMER1_TIER (OMAP3_GPTIMER1_BASE + OMAP3_TIER)
|
||
|
#define OMAP3_GPTIMER1_TWER (OMAP3_GPTIMER1_BASE + OMAP3_TWER)
|
||
|
#define OMAP3_GPTIMER1_TCLR (OMAP3_GPTIMER1_BASE + OMAP3_TCLR)
|
||
|
#define OMAP3_GPTIMER1_TCRR (OMAP3_GPTIMER1_BASE + OMAP3_TCRR)
|
||
|
#define OMAP3_GPTIMER1_TLDR (OMAP3_GPTIMER1_BASE + OMAP3_TLDR)
|
||
|
#define OMAP3_GPTIMER1_TTGR (OMAP3_GPTIMER1_BASE + OMAP3_TTGR)
|
||
|
#define OMAP3_GPTIMER1_TWPS (OMAP3_GPTIMER1_BASE + OMAP3_TWPS)
|
||
|
#define OMAP3_GPTIMER1_TMAR (OMAP3_GPTIMER1_BASE + OMAP3_TMAR)
|
||
|
#define OMAP3_GPTIMER1_TCAR1 (OMAP3_GPTIMER1_BASE + OMAP3_TCAR1)
|
||
|
#define OMAP3_GPTIMER1_TSICR (OMAP3_GPTIMER1_BASE + OMAP3_TSICR)
|
||
|
#define OMAP3_GPTIMER1_TCAR2 (OMAP3_GPTIMER1_BASE + OMAP3_TCAR2)
|
||
|
#define OMAP3_GPTIMER1_TPIR (OMAP3_GPTIMER1_BASE + OMAP3_TPIR)
|
||
|
#define OMAP3_GPTIMER1_TNIR (OMAP3_GPTIMER1_BASE + OMAP3_TNIR)
|
||
|
#define OMAP3_GPTIMER1_TCVR (OMAP3_GPTIMER1_BASE + OMAP3_TCVR)
|
||
|
#define OMAP3_GPTIMER1_TOCR (OMAP3_GPTIMER1_BASE + OMAP3_TOCR)
|
||
|
#define OMAP3_GPTIMER1_TOWR (OMAP3_GPTIMER1_BASE + OMAP3_TOWR)
|
||
|
|
||
|
#define OMAP3_CM_CLKSEL_WKUP 0x48004c40 /* source clock selection */
|
||
|
#define OMAP3_CLKSEL_GPT1 (1 << 0) /* Selects GPTIMER 1 source
|
||
|
* clock:
|
||
|
*
|
||
|
* 0: use 32KHz clock
|
||
|
* 1: sys clock)
|
||
|
*/
|
||
|
|
||
|
#define TIMER_FREQ 1000 /* clock frequency for OMAP timer (1ms) */
|
||
|
#define TIMER_COUNT(freq) (TIMER_FREQ/(freq)) /* initial value for counter*/
|
||
|
|
||
|
#ifndef __ASSEMBLY__
|
||
|
|
||
|
void omap3_timer_init(unsigned freq);
|
||
|
void omap3_timer_stop(void);
|
||
|
int omap3_register_timer_handler(const irq_handler_t handler);
|
||
|
void omap3_timer_int_handler(void);
|
||
|
|
||
|
#endif /* __ASSEMBLY__ */
|
||
|
|
||
|
#endif /* _OMAP_TIMER_H */
|