FRDM K64F Metronome

Committer:
ram54288
Date:
Sun May 14 18:37:05 2017 +0000
Revision:
0:dbad57390bd1
Initial commit

Who changed what in which revision?

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