PES4 / Mbed OS Queue_02
Committer:
demayer
Date:
Sat Mar 28 15:28:19 2020 +0000
Revision:
0:6bf0743ece18
IMU Thread with an event-queue running parallel to handle tasks like a 5 times blinking LED. Button with interrupt detected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
demayer 0:6bf0743ece18 1 /* mbed Microcontroller Library
demayer 0:6bf0743ece18 2 * (C)Copyright TOSHIBA ELECTRONIC DEVICES & STORAGE CORPORATION 2017 All rights reserved
demayer 0:6bf0743ece18 3 *
demayer 0:6bf0743ece18 4 * Licensed under the Apache License, Version 2.0 (the "License");
demayer 0:6bf0743ece18 5 * you may not use this file except in compliance with the License.
demayer 0:6bf0743ece18 6 * You may obtain a copy of the License at
demayer 0:6bf0743ece18 7 *
demayer 0:6bf0743ece18 8 * http://www.apache.org/licenses/LICENSE-2.0
demayer 0:6bf0743ece18 9 *
demayer 0:6bf0743ece18 10 * Unless required by applicable law or agreed to in writing, software
demayer 0:6bf0743ece18 11 * distributed under the License is distributed on an "AS IS" BASIS,
demayer 0:6bf0743ece18 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
demayer 0:6bf0743ece18 13 * See the License for the specific language governing permissions and
demayer 0:6bf0743ece18 14 * limitations under the License.
demayer 0:6bf0743ece18 15 */
demayer 0:6bf0743ece18 16 #include "mbed_assert.h"
demayer 0:6bf0743ece18 17 #include "pinmap.h"
demayer 0:6bf0743ece18 18 #include "tmpm066_gpio.h"
demayer 0:6bf0743ece18 19
demayer 0:6bf0743ece18 20 #define PIN_FUNC_MAX 6
demayer 0:6bf0743ece18 21
demayer 0:6bf0743ece18 22 void pin_function(PinName pin, int function)
demayer 0:6bf0743ece18 23 {
demayer 0:6bf0743ece18 24 uint32_t port = 0;
demayer 0:6bf0743ece18 25 uint8_t bit = 0;
demayer 0:6bf0743ece18 26 uint8_t i = 0;
demayer 0:6bf0743ece18 27 uint8_t func = 0;
demayer 0:6bf0743ece18 28 uint8_t dir = 0;
demayer 0:6bf0743ece18 29
demayer 0:6bf0743ece18 30 // Assert that pin is valid
demayer 0:6bf0743ece18 31 MBED_ASSERT(pin != NC);
demayer 0:6bf0743ece18 32
demayer 0:6bf0743ece18 33 // Calculate pin function and pin direction
demayer 0:6bf0743ece18 34 func = PIN_FUNC(function);
demayer 0:6bf0743ece18 35 dir = PIN_DIR(function);
demayer 0:6bf0743ece18 36 // Calculate port and pin position
demayer 0:6bf0743ece18 37 port = PIN_PORT(pin);
demayer 0:6bf0743ece18 38 bit = PIN_POS(pin);
demayer 0:6bf0743ece18 39 // Set function if function is in range
demayer 0:6bf0743ece18 40 if (func <= PIN_FUNC_MAX) {
demayer 0:6bf0743ece18 41 // Disable other functions
demayer 0:6bf0743ece18 42 for (i = 0; i < PIN_FUNC_MAX; i++) {
demayer 0:6bf0743ece18 43 if (i != (func - 1)) {
demayer 0:6bf0743ece18 44 GPIO_DisableFuncReg((GPIO_Port)port, i, (1 << bit));
demayer 0:6bf0743ece18 45 }
demayer 0:6bf0743ece18 46 }
demayer 0:6bf0743ece18 47 // Set pin function
demayer 0:6bf0743ece18 48 if (func) {
demayer 0:6bf0743ece18 49 GPIO_EnableFuncReg((GPIO_Port)port, (uint8_t)(func - 1), (1 << bit));
demayer 0:6bf0743ece18 50 }
demayer 0:6bf0743ece18 51 }
demayer 0:6bf0743ece18 52
demayer 0:6bf0743ece18 53 // Set direction if direction is in range
demayer 0:6bf0743ece18 54 switch (dir) {
demayer 0:6bf0743ece18 55 case PIN_INPUT:
demayer 0:6bf0743ece18 56 GPIO_SetInputEnableReg((GPIO_Port)port, (1 << bit), ENABLE);
demayer 0:6bf0743ece18 57 GPIO_SetOutputEnableReg((GPIO_Port)port, (1 << bit), DISABLE);
demayer 0:6bf0743ece18 58 break;
demayer 0:6bf0743ece18 59 case PIN_OUTPUT:
demayer 0:6bf0743ece18 60 GPIO_SetOutputEnableReg((GPIO_Port)port, (1 << bit), ENABLE);
demayer 0:6bf0743ece18 61 GPIO_SetInputEnableReg((GPIO_Port)port, (1 << bit), DISABLE);
demayer 0:6bf0743ece18 62 break;
demayer 0:6bf0743ece18 63 case PIN_INOUT:
demayer 0:6bf0743ece18 64 GPIO_SetOutputEnableReg((GPIO_Port)port, (1 << bit), ENABLE);
demayer 0:6bf0743ece18 65 GPIO_SetInputEnableReg((GPIO_Port)port, (1 << bit), ENABLE);
demayer 0:6bf0743ece18 66 break;
demayer 0:6bf0743ece18 67 default:
demayer 0:6bf0743ece18 68 break;
demayer 0:6bf0743ece18 69 }
demayer 0:6bf0743ece18 70 }
demayer 0:6bf0743ece18 71
demayer 0:6bf0743ece18 72 void pin_mode(PinName pin, PinMode mode)
demayer 0:6bf0743ece18 73 {
demayer 0:6bf0743ece18 74 uint32_t port = 0;
demayer 0:6bf0743ece18 75 uint8_t bit = 0;
demayer 0:6bf0743ece18 76
demayer 0:6bf0743ece18 77 // Assert that pin is valid
demayer 0:6bf0743ece18 78 MBED_ASSERT(pin != NC);
demayer 0:6bf0743ece18 79
demayer 0:6bf0743ece18 80 // Check if function is in range
demayer 0:6bf0743ece18 81 if (mode > OpenDrain) {
demayer 0:6bf0743ece18 82 return;
demayer 0:6bf0743ece18 83 }
demayer 0:6bf0743ece18 84 // Calculate port and pin position
demayer 0:6bf0743ece18 85 port = PIN_PORT(pin);
demayer 0:6bf0743ece18 86 bit = PIN_POS(pin);
demayer 0:6bf0743ece18 87 // Set pin mode
demayer 0:6bf0743ece18 88 switch (mode) {
demayer 0:6bf0743ece18 89 case PullNone:
demayer 0:6bf0743ece18 90 GPIO_SetPullUp((GPIO_Port)port, (1 << bit), DISABLE);
demayer 0:6bf0743ece18 91 GPIO_SetPullDown((GPIO_Port)port, (1 << bit), DISABLE);
demayer 0:6bf0743ece18 92 GPIO_SetOpenDrain((GPIO_Port)port, (1 << bit), DISABLE);
demayer 0:6bf0743ece18 93 break;
demayer 0:6bf0743ece18 94 case PullUp:
demayer 0:6bf0743ece18 95 GPIO_SetPullUp((GPIO_Port)port, (1 << bit), ENABLE);
demayer 0:6bf0743ece18 96 break;
demayer 0:6bf0743ece18 97 case PullDown:
demayer 0:6bf0743ece18 98 GPIO_SetPullDown((GPIO_Port)port, (1 << bit), ENABLE);
demayer 0:6bf0743ece18 99 break;
demayer 0:6bf0743ece18 100 case OpenDrain:
demayer 0:6bf0743ece18 101 GPIO_SetOpenDrain((GPIO_Port)port, (1 << bit), ENABLE);
demayer 0:6bf0743ece18 102 break;
demayer 0:6bf0743ece18 103 default:
demayer 0:6bf0743ece18 104 break;
demayer 0:6bf0743ece18 105 }
demayer 0:6bf0743ece18 106 }