AKOS  v1.0.0
Documentation
Loading...
Searching...
No Matches
port.h
Go to the documentation of this file.
1/****************************************************************************/
12
13#ifndef PORT_H
14#define PORT_H
15
16#include <stdint.h>
17#include <stddef.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23static inline uint32_t port_get_primask(void)
24{
25 uint32_t primask;
26 __asm volatile("MRS %0, PRIMASK" : "=r"(primask) :: "memory");
27 return primask;
28}
29
30static inline void port_set_primask(uint32_t primask)
31{
32 __asm volatile("MSR PRIMASK, %0" :: "r"(primask) : "memory");
33}
34
39void akos_port_systick_init_freq(uint32_t cpu_freq);
40
45
54uint32_t *akos_port_task_stack_init(uint32_t *p_stack,
55 size_t stack_size,
56 void (*pf_task)(void *),
57 void *p_arg);
58
59#define port_disable_interrupts { __asm volatile("CPSID I" ::: "memory"); }
60#define port_enable_interrupts { __asm volatile("CPSIE I" ::: "memory"); }
61
62/* Make PendSV and SysTick the lowest priority interrupts. */
63#define port_setup_PendSV() (*(uint32_t volatile *)0xE000ED20 |= (0xFFU << 16))
64#define port_trigger_PendSV() (*(uint32_t volatile *)0xE000ED04 = (1U << 28))
65
66#define port_SVCHandler SVC_Handler
67#define port_PendSVHandler PendSV_Handler
68#define port_SysTickHandler SysTick_Handler
69
70#ifdef __cplusplus
71}
72#endif
73
74#endif
uint32_t * akos_port_task_stack_init(uint32_t *p_stack, size_t stack_size, void(*pf_task)(void *), void *p_arg)
Build the initial Cortex-M thread stack frame.
Definition port.c:69
void akos_port_start_first_task(void)
Start the first thread by restoring the initial exception context.
Definition port.c:43
void akos_port_systick_init_freq(uint32_t cpu_freq)
Configure SysTick to generate 1ms OS ticks.
Definition port.c:26