FRDM K64F Metronome

Committer:
ram54288
Date:
Sun May 14 18:35:07 2017 +0000
Revision:
0:a2cb7295a1f7
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ram54288 0:a2cb7295a1f7 1 /*
ram54288 0:a2cb7295a1f7 2 * Copyright (c) 2016 ARM Limited. All rights reserved.
ram54288 0:a2cb7295a1f7 3 * SPDX-License-Identifier: Apache-2.0
ram54288 0:a2cb7295a1f7 4 * Licensed under the Apache License, Version 2.0 (the License); you may
ram54288 0:a2cb7295a1f7 5 * not use this file except in compliance with the License.
ram54288 0:a2cb7295a1f7 6 * You may obtain a copy of the License at
ram54288 0:a2cb7295a1f7 7 *
ram54288 0:a2cb7295a1f7 8 * http://www.apache.org/licenses/LICENSE-2.0
ram54288 0:a2cb7295a1f7 9 *
ram54288 0:a2cb7295a1f7 10 * Unless required by applicable law or agreed to in writing, software
ram54288 0:a2cb7295a1f7 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
ram54288 0:a2cb7295a1f7 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ram54288 0:a2cb7295a1f7 13 * See the License for the specific language governing permissions and
ram54288 0:a2cb7295a1f7 14 * limitations under the License.
ram54288 0:a2cb7295a1f7 15 */
ram54288 0:a2cb7295a1f7 16
ram54288 0:a2cb7295a1f7 17
ram54288 0:a2cb7295a1f7 18 #include "pal_rtos.h"
ram54288 0:a2cb7295a1f7 19 #include "pal_plat_rtos.h"
ram54288 0:a2cb7295a1f7 20
ram54288 0:a2cb7295a1f7 21 #if PAL_UNIQUE_THREAD_PRIORITY
ram54288 0:a2cb7295a1f7 22 //! Threads priorities array.
ram54288 0:a2cb7295a1f7 23 uint8_t g_palThreadPriorities[PAL_MAX_NUMBER_OF_THREADS] = {0};
ram54288 0:a2cb7295a1f7 24 #endif //PAL_UNIQUE_THREAD_PRIORITY
ram54288 0:a2cb7295a1f7 25
ram54288 0:a2cb7295a1f7 26 void pal_osReboot(void)
ram54288 0:a2cb7295a1f7 27 {
ram54288 0:a2cb7295a1f7 28 pal_plat_osReboot();
ram54288 0:a2cb7295a1f7 29 }
ram54288 0:a2cb7295a1f7 30
ram54288 0:a2cb7295a1f7 31 uint32_t pal_osKernelSysTick(void)
ram54288 0:a2cb7295a1f7 32 {
ram54288 0:a2cb7295a1f7 33 uint32_t result;
ram54288 0:a2cb7295a1f7 34 result = pal_plat_osKernelSysTick();
ram54288 0:a2cb7295a1f7 35 return result;
ram54288 0:a2cb7295a1f7 36 }
ram54288 0:a2cb7295a1f7 37
ram54288 0:a2cb7295a1f7 38
ram54288 0:a2cb7295a1f7 39 uint64_t pal_osKernelSysTick64(void)
ram54288 0:a2cb7295a1f7 40 {
ram54288 0:a2cb7295a1f7 41
ram54288 0:a2cb7295a1f7 42 #if PAL_RTOS_64BIT_TICK_SUPPORTED
ram54288 0:a2cb7295a1f7 43 uint64_t result;
ram54288 0:a2cb7295a1f7 44 result = pal_plat_osKernelSysTick64();
ram54288 0:a2cb7295a1f7 45 return result;
ram54288 0:a2cb7295a1f7 46 #else
ram54288 0:a2cb7295a1f7 47 static uint64_t lastValue = 0;
ram54288 0:a2cb7295a1f7 48 static uint64_t wraparoundsDetected = 0;
ram54288 0:a2cb7295a1f7 49 const uint64_t one = 1;
ram54288 0:a2cb7295a1f7 50 uint64_t tmp = pal_plat_osKernelSysTick() + (wraparoundsDetected << 32);
ram54288 0:a2cb7295a1f7 51 if (tmp < lastValue) //erez's "wraparound algorithm" if we detect a wrap around add 1 to the higher 32 bits
ram54288 0:a2cb7295a1f7 52 {
ram54288 0:a2cb7295a1f7 53 tmp = tmp + (one << 32);
ram54288 0:a2cb7295a1f7 54 wraparoundsDetected++;
ram54288 0:a2cb7295a1f7 55 }
ram54288 0:a2cb7295a1f7 56 lastValue = tmp;
ram54288 0:a2cb7295a1f7 57 return (uint64_t)tmp;
ram54288 0:a2cb7295a1f7 58 #endif
ram54288 0:a2cb7295a1f7 59 }
ram54288 0:a2cb7295a1f7 60
ram54288 0:a2cb7295a1f7 61 uint64_t pal_osKernelSysTickMicroSec(uint64_t microseconds)
ram54288 0:a2cb7295a1f7 62 {
ram54288 0:a2cb7295a1f7 63 uint64_t result;
ram54288 0:a2cb7295a1f7 64 result = pal_plat_osKernelSysTickMicroSec(microseconds);
ram54288 0:a2cb7295a1f7 65 return result;
ram54288 0:a2cb7295a1f7 66 }
ram54288 0:a2cb7295a1f7 67
ram54288 0:a2cb7295a1f7 68 uint64_t pal_osKernelSysMilliSecTick(uint64_t sysTicks)
ram54288 0:a2cb7295a1f7 69 {
ram54288 0:a2cb7295a1f7 70 uint64_t result;
ram54288 0:a2cb7295a1f7 71 result = pal_plat_osKernelSysMilliSecTick(sysTicks);
ram54288 0:a2cb7295a1f7 72 return result;
ram54288 0:a2cb7295a1f7 73 }
ram54288 0:a2cb7295a1f7 74
ram54288 0:a2cb7295a1f7 75 uint64_t pal_osKernelSysTickFrequency(void)
ram54288 0:a2cb7295a1f7 76 {
ram54288 0:a2cb7295a1f7 77 uint64_t result;
ram54288 0:a2cb7295a1f7 78 result = pal_plat_osKernelSysTickFrequency();
ram54288 0:a2cb7295a1f7 79 return result;
ram54288 0:a2cb7295a1f7 80 }
ram54288 0:a2cb7295a1f7 81
ram54288 0:a2cb7295a1f7 82 palStatus_t pal_osThreadCreate(palThreadFuncPtr function, void* funcArgument, palThreadPriority_t priority, uint32_t stackSize, uint32_t* stackPtr, palThreadLocalStore_t* store, palThreadID_t* threadID)
ram54288 0:a2cb7295a1f7 83 {
ram54288 0:a2cb7295a1f7 84 palStatus_t status = PAL_SUCCESS;
ram54288 0:a2cb7295a1f7 85
ram54288 0:a2cb7295a1f7 86 #if PAL_UNIQUE_THREAD_PRIORITY
ram54288 0:a2cb7295a1f7 87 //! check if the priority have been used by other thread before
ram54288 0:a2cb7295a1f7 88 if(PAL_osPriorityError == priority)
ram54288 0:a2cb7295a1f7 89 {
ram54288 0:a2cb7295a1f7 90 status = PAL_ERR_INVALID_ARGUMENT;
ram54288 0:a2cb7295a1f7 91 }
ram54288 0:a2cb7295a1f7 92
ram54288 0:a2cb7295a1f7 93 if ((PAL_SUCCESS == status) && (g_palThreadPriorities[priority+PRIORYT_INDEX_OFFSET]))
ram54288 0:a2cb7295a1f7 94 {
ram54288 0:a2cb7295a1f7 95 *threadID = NULLPTR;
ram54288 0:a2cb7295a1f7 96 status = PAL_ERR_RTOS_PRIORITY;
ram54288 0:a2cb7295a1f7 97 }
ram54288 0:a2cb7295a1f7 98 #endif //PAL_IGNORE_UNIQUE_THREAD_PRIORITY
ram54288 0:a2cb7295a1f7 99
ram54288 0:a2cb7295a1f7 100 if (PAL_SUCCESS == status)
ram54288 0:a2cb7295a1f7 101 {
ram54288 0:a2cb7295a1f7 102 status = pal_plat_osThreadCreate(function, funcArgument, priority, stackSize, stackPtr, store, threadID);
ram54288 0:a2cb7295a1f7 103 }
ram54288 0:a2cb7295a1f7 104 return status;
ram54288 0:a2cb7295a1f7 105 }
ram54288 0:a2cb7295a1f7 106
ram54288 0:a2cb7295a1f7 107 palStatus_t pal_osThreadTerminate(palThreadID_t* threadID)
ram54288 0:a2cb7295a1f7 108 {
ram54288 0:a2cb7295a1f7 109 palStatus_t status;
ram54288 0:a2cb7295a1f7 110 status = pal_plat_osThreadTerminate(threadID);
ram54288 0:a2cb7295a1f7 111 return status;
ram54288 0:a2cb7295a1f7 112 }
ram54288 0:a2cb7295a1f7 113
ram54288 0:a2cb7295a1f7 114 palThreadID_t pal_osThreadGetId(void)
ram54288 0:a2cb7295a1f7 115 {
ram54288 0:a2cb7295a1f7 116 palThreadID_t result;
ram54288 0:a2cb7295a1f7 117 result = pal_plat_osThreadGetId();
ram54288 0:a2cb7295a1f7 118 return result;
ram54288 0:a2cb7295a1f7 119 }
ram54288 0:a2cb7295a1f7 120
ram54288 0:a2cb7295a1f7 121 void* pal_osThreadGetLocalStore(void)
ram54288 0:a2cb7295a1f7 122 {
ram54288 0:a2cb7295a1f7 123 void* result;
ram54288 0:a2cb7295a1f7 124 result = pal_plat_osThreadGetLocalStore();
ram54288 0:a2cb7295a1f7 125 return result;
ram54288 0:a2cb7295a1f7 126 }
ram54288 0:a2cb7295a1f7 127
ram54288 0:a2cb7295a1f7 128 palStatus_t pal_osDelay(uint32_t milliseconds)
ram54288 0:a2cb7295a1f7 129 {
ram54288 0:a2cb7295a1f7 130 palStatus_t status;
ram54288 0:a2cb7295a1f7 131 status = pal_plat_osDelay(milliseconds);
ram54288 0:a2cb7295a1f7 132 return status;
ram54288 0:a2cb7295a1f7 133 }
ram54288 0:a2cb7295a1f7 134
ram54288 0:a2cb7295a1f7 135
ram54288 0:a2cb7295a1f7 136 palStatus_t pal_osTimerCreate(palTimerFuncPtr function, void* funcArgument, palTimerType_t timerType, palTimerID_t* timerID)
ram54288 0:a2cb7295a1f7 137 {
ram54288 0:a2cb7295a1f7 138 palStatus_t status;
ram54288 0:a2cb7295a1f7 139 status = pal_plat_osTimerCreate(function, funcArgument, timerType, timerID);
ram54288 0:a2cb7295a1f7 140 return status;
ram54288 0:a2cb7295a1f7 141 }
ram54288 0:a2cb7295a1f7 142
ram54288 0:a2cb7295a1f7 143 palStatus_t pal_osTimerStart(palTimerID_t timerID, uint32_t millisec)
ram54288 0:a2cb7295a1f7 144 {
ram54288 0:a2cb7295a1f7 145 palStatus_t status;
ram54288 0:a2cb7295a1f7 146 status = pal_plat_osTimerStart(timerID, millisec);
ram54288 0:a2cb7295a1f7 147 return status;
ram54288 0:a2cb7295a1f7 148 }
ram54288 0:a2cb7295a1f7 149
ram54288 0:a2cb7295a1f7 150 palStatus_t pal_osTimerStop(palTimerID_t timerID)
ram54288 0:a2cb7295a1f7 151 {
ram54288 0:a2cb7295a1f7 152 palStatus_t status;
ram54288 0:a2cb7295a1f7 153 status = pal_plat_osTimerStop(timerID);
ram54288 0:a2cb7295a1f7 154 return status;
ram54288 0:a2cb7295a1f7 155 }
ram54288 0:a2cb7295a1f7 156
ram54288 0:a2cb7295a1f7 157 palStatus_t pal_osTimerDelete(palTimerID_t* timerID)
ram54288 0:a2cb7295a1f7 158 {
ram54288 0:a2cb7295a1f7 159 palStatus_t status;
ram54288 0:a2cb7295a1f7 160 status = pal_plat_osTimerDelete(timerID);
ram54288 0:a2cb7295a1f7 161 return status;
ram54288 0:a2cb7295a1f7 162 }
ram54288 0:a2cb7295a1f7 163
ram54288 0:a2cb7295a1f7 164 palStatus_t pal_osMutexCreate(palMutexID_t* mutexID)
ram54288 0:a2cb7295a1f7 165 {
ram54288 0:a2cb7295a1f7 166 palStatus_t status;
ram54288 0:a2cb7295a1f7 167 status = pal_plat_osMutexCreate(mutexID);
ram54288 0:a2cb7295a1f7 168 return status;
ram54288 0:a2cb7295a1f7 169 }
ram54288 0:a2cb7295a1f7 170
ram54288 0:a2cb7295a1f7 171 palStatus_t pal_osMutexWait(palMutexID_t mutexID, uint32_t millisec)
ram54288 0:a2cb7295a1f7 172 {
ram54288 0:a2cb7295a1f7 173 palStatus_t status;
ram54288 0:a2cb7295a1f7 174 status = pal_plat_osMutexWait(mutexID, millisec);
ram54288 0:a2cb7295a1f7 175 return status;
ram54288 0:a2cb7295a1f7 176 }
ram54288 0:a2cb7295a1f7 177
ram54288 0:a2cb7295a1f7 178 palStatus_t pal_osMutexRelease(palMutexID_t mutexID)
ram54288 0:a2cb7295a1f7 179 {
ram54288 0:a2cb7295a1f7 180 palStatus_t status;
ram54288 0:a2cb7295a1f7 181 status = pal_plat_osMutexRelease(mutexID);
ram54288 0:a2cb7295a1f7 182 return status;
ram54288 0:a2cb7295a1f7 183 }
ram54288 0:a2cb7295a1f7 184
ram54288 0:a2cb7295a1f7 185 palStatus_t pal_osMutexDelete(palMutexID_t* mutexID)
ram54288 0:a2cb7295a1f7 186 {
ram54288 0:a2cb7295a1f7 187 palStatus_t status;
ram54288 0:a2cb7295a1f7 188 status = pal_plat_osMutexDelete(mutexID);
ram54288 0:a2cb7295a1f7 189 return status;
ram54288 0:a2cb7295a1f7 190 }
ram54288 0:a2cb7295a1f7 191 palStatus_t pal_osSemaphoreCreate(uint32_t count, palSemaphoreID_t* semaphoreID)
ram54288 0:a2cb7295a1f7 192 {
ram54288 0:a2cb7295a1f7 193 palStatus_t status;
ram54288 0:a2cb7295a1f7 194 status = pal_plat_osSemaphoreCreate(count, semaphoreID);
ram54288 0:a2cb7295a1f7 195 return status;
ram54288 0:a2cb7295a1f7 196 }
ram54288 0:a2cb7295a1f7 197
ram54288 0:a2cb7295a1f7 198 palStatus_t pal_osSemaphoreWait(palSemaphoreID_t semaphoreID, uint32_t millisec, int32_t* countersAvailable)
ram54288 0:a2cb7295a1f7 199 {
ram54288 0:a2cb7295a1f7 200 palStatus_t status;
ram54288 0:a2cb7295a1f7 201 status = pal_plat_osSemaphoreWait(semaphoreID, millisec, countersAvailable);
ram54288 0:a2cb7295a1f7 202 return status;
ram54288 0:a2cb7295a1f7 203 }
ram54288 0:a2cb7295a1f7 204
ram54288 0:a2cb7295a1f7 205 palStatus_t pal_osSemaphoreRelease(palSemaphoreID_t semaphoreID)
ram54288 0:a2cb7295a1f7 206 {
ram54288 0:a2cb7295a1f7 207 palStatus_t status;
ram54288 0:a2cb7295a1f7 208 status = pal_plat_osSemaphoreRelease(semaphoreID);
ram54288 0:a2cb7295a1f7 209 return status;
ram54288 0:a2cb7295a1f7 210 }
ram54288 0:a2cb7295a1f7 211
ram54288 0:a2cb7295a1f7 212 palStatus_t pal_osSemaphoreDelete(palSemaphoreID_t* semaphoreID)
ram54288 0:a2cb7295a1f7 213 {
ram54288 0:a2cb7295a1f7 214 palStatus_t status;
ram54288 0:a2cb7295a1f7 215 status = pal_plat_osSemaphoreDelete(semaphoreID);
ram54288 0:a2cb7295a1f7 216 return status;
ram54288 0:a2cb7295a1f7 217 }
ram54288 0:a2cb7295a1f7 218
ram54288 0:a2cb7295a1f7 219 palStatus_t pal_osPoolCreate(uint32_t blockSize, uint32_t blockCount, palMemoryPoolID_t* memoryPoolID)
ram54288 0:a2cb7295a1f7 220 {
ram54288 0:a2cb7295a1f7 221 palStatus_t status;
ram54288 0:a2cb7295a1f7 222 status = pal_plat_osPoolCreate(blockSize, blockCount, memoryPoolID);
ram54288 0:a2cb7295a1f7 223 return status;
ram54288 0:a2cb7295a1f7 224 }
ram54288 0:a2cb7295a1f7 225
ram54288 0:a2cb7295a1f7 226 void* pal_osPoolAlloc(palMemoryPoolID_t memoryPoolID)
ram54288 0:a2cb7295a1f7 227 {
ram54288 0:a2cb7295a1f7 228 void* result;
ram54288 0:a2cb7295a1f7 229 result = pal_plat_osPoolAlloc(memoryPoolID);
ram54288 0:a2cb7295a1f7 230 return result;
ram54288 0:a2cb7295a1f7 231 }
ram54288 0:a2cb7295a1f7 232
ram54288 0:a2cb7295a1f7 233 void* pal_osPoolCAlloc(palMemoryPoolID_t memoryPoolID)
ram54288 0:a2cb7295a1f7 234 {
ram54288 0:a2cb7295a1f7 235 void* result;
ram54288 0:a2cb7295a1f7 236 //TODO(nirson01): debug print in case of failed alloc?
ram54288 0:a2cb7295a1f7 237 result = pal_plat_osPoolCAlloc(memoryPoolID);
ram54288 0:a2cb7295a1f7 238 return result;
ram54288 0:a2cb7295a1f7 239 }
ram54288 0:a2cb7295a1f7 240
ram54288 0:a2cb7295a1f7 241 palStatus_t pal_osPoolFree(palMemoryPoolID_t memoryPoolID, void* block)
ram54288 0:a2cb7295a1f7 242 {
ram54288 0:a2cb7295a1f7 243 palStatus_t status;
ram54288 0:a2cb7295a1f7 244 //TODO(nirson01): debug print in case of failed alloc?
ram54288 0:a2cb7295a1f7 245 status = pal_plat_osPoolFree(memoryPoolID, block);
ram54288 0:a2cb7295a1f7 246 return status;
ram54288 0:a2cb7295a1f7 247 }
ram54288 0:a2cb7295a1f7 248
ram54288 0:a2cb7295a1f7 249 palStatus_t pal_osPoolDestroy(palMemoryPoolID_t* memoryPoolID)
ram54288 0:a2cb7295a1f7 250 {
ram54288 0:a2cb7295a1f7 251 palStatus_t status;
ram54288 0:a2cb7295a1f7 252 status = pal_plat_osPoolDestroy(memoryPoolID);
ram54288 0:a2cb7295a1f7 253 return status;
ram54288 0:a2cb7295a1f7 254 }
ram54288 0:a2cb7295a1f7 255
ram54288 0:a2cb7295a1f7 256 palStatus_t pal_osMessageQueueCreate(uint32_t messageQSize, palMessageQID_t* messageQID)
ram54288 0:a2cb7295a1f7 257 {
ram54288 0:a2cb7295a1f7 258 palStatus_t status;
ram54288 0:a2cb7295a1f7 259 status = pal_plat_osMessageQueueCreate(messageQSize, messageQID);
ram54288 0:a2cb7295a1f7 260 return status;
ram54288 0:a2cb7295a1f7 261 }
ram54288 0:a2cb7295a1f7 262
ram54288 0:a2cb7295a1f7 263 palStatus_t pal_osMessagePut(palMessageQID_t messageQID, uint32_t info, uint32_t timeout)
ram54288 0:a2cb7295a1f7 264 {
ram54288 0:a2cb7295a1f7 265 palStatus_t status;
ram54288 0:a2cb7295a1f7 266 status = pal_plat_osMessagePut(messageQID, info, timeout);
ram54288 0:a2cb7295a1f7 267 return status;
ram54288 0:a2cb7295a1f7 268 }
ram54288 0:a2cb7295a1f7 269
ram54288 0:a2cb7295a1f7 270 palStatus_t pal_osMessageGet(palMessageQID_t messageQID, uint32_t timeout, uint32_t* messageValue)
ram54288 0:a2cb7295a1f7 271 {
ram54288 0:a2cb7295a1f7 272 palStatus_t status;
ram54288 0:a2cb7295a1f7 273 status = pal_plat_osMessageGet(messageQID, timeout, messageValue);
ram54288 0:a2cb7295a1f7 274 return status;
ram54288 0:a2cb7295a1f7 275 }
ram54288 0:a2cb7295a1f7 276
ram54288 0:a2cb7295a1f7 277 palStatus_t pal_osMessageQueueDestroy(palMessageQID_t* messageQID)
ram54288 0:a2cb7295a1f7 278 {
ram54288 0:a2cb7295a1f7 279 palStatus_t status;
ram54288 0:a2cb7295a1f7 280 status = pal_plat_osMessageQueueDestroy(messageQID);
ram54288 0:a2cb7295a1f7 281 return status;
ram54288 0:a2cb7295a1f7 282 }
ram54288 0:a2cb7295a1f7 283
ram54288 0:a2cb7295a1f7 284 int32_t pal_osAtomicIncrement(int32_t* valuePtr, int32_t increment)
ram54288 0:a2cb7295a1f7 285 {
ram54288 0:a2cb7295a1f7 286 int32_t result;
ram54288 0:a2cb7295a1f7 287 result = pal_plat_osAtomicIncrement(valuePtr, increment);
ram54288 0:a2cb7295a1f7 288 return result;
ram54288 0:a2cb7295a1f7 289 }
ram54288 0:a2cb7295a1f7 290
ram54288 0:a2cb7295a1f7 291
ram54288 0:a2cb7295a1f7 292
ram54288 0:a2cb7295a1f7 293 #ifdef DEBUG
ram54288 0:a2cb7295a1f7 294 #include "stdarg.h"
ram54288 0:a2cb7295a1f7 295 #endif
ram54288 0:a2cb7295a1f7 296
ram54288 0:a2cb7295a1f7 297 void dbgPrintf( const char* function, uint32_t line, const char * format, ... )
ram54288 0:a2cb7295a1f7 298 {
ram54288 0:a2cb7295a1f7 299 #ifdef DEBUG
ram54288 0:a2cb7295a1f7 300 static palMutexID_t printfMutex = NULLPTR;
ram54288 0:a2cb7295a1f7 301
ram54288 0:a2cb7295a1f7 302 va_list args;
ram54288 0:a2cb7295a1f7 303 if (!printfMutex)
ram54288 0:a2cb7295a1f7 304 {
ram54288 0:a2cb7295a1f7 305 pal_osMutexCreate(&printfMutex);
ram54288 0:a2cb7295a1f7 306 }
ram54288 0:a2cb7295a1f7 307 pal_osMutexWait(printfMutex, PAL_MAX_UINT32);
ram54288 0:a2cb7295a1f7 308 #ifdef VERBOSE
ram54288 0:a2cb7295a1f7 309 pal_plat_printf("%s:%ld\t",function,line);
ram54288 0:a2cb7295a1f7 310 #endif
ram54288 0:a2cb7295a1f7 311 va_start (args, format);
ram54288 0:a2cb7295a1f7 312 pal_plat_vprintf (format, args);
ram54288 0:a2cb7295a1f7 313 va_end (args);
ram54288 0:a2cb7295a1f7 314 pal_osMutexRelease(printfMutex);
ram54288 0:a2cb7295a1f7 315 #endif
ram54288 0:a2cb7295a1f7 316 }
ram54288 0:a2cb7295a1f7 317
ram54288 0:a2cb7295a1f7 318
ram54288 0:a2cb7295a1f7 319