mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

UserRevisionLine numberNew 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 }