mbed-os
Dependents: cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more
features/FEATURE_COMMON_PAL/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c@0:b74591d5ab33, 2017-12-11 (annotated)
- Committer:
- be_bryan
- Date:
- Mon Dec 11 17:54:04 2017 +0000
- Revision:
- 0:b74591d5ab33
motor ++
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
be_bryan | 0:b74591d5ab33 | 1 | /* |
be_bryan | 0:b74591d5ab33 | 2 | * Copyright (c) 2016 ARM Limited, All Rights Reserved |
be_bryan | 0:b74591d5ab33 | 3 | */ |
be_bryan | 0:b74591d5ab33 | 4 | |
be_bryan | 0:b74591d5ab33 | 5 | #include "arm_hal_interrupt.h" |
be_bryan | 0:b74591d5ab33 | 6 | #include "arm_hal_interrupt_private.h" |
be_bryan | 0:b74591d5ab33 | 7 | #include "cmsis_os2.h" |
be_bryan | 0:b74591d5ab33 | 8 | #include "mbed_rtos_storage.h" |
be_bryan | 0:b74591d5ab33 | 9 | #include <mbed_assert.h> |
be_bryan | 0:b74591d5ab33 | 10 | |
be_bryan | 0:b74591d5ab33 | 11 | static uint8_t sys_irq_disable_counter; |
be_bryan | 0:b74591d5ab33 | 12 | |
be_bryan | 0:b74591d5ab33 | 13 | static mbed_rtos_storage_mutex_t critical_mutex; |
be_bryan | 0:b74591d5ab33 | 14 | static const osMutexAttr_t critical_mutex_attr = { |
be_bryan | 0:b74591d5ab33 | 15 | .name = "nanostack_critical_mutex", |
be_bryan | 0:b74591d5ab33 | 16 | .attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust, |
be_bryan | 0:b74591d5ab33 | 17 | .cb_mem = &critical_mutex, |
be_bryan | 0:b74591d5ab33 | 18 | .cb_size = sizeof critical_mutex, |
be_bryan | 0:b74591d5ab33 | 19 | }; |
be_bryan | 0:b74591d5ab33 | 20 | static osMutexId_t critical_mutex_id; |
be_bryan | 0:b74591d5ab33 | 21 | |
be_bryan | 0:b74591d5ab33 | 22 | void platform_critical_init(void) |
be_bryan | 0:b74591d5ab33 | 23 | { |
be_bryan | 0:b74591d5ab33 | 24 | critical_mutex_id = osMutexNew(&critical_mutex_attr); |
be_bryan | 0:b74591d5ab33 | 25 | MBED_ASSERT(critical_mutex_id); |
be_bryan | 0:b74591d5ab33 | 26 | } |
be_bryan | 0:b74591d5ab33 | 27 | |
be_bryan | 0:b74591d5ab33 | 28 | void platform_enter_critical(void) |
be_bryan | 0:b74591d5ab33 | 29 | { |
be_bryan | 0:b74591d5ab33 | 30 | osMutexAcquire(critical_mutex_id, osWaitForever); |
be_bryan | 0:b74591d5ab33 | 31 | sys_irq_disable_counter++; |
be_bryan | 0:b74591d5ab33 | 32 | } |
be_bryan | 0:b74591d5ab33 | 33 | |
be_bryan | 0:b74591d5ab33 | 34 | void platform_exit_critical(void) |
be_bryan | 0:b74591d5ab33 | 35 | { |
be_bryan | 0:b74591d5ab33 | 36 | --sys_irq_disable_counter; |
be_bryan | 0:b74591d5ab33 | 37 | osMutexRelease(critical_mutex_id); |
be_bryan | 0:b74591d5ab33 | 38 | } |