libopencm3
A free/libre/open-source firmware library for various ARM Cortex-M3 microcontrollers.
Cortex-M SysTick Defines

libopencm3 Defined Constants and Types for the Cortex SysTick More...

Collaboration diagram for Cortex-M SysTick Defines:

Modules

 STK_CSR Values
 
 STK_RVR Values
 
 STK_CALIB Values
 

Macros

#define STK_CSR   MMIO32(SYS_TICK_BASE + 0x00)
 SysTick Control and Status Register (CSR). More...
 
#define STK_RVR   MMIO32(SYS_TICK_BASE + 0x04)
 SysTick Reload Value Register (RVR). More...
 
#define STK_CVR   MMIO32(SYS_TICK_BASE + 0x08)
 SysTick Current Value Register (CVR). More...
 
#define STK_CALIB   MMIO32(SYS_TICK_BASE + 0x0C)
 SysTick Calibration Value Register(Read Only) (CALIB) Reads the calibration value and parameters for SysTick. More...
 

Functions

void systick_set_reload (uint32_t value)
 SysTick Set the Automatic Reload Value. More...
 
bool systick_set_frequency (uint32_t freq, uint32_t ahb)
 SysTick Set clock and frequency of overflow. More...
 
uint32_t systick_get_reload (void)
 SysTick Read the Automatic Reload Value. More...
 
uint32_t systick_get_value (void)
 Get the current SysTick counter value. More...
 
void systick_set_clocksource (uint8_t clocksource)
 Set the SysTick Clock Source. More...
 
void systick_interrupt_enable (void)
 Enable SysTick Interrupt. More...
 
void systick_interrupt_disable (void)
 Disable SysTick Interrupt. More...
 
void systick_counter_enable (void)
 Enable SysTick Counter. More...
 
void systick_counter_disable (void)
 Disable SysTick Counter. More...
 
uint8_t systick_get_countflag (void)
 SysTick Read the Counter Flag. More...
 
void systick_clear (void)
 SysTick Clear counter Value. More...
 
uint32_t systick_get_calib (void)
 SysTick Get Calibration Value. More...
 

Detailed Description

libopencm3 Defined Constants and Types for the Cortex SysTick

Version
1.0.0
Author
© 2010 Thomas Otto tommi.nosp@m.@via.nosp@m.dmin..nosp@m.org
Date
19 August 2012

System Control Space (SCS) => System timer register support in the SCS. To configure SysTick, load the interval required between SysTick events to the SysTick Reload Value register. The timer interrupt, or COUNTFLAG bit in the SysTick Control and Status register, is activated on the transition from 1 to 0, therefore it activates every n+1 clock ticks. If you require a period of 100, write 99 to the SysTick Reload Value register. The SysTick Reload Value register supports values between 0x1 and 0x00FFFFFF.

If you want to use SysTick to generate an event at a timed interval, for example 1ms, you can use the SysTick Calibration Value Register to scale your value for the Reload register. The SysTick Calibration Value Register is a read-only register that contains the number of pulses for a period of 10ms, in the TENMS field, bits[23:0].

This register also has a SKEW bit. Bit[30] == 1 indicates that the calibration for 10ms in the TENMS section is not exactly 10ms due to clock frequency. Bit[31] == 1 indicates that the reference clock is not provided.

LGPL License Terms libopencm3 License

Macro Definition Documentation

◆ STK_CALIB

#define STK_CALIB   MMIO32(SYS_TICK_BASE + 0x0C)

SysTick Calibration Value Register(Read Only) (CALIB) Reads the calibration value and parameters for SysTick.

Usage constraints: There are no usage constraints. Configurations Always implemented.

Definition at line 90 of file systick.h.

◆ STK_CSR

#define STK_CSR   MMIO32(SYS_TICK_BASE + 0x00)

SysTick Control and Status Register (CSR).

Controls the system timer and provides status data. Usage constraints: There are no usage constraints. Configurations Always implemented.

Definition at line 66 of file systick.h.

◆ STK_CVR

#define STK_CVR   MMIO32(SYS_TICK_BASE + 0x08)

SysTick Current Value Register (CVR).

Holds the current value of the counter. Usage constraints: There are no usage constraints. Configurations Always implemented.

Definition at line 83 of file systick.h.

◆ STK_RVR

#define STK_RVR   MMIO32(SYS_TICK_BASE + 0x04)

SysTick Reload Value Register (RVR).

Reads or clears the value that will be loaded to the counter. Usage constraints:

  • Any write to the register clears the register to zero.
  • The counter does not provide read-modify-write protection.
  • Unsupported bits are read as zero Configurations Always implemented.

Definition at line 76 of file systick.h.

Function Documentation

◆ systick_clear()

void systick_clear ( void  )

SysTick Clear counter Value.

The counter value is cleared. Useful for well defined startup.

Definition at line 188 of file systick.c.

References STK_CVR.

◆ systick_counter_disable()

void systick_counter_disable ( void  )

Disable SysTick Counter.

Definition at line 163 of file systick.c.

References STK_CSR, and STK_CSR_ENABLE.

◆ systick_counter_enable()

void systick_counter_enable ( void  )

Enable SysTick Counter.

Definition at line 153 of file systick.c.

References STK_CSR, and STK_CSR_ENABLE.

◆ systick_get_calib()

uint32_t systick_get_calib ( void  )

SysTick Get Calibration Value.

Returns
Current calibration value

Definition at line 198 of file systick.c.

References STK_CALIB, and STK_CALIB_TENMS.

◆ systick_get_countflag()

uint8_t systick_get_countflag ( void  )

SysTick Read the Counter Flag.

The count flag is set when the timer count becomes zero, and is cleared when the flag is read.

Returns
Boolean if flag set.

Definition at line 177 of file systick.c.

References STK_CSR, and STK_CSR_COUNTFLAG.

◆ systick_get_reload()

uint32_t systick_get_reload ( void  )

SysTick Read the Automatic Reload Value.

Returns
24 bit reload value as uint32_t.

Definition at line 67 of file systick.c.

References STK_RVR, and STK_RVR_RELOAD.

◆ systick_get_value()

uint32_t systick_get_value ( void  )

Get the current SysTick counter value.

Returns
24 bit current value as uint32_t.

Definition at line 109 of file systick.c.

References STK_CVR, and STK_CVR_CURRENT.

◆ systick_interrupt_disable()

void systick_interrupt_disable ( void  )

Disable SysTick Interrupt.

Definition at line 143 of file systick.c.

References STK_CSR, and STK_CSR_TICKINT.

◆ systick_interrupt_enable()

void systick_interrupt_enable ( void  )

Enable SysTick Interrupt.

Definition at line 133 of file systick.c.

References STK_CSR, and STK_CSR_TICKINT.

◆ systick_set_clocksource()

void systick_set_clocksource ( uint8_t  clocksource)

Set the SysTick Clock Source.

The clock source can be either the AHB clock or the same clock divided by 8.

Parameters
[in]clocksourceuint8_t. Clock source from Clock source selection.

Definition at line 122 of file systick.c.

References STK_CSR, and STK_CSR_CLKSOURCE.

Referenced by systick_set_frequency().

Here is the caller graph for this function:

◆ systick_set_frequency()

bool systick_set_frequency ( uint32_t  freq,
uint32_t  ahb 
)

SysTick Set clock and frequency of overflow.

This function sets the systick to AHB clock source, and the prescaler to generate interrupts with the desired frequency. The function fails, if the frequency is too low.

Parameters
[in]frequint32_t The desired frequency in Hz
[in]ahbuint32_t The current AHB frequency in Hz
Returns
true, if success, false if the desired frequency cannot be set.

Definition at line 82 of file systick.c.

References STK_CSR_CLKSOURCE_AHB, STK_CSR_CLKSOURCE_AHB_DIV8, STK_RVR_RELOAD, systick_set_clocksource(), and systick_set_reload().

Here is the call graph for this function:

◆ systick_set_reload()

void systick_set_reload ( uint32_t  value)

SysTick Set the Automatic Reload Value.

The counter is set to the reload value when the counter starts and after it reaches zero.

Note
The systick counter value might be undefined upon startup. To get predictable behavior, it is a good idea to set or clear the counter after set reload.
See also
systick_clear
Parameters
[in]valueuint32_t. 24 bit reload value.

Definition at line 56 of file systick.c.

References STK_RVR, and STK_RVR_RELOAD.

Referenced by systick_set_frequency().

Here is the caller graph for this function: