YAHAL
Yet Another Hardware Abstraction Library
Loading...
Searching...
No Matches
lock_base_rp2040.h
1/*
2 * lock_base_rp2040.h
3 *
4 * A basic lock implementation for rp2040
5 *
6 * Created on: 05.11.2022
7 * Author: Andreas Terstegge
8 */
9
10#ifndef _LOCK_BASE_RP2040_H
11#define _LOCK_BASE_RP2040_H
12
13#include "lock_base_interface.h"
14#include "RP2040.h"
15#include <cstdint>
16using namespace _SIO_;
17
19{
20 public:
22 virtual ~lock_base_rp2040();
23
24 // No copy, no assignment
25 lock_base_rp2040 (const lock_base_rp2040 &) = delete;
26 lock_base_rp2040 & operator= (const lock_base_rp2040 &) = delete;
27
28 inline bool try_lock() override {
29 return *_lock;
30 }
31
32 inline void unlock() override {
33 *_lock = 1;
34 }
35
36 inline bool is_locked() override {
37 return SIO.SPINLOCK_ST & _mask;
38 }
39
40 private:
41 static uint32_t _index;
42 uint32_t _mask;
43 SPINLOCK_t * _lock;
44};
45
46#endif // _LOCK_BASE_RP2040_H
CMSIS-Core(M) Device Peripheral Access Layer Header File for Device RP2040.