TIMER0

Timer

Provides a generic Timer core.

The Timer is implemented as a countdown timer that can be used in various modes: - Polling : Returns current countdown value to software. - One-Shot: Loads itself and stops when value reaches 0. - Periodic: (Re-)Loads itself when value reaches 0.

en register allows the user to enable/disable the Timer. When the Timer is enabled, it is automatically loaded with the value of load register.

When the Timer reaches 0, it is automatically reloaded with value of reload register.

The user can latch the current countdown value by writing to update_value register, it will update value register with current countdown value.

To use the Timer in One-Shot mode, the user needs to: - Disable the timer. - Set the load register to the expected duration. - (Re-)Enable the Timer.

To use the Timer in Periodic mode, the user needs to: - Disable the Timer. - Set the load register to 0. - Set the reload register to the expected period. - Enable the Timer.

For both modes, the CPU can be advertised by an IRQ that the duration/period has elapsed. (The CPU can also do software polling with update_value and value to know the elapsed duration)

Register Listing for TIMER0

Register

Address

TIMER0_LOAD3

0xe0002800

TIMER0_LOAD2

0xe0002804

TIMER0_LOAD1

0xe0002808

TIMER0_LOAD0

0xe000280c

TIMER0_RELOAD3

0xe0002810

TIMER0_RELOAD2

0xe0002814

TIMER0_RELOAD1

0xe0002818

TIMER0_RELOAD0

0xe000281c

TIMER0_EN

0xe0002820

TIMER0_UPDATE_VALUE

0xe0002824

TIMER0_VALUE3

0xe0002828

TIMER0_VALUE2

0xe000282c

TIMER0_VALUE1

0xe0002830

TIMER0_VALUE0

0xe0002834

TIMER0_EV_STATUS

0xe0002838

TIMER0_EV_PENDING

0xe000283c

TIMER0_EV_ENABLE

0xe0002840

TIMER0_LOAD3

Address: 0xe0002800 + 0x0 = 0xe0002800

Bits 24-31 of TIMER0_LOAD. Load value when Timer is (re-)enabled.In One-Shot mode, the value written to this register specify the Timer’s duration in clock cycles.

TIMER0_LOAD2

Address: 0xe0002800 + 0x4 = 0xe0002804

Bits 16-23 of TIMER0_LOAD.

TIMER0_LOAD1

Address: 0xe0002800 + 0x8 = 0xe0002808

Bits 8-15 of TIMER0_LOAD.

TIMER0_LOAD0

Address: 0xe0002800 + 0xc = 0xe000280c

Bits 0-7 of TIMER0_LOAD.

TIMER0_RELOAD3

Address: 0xe0002800 + 0x10 = 0xe0002810

Bits 24-31 of TIMER0_RELOAD. Reload value when Timer reaches 0.In Periodic mode, the value written to this register specify the Timer’s period in clock cycles.

TIMER0_RELOAD2

Address: 0xe0002800 + 0x14 = 0xe0002814

Bits 16-23 of TIMER0_RELOAD.

TIMER0_RELOAD1

Address: 0xe0002800 + 0x18 = 0xe0002818

Bits 8-15 of TIMER0_RELOAD.

TIMER0_RELOAD0

Address: 0xe0002800 + 0x1c = 0xe000281c

Bits 0-7 of TIMER0_RELOAD.

TIMER0_EN

Address: 0xe0002800 + 0x20 = 0xe0002820

Enable of the Timer.Set if to 1 to enable/start the Timer and 0 to disable the Timer

TIMER0_UPDATE_VALUE

Address: 0xe0002800 + 0x24 = 0xe0002824

Update of the current countdown value.A write to this register latches the current countdown value to value register.

TIMER0_VALUE3

Address: 0xe0002800 + 0x28 = 0xe0002828

Bits 24-31 of TIMER0_VALUE. Latched countdown value

TIMER0_VALUE2

Address: 0xe0002800 + 0x2c = 0xe000282c

Bits 16-23 of TIMER0_VALUE.

TIMER0_VALUE1

Address: 0xe0002800 + 0x30 = 0xe0002830

Bits 8-15 of TIMER0_VALUE.

TIMER0_VALUE0

Address: 0xe0002800 + 0x34 = 0xe0002834

Bits 0-7 of TIMER0_VALUE.

TIMER0_EV_STATUS

Address: 0xe0002800 + 0x38 = 0xe0002838

This register contains the current raw level of the Event trigger. Writes to this register have no effect.

Field

Name

Description

[0]

ZERO

Level of the zero event

TIMER0_EV_PENDING

Address: 0xe0002800 + 0x3c = 0xe000283c

When an Event occurs, the corresponding bit will be set in this register. To clear the Event, set the corresponding bit in this register.

Field

Name

Description

[0]

ZERO

1 if a zero event occurred. This Event is triggered on a falling edge.

TIMER0_EV_ENABLE

Address: 0xe0002800 + 0x40 = 0xe0002840

This register enables the corresponding Events. Write a 0 to this register to disable individual events.

Field

Name

Description

[0]

ZERO

Write a 1 to enable the zero Event