YAHAL
Yet Another Hardware Abstraction Library
Loading...
Searching...
No Matches
lock_base_msp432.h
1/*
2 * lock_base_msp432.h
3 *
4 * A basic lock implementation for msp432
5 *
6 * Created on: 24.07.2017
7 * Author: Andreas Terstegge
8 */
9
10#ifndef _LOCK_BASE_MSP432_H
11#define _LOCK_BASE_MSP432_H
12
13#include "lock_base_interface.h"
14#include "msp.h"
15#include "core_cm4.h"
16
18{
19 public:
20 lock_base_msp432() : _lock(0) { }
21 virtual ~lock_base_msp432() = default;
22
23 // No copy, no assignment
24 lock_base_msp432 (const lock_base_msp432 &) = delete;
25 lock_base_msp432 & operator= (const lock_base_msp432 &) = delete;
26
27 bool try_lock() override {
28 // Try to get exclusive access
29 if (__LDREXB(&_lock)) return false;
30 // Okay, we got it. Try to set the lock
31 bool res = (__STREXB(1, &_lock) == 0);
32 __DMB();
33 return res;
34 }
35
36 void unlock() override {
37 __DMB();
38 _lock = 0;
39 }
40
41 bool is_locked() override {
42 __DMB();
43 return (_lock);
44 }
45
46 private:
47 uint8_t _lock;
48};
49
50#endif // _LOCK_BASE_MSP432_H
#define __DMB()
Data Memory Barrier.