ARM GAS /tmp/cciA02i6.s page 1 1 .cpu cortex-m0plus 2 .eabi_attribute 20, 1 3 .eabi_attribute 21, 1 4 .eabi_attribute 23, 3 5 .eabi_attribute 24, 1 6 .eabi_attribute 25, 1 7 .eabi_attribute 26, 1 8 .eabi_attribute 30, 1 9 .eabi_attribute 34, 0 10 .eabi_attribute 18, 4 11 .file "timeServer.c" 12 .text 13 .Ltext0: 14 .cfi_sections .debug_frame 15 .section .text.TimerSetTimeout,"ax",%progbits 16 .align 1 17 .syntax unified 18 .code 16 19 .thumb_func 20 .fpu softvfp 22 TimerSetTimeout: 23 .LFB107: 24 .file 1 "./Middlewares/Third_Party/Lora/Utilities/timeServer.c" 1:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /* 2:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** / _____) _ | | 3:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** ( (____ _____ ____ _| |_ _____ ____| |__ 4:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** \____ \| ___ | (_ _) ___ |/ ___) _ \ 5:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** _____) ) ____| | | || |_| ____( (___| | | | 6:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** (______/|_____)_|_|_| \__)_____)\____)_| |_| 7:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** (C)2013 Semtech 8:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 9:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** Description: Generic lora driver implementation 10:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 11:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** License: Revised BSD License, see LICENSE.TXT file include in the project 12:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 13:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** Maintainer: Miguel Luis, Gregory Cristian and Wael Guibene 14:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** */ 15:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /****************************************************************************** 16:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * @file timeserver.c 17:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * @author MCD Application Team 18:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * @version V1.1.2 19:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * @date 08-September-2017 20:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * @brief Time server infrastructure 21:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** ****************************************************************************** 22:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * @attention 23:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 24:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** *

© Copyright (c) 2017 STMicroelectronics International N.V. 25:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * All rights reserved.

26:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 27:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * Redistribution and use in source and binary forms, with or without 28:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * modification, are permitted, provided that the following conditions are met: 29:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 30:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 1. Redistribution of source code must retain the above copyright notice, 31:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * this list of conditions and the following disclaimer. 32:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 2. Redistributions in binary form must reproduce the above copyright notice, 33:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * this list of conditions and the following disclaimer in the documentation 34:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * and/or other materials provided with the distribution. ARM GAS /tmp/cciA02i6.s page 2 35:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 3. Neither the name of STMicroelectronics nor the names of other 36:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * contributors to this software may be used to endorse or promote products 37:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * derived from this software without specific written permission. 38:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 4. This software, including modifications and/or derivative works of this 39:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * software, must execute solely and exclusively on microcontroller or 40:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * microprocessor devices manufactured by or for STMicroelectronics. 41:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 5. Redistribution and use of this software other than as permitted under 42:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * this license is void and will automatically terminate your rights under 43:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * this license. 44:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 45:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" 46:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT 47:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 48:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY 49:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT 50:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 51:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 52:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 53:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 54:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 55:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 56:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 57:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 58:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** ****************************************************************************** 59:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** */ 60:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 61:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /* Includes ------------------------------------------------------------------*/ 62:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** #include 63:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** #include "hw.h" 64:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** #include "timeServer.h" 65:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** //#include "low_power.h" 66:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 67:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 68:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /*! 69:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * safely execute call back 70:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** */ 71:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** #define exec_cb( _callback_ ) \ 72:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** do { \ 73:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( _callback_ == NULL ) \ 74:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { \ 75:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** while(1); \ 76:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } \ 77:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else \ 78:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { \ 79:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** _callback_( ); \ 80:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } \ 81:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } while(0); 82:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 83:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 84:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 85:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /*! 86:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * Timers list head pointer 87:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** */ 88:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** static TimerEvent_t *TimerListHead = NULL; 89:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 90:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /*! 91:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \brief Adds or replace the head timer of the list. ARM GAS /tmp/cciA02i6.s page 3 92:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 93:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \remark The list is automatically sorted. The list head always contains the 94:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * next timer to expire. 95:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 96:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \param [IN] obj Timer object to be become the new head 97:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \param [IN] remainingTime Remaining time of the previous head to be replaced 98:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** */ 99:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** static void TimerInsertNewHeadTimer( TimerEvent_t *obj ); 100:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 101:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /*! 102:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \brief Adds a timer to the list. 103:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 104:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \remark The list is automatically sorted. The list head always contains the 105:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * next timer to expire. 106:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 107:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \param [IN] obj Timer object to be added to the list 108:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \param [IN] remainingTime Remaining time of the running head after which the object may be adde 109:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** */ 110:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** static void TimerInsertTimer( TimerEvent_t *obj ); 111:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 112:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /*! 113:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \brief Sets a timeout with the duration "timestamp" 114:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 115:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \param [IN] timestamp Delay duration 116:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** */ 117:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** static void TimerSetTimeout( TimerEvent_t *obj ); 118:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 119:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /*! 120:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \brief Check if the Object to be added is not already in the list 121:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * 122:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \param [IN] timestamp Delay duration 123:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** * \retval true (the object is already in the list) or false 124:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** */ 125:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** static bool TimerExists( TimerEvent_t *obj ); 126:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 127:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 128:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 129:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** void TimerInit( TimerEvent_t *obj, void ( *callback )( void ) ) 130:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 131:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Timestamp = 0; 132:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->ReloadValue = 0; 133:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->IsRunning = false; 134:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Callback = callback; 135:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Next = NULL; 136:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 137:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 138:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** void TimerStart( TimerEvent_t *obj ) 139:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 140:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t elapsedTime = 0; 141:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 142:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** BACKUP_PRIMASK(); 143:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 144:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** DISABLE_IRQ( ); 145:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 146:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 147:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( ( obj == NULL ) || ( TimerExists( obj ) == true ) ) 148:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { ARM GAS /tmp/cciA02i6.s page 4 149:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** RESTORE_PRIMASK( ); 150:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** return; 151:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 152:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Timestamp = obj->ReloadValue; 153:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->IsRunning = false; 154:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 155:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( TimerListHead == NULL ) 156:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 157:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** HW_RTC_SetTimerContext( ); 158:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerInsertNewHeadTimer( obj ); // insert a timeout at now+obj->Timestamp 159:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 160:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else 161:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 162:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** elapsedTime = HW_RTC_GetTimerElapsedTime( ); 163:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Timestamp += elapsedTime; 164:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 165:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( obj->Timestamp < TimerListHead->Timestamp ) 166:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 167:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerInsertNewHeadTimer( obj); 168:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 169:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else 170:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 171:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerInsertTimer( obj); 172:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 173:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 174:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** RESTORE_PRIMASK( ); 175:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 176:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 177:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** static void TimerInsertTimer( TimerEvent_t *obj) 178:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 179:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerEvent_t* cur = TimerListHead; 180:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerEvent_t* next = TimerListHead->Next; 181:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 182:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** while (cur->Next != NULL ) 183:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 184:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( obj->Timestamp > next->Timestamp ) 185:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 186:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur = next; 187:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** next = next->Next; 188:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 189:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else 190:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 191:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur->Next = obj; 192:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Next = next; 193:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** return; 194:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 195:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 196:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 197:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur->Next = obj; 198:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Next = NULL; 199:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 200:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 201:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** static void TimerInsertNewHeadTimer( TimerEvent_t *obj ) 202:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 203:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerEvent_t* cur = TimerListHead; 204:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 205:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( cur != NULL ) ARM GAS /tmp/cciA02i6.s page 5 206:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 207:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur->IsRunning = false; 208:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 209:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 210:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Next = cur; 211:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = obj; 212:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerSetTimeout( TimerListHead ); 213:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 214:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 215:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** void TimerIrqHandler( void ) 216:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 217:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerEvent_t* cur; 218:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerEvent_t* next; 219:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 220:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 221:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 222:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t old = HW_RTC_GetTimerContext( ); 223:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t now = HW_RTC_SetTimerContext( ); 224:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t DeltaContext = now - old; //intentionnal wrap around 225:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 226:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /* update timeStamp based upon new Time Reference*/ 227:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /* beacuse delta context should never exceed 2^32*/ 228:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if ( TimerListHead != NULL ) 229:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 230:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** for (cur=TimerListHead; cur->Next != NULL; cur= cur->Next) 231:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 232:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** next =cur->Next; 233:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if (next->Timestamp > DeltaContext) 234:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 235:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** next->Timestamp -= DeltaContext; 236:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 237:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else 238:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 239:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** next->Timestamp = 0 ; 240:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 241:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 242:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 243:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 244:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /* execute imediately the alarm callback */ 245:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if ( TimerListHead != NULL ) 246:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 247:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur = TimerListHead; 248:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = TimerListHead->Next; 249:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** exec_cb( cur->Callback ); 250:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 251:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 252:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 253:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** // remove all the expired object from the list 254:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** while( ( TimerListHead != NULL ) && ( TimerListHead->Timestamp < HW_RTC_GetTimerElapsedTime( ) 255:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 256:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur = TimerListHead; 257:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = TimerListHead->Next; 258:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** exec_cb( cur->Callback ); 259:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 260:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 261:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /* start the next TimerListHead if it exists AND NOT running */ 262:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if(( TimerListHead != NULL ) && (TimerListHead->IsRunning == false)) ARM GAS /tmp/cciA02i6.s page 6 263:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 264:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerSetTimeout( TimerListHead ); 265:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 266:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 267:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 268:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** void TimerStop( TimerEvent_t *obj ) 269:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 270:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** BACKUP_PRIMASK(); 271:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 272:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** DISABLE_IRQ( ); 273:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 274:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerEvent_t* prev = TimerListHead; 275:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerEvent_t* cur = TimerListHead; 276:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 277:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** // List is empty or the Obj to stop does not exist 278:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( ( TimerListHead == NULL ) || ( obj == NULL ) ) 279:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 280:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** RESTORE_PRIMASK( ); 281:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** return; 282:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 283:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 284:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( TimerListHead == obj ) // Stop the Head 285:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 286:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( TimerListHead->IsRunning == true ) // The head is already running 287:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 288:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( TimerListHead->Next != NULL ) 289:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 290:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead->IsRunning = false; 291:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = TimerListHead->Next; 292:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerSetTimeout( TimerListHead ); 293:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 294:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else 295:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 296:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** HW_RTC_StopAlarm( ); 297:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = NULL; 298:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 299:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 300:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else // Stop the head before it is started 301:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 302:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( TimerListHead->Next != NULL ) 303:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 304:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = TimerListHead->Next; 305:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 306:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else 307:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 308:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = NULL; 309:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 310:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 311:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 312:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else // Stop an object within the list 313:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 314:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** while( cur != NULL ) 315:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 316:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( cur == obj ) 317:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 318:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( cur->Next != NULL ) 319:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { ARM GAS /tmp/cciA02i6.s page 7 320:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur = cur->Next; 321:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** prev->Next = cur; 322:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 323:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else 324:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 325:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur = NULL; 326:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** prev->Next = cur; 327:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 328:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** break; 329:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 330:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** else 331:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 332:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** prev = cur; 333:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur = cur->Next; 334:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 335:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 336:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 337:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 338:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** RESTORE_PRIMASK( ); 339:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 340:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 341:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** static bool TimerExists( TimerEvent_t *obj ) 342:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 343:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerEvent_t* cur = TimerListHead; 344:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 345:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** while( cur != NULL ) 346:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 347:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( cur == obj ) 348:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 349:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** return true; 350:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 351:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur = cur->Next; 352:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 353:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** return false; 354:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 355:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 356:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** void TimerReset( TimerEvent_t *obj ) 357:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 358:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerStop( obj ); 359:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerStart( obj ); 360:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 361:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 362:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** void TimerSetValue( TimerEvent_t *obj, uint32_t value ) 363:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 364:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t minValue = 0; 365:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t ticks = HW_RTC_ms2Tick( value ); 366:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 367:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerStop( obj ); 368:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 369:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** minValue = HW_RTC_GetMinimumTimeout( ); 370:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 371:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if( ticks < minValue ) 372:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 373:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** ticks = minValue; 374:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 375:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 376:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Timestamp = ticks; ARM GAS /tmp/cciA02i6.s page 8 377:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->ReloadValue = ticks; 378:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 379:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 380:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerTime_t TimerGetCurrentTime( void ) 381:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 382:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t now = HW_RTC_GetTimerValue( ); 383:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** return HW_RTC_Tick2ms(now); 384:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 385:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 386:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerTime_t TimerGetElapsedTime( TimerTime_t past ) 387:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 388:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t nowInTicks = HW_RTC_GetTimerValue( ); 389:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t pastInTicks = HW_RTC_ms2Tick( past ); 390:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /* intentional wrap around. Works Ok if tick duation below 1ms */ 391:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** return HW_RTC_Tick2ms( nowInTicks- pastInTicks ); 392:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 393:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 394:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** static void TimerSetTimeout( TimerEvent_t *obj ) 395:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 25 .loc 1 395 0 26 .cfi_startproc 27 @ args = 0, pretend = 0, frame = 0 28 @ frame_needed = 0, uses_anonymous_args = 0 29 .LVL0: 30 0000 70B5 push {r4, r5, r6, lr} 31 .LCFI0: 32 .cfi_def_cfa_offset 16 33 .cfi_offset 4, -16 34 .cfi_offset 5, -12 35 .cfi_offset 6, -8 36 .cfi_offset 14, -4 37 0002 0400 movs r4, r0 396:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** int32_t minTicks= HW_RTC_GetMinimumTimeout( ); 38 .loc 1 396 0 39 0004 FFF7FEFF bl HW_RTC_GetMinimumTimeout 40 .LVL1: 41 0008 0500 movs r5, r0 42 .LVL2: 397:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->IsRunning = true; 43 .loc 1 397 0 44 000a 0123 movs r3, #1 45 000c 2372 strb r3, [r4, #8] 398:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 399:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** //in case deadline too soon 400:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** if(obj->Timestamp < (HW_RTC_GetTimerElapsedTime( ) + minTicks) ) 46 .loc 1 400 0 47 000e 2668 ldr r6, [r4] 48 0010 FFF7FEFF bl HW_RTC_GetTimerElapsedTime 49 .LVL3: 50 0014 2818 adds r0, r5, r0 51 0016 8642 cmp r6, r0 52 0018 03D3 bcc .L3 53 .LVL4: 54 .L2: 401:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 402:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Timestamp = HW_RTC_GetTimerElapsedTime( ) + minTicks; 403:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } ARM GAS /tmp/cciA02i6.s page 9 404:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** HW_RTC_SetAlarm( obj->Timestamp ); 55 .loc 1 404 0 56 001a 2068 ldr r0, [r4] 57 001c FFF7FEFF bl HW_RTC_SetAlarm 58 .LVL5: 405:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 59 .loc 1 405 0 60 @ sp needed 61 .LVL6: 62 0020 70BD pop {r4, r5, r6, pc} 63 .LVL7: 64 .L3: 402:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 65 .loc 1 402 0 66 0022 FFF7FEFF bl HW_RTC_GetTimerElapsedTime 67 .LVL8: 68 0026 2D18 adds r5, r5, r0 69 .LVL9: 70 0028 2560 str r5, [r4] 71 002a F6E7 b .L2 72 .cfi_endproc 73 .LFE107: 75 .section .text.TimerInit,"ax",%progbits 76 .align 1 77 .global TimerInit 78 .syntax unified 79 .code 16 80 .thumb_func 81 .fpu softvfp 83 TimerInit: 84 .LFB96: 130:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Timestamp = 0; 85 .loc 1 130 0 86 .cfi_startproc 87 @ args = 0, pretend = 0, frame = 0 88 @ frame_needed = 0, uses_anonymous_args = 0 89 @ link register save eliminated. 90 .LVL10: 131:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->ReloadValue = 0; 91 .loc 1 131 0 92 0000 0023 movs r3, #0 93 0002 0360 str r3, [r0] 132:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->IsRunning = false; 94 .loc 1 132 0 95 0004 4360 str r3, [r0, #4] 133:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Callback = callback; 96 .loc 1 133 0 97 0006 0372 strb r3, [r0, #8] 134:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Next = NULL; 98 .loc 1 134 0 99 0008 C160 str r1, [r0, #12] 135:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 100 .loc 1 135 0 101 000a 0361 str r3, [r0, #16] 136:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 102 .loc 1 136 0 103 @ sp needed ARM GAS /tmp/cciA02i6.s page 10 104 000c 7047 bx lr 105 .cfi_endproc 106 .LFE96: 108 .section .text.TimerStart,"ax",%progbits 109 .align 1 110 .global TimerStart 111 .syntax unified 112 .code 16 113 .thumb_func 114 .fpu softvfp 116 TimerStart: 117 .LFB97: 139:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t elapsedTime = 0; 118 .loc 1 139 0 119 .cfi_startproc 120 @ args = 0, pretend = 0, frame = 0 121 @ frame_needed = 0, uses_anonymous_args = 0 122 .LVL11: 123 0000 70B5 push {r4, r5, r6, lr} 124 .LCFI1: 125 .cfi_def_cfa_offset 16 126 .cfi_offset 4, -16 127 .cfi_offset 5, -12 128 .cfi_offset 6, -8 129 .cfi_offset 14, -4 130 0002 0400 movs r4, r0 131 .LVL12: 132 .LBB34: 133 .LBB35: 134 .file 2 "Drivers/CMSIS/Include/cmsis_gcc.h" 1:Drivers/CMSIS/Include/cmsis_gcc.h **** /**************************************************************************//** 2:Drivers/CMSIS/Include/cmsis_gcc.h **** * @file cmsis_gcc.h 3:Drivers/CMSIS/Include/cmsis_gcc.h **** * @brief CMSIS Cortex-M Core Function/Instruction Header File 4:Drivers/CMSIS/Include/cmsis_gcc.h **** * @version V4.30 5:Drivers/CMSIS/Include/cmsis_gcc.h **** * @date 20. October 2015 6:Drivers/CMSIS/Include/cmsis_gcc.h **** ******************************************************************************/ 7:Drivers/CMSIS/Include/cmsis_gcc.h **** /* Copyright (c) 2009 - 2015 ARM LIMITED 8:Drivers/CMSIS/Include/cmsis_gcc.h **** 9:Drivers/CMSIS/Include/cmsis_gcc.h **** All rights reserved. 10:Drivers/CMSIS/Include/cmsis_gcc.h **** Redistribution and use in source and binary forms, with or without 11:Drivers/CMSIS/Include/cmsis_gcc.h **** modification, are permitted provided that the following conditions are met: 12:Drivers/CMSIS/Include/cmsis_gcc.h **** - Redistributions of source code must retain the above copyright 13:Drivers/CMSIS/Include/cmsis_gcc.h **** notice, this list of conditions and the following disclaimer. 14:Drivers/CMSIS/Include/cmsis_gcc.h **** - Redistributions in binary form must reproduce the above copyright 15:Drivers/CMSIS/Include/cmsis_gcc.h **** notice, this list of conditions and the following disclaimer in the 16:Drivers/CMSIS/Include/cmsis_gcc.h **** documentation and/or other materials provided with the distribution. 17:Drivers/CMSIS/Include/cmsis_gcc.h **** - Neither the name of ARM nor the names of its contributors may be used 18:Drivers/CMSIS/Include/cmsis_gcc.h **** to endorse or promote products derived from this software without 19:Drivers/CMSIS/Include/cmsis_gcc.h **** specific prior written permission. 20:Drivers/CMSIS/Include/cmsis_gcc.h **** * 21:Drivers/CMSIS/Include/cmsis_gcc.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22:Drivers/CMSIS/Include/cmsis_gcc.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23:Drivers/CMSIS/Include/cmsis_gcc.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24:Drivers/CMSIS/Include/cmsis_gcc.h **** ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE 25:Drivers/CMSIS/Include/cmsis_gcc.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26:Drivers/CMSIS/Include/cmsis_gcc.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27:Drivers/CMSIS/Include/cmsis_gcc.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ARM GAS /tmp/cciA02i6.s page 11 28:Drivers/CMSIS/Include/cmsis_gcc.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29:Drivers/CMSIS/Include/cmsis_gcc.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30:Drivers/CMSIS/Include/cmsis_gcc.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31:Drivers/CMSIS/Include/cmsis_gcc.h **** POSSIBILITY OF SUCH DAMAGE. 32:Drivers/CMSIS/Include/cmsis_gcc.h **** ---------------------------------------------------------------------------*/ 33:Drivers/CMSIS/Include/cmsis_gcc.h **** 34:Drivers/CMSIS/Include/cmsis_gcc.h **** 35:Drivers/CMSIS/Include/cmsis_gcc.h **** #ifndef __CMSIS_GCC_H 36:Drivers/CMSIS/Include/cmsis_gcc.h **** #define __CMSIS_GCC_H 37:Drivers/CMSIS/Include/cmsis_gcc.h **** 38:Drivers/CMSIS/Include/cmsis_gcc.h **** /* ignore some GCC warnings */ 39:Drivers/CMSIS/Include/cmsis_gcc.h **** #if defined ( __GNUC__ ) 40:Drivers/CMSIS/Include/cmsis_gcc.h **** #pragma GCC diagnostic push 41:Drivers/CMSIS/Include/cmsis_gcc.h **** #pragma GCC diagnostic ignored "-Wsign-conversion" 42:Drivers/CMSIS/Include/cmsis_gcc.h **** #pragma GCC diagnostic ignored "-Wconversion" 43:Drivers/CMSIS/Include/cmsis_gcc.h **** #pragma GCC diagnostic ignored "-Wunused-parameter" 44:Drivers/CMSIS/Include/cmsis_gcc.h **** #endif 45:Drivers/CMSIS/Include/cmsis_gcc.h **** 46:Drivers/CMSIS/Include/cmsis_gcc.h **** 47:Drivers/CMSIS/Include/cmsis_gcc.h **** /* ########################### Core Function Access ########################### */ 48:Drivers/CMSIS/Include/cmsis_gcc.h **** /** \ingroup CMSIS_Core_FunctionInterface 49:Drivers/CMSIS/Include/cmsis_gcc.h **** \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions 50:Drivers/CMSIS/Include/cmsis_gcc.h **** @{ 51:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 52:Drivers/CMSIS/Include/cmsis_gcc.h **** 53:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 54:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Enable IRQ Interrupts 55:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Enables IRQ interrupts by clearing the I-bit in the CPSR. 56:Drivers/CMSIS/Include/cmsis_gcc.h **** Can only be executed in Privileged modes. 57:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 58:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void) 59:Drivers/CMSIS/Include/cmsis_gcc.h **** { 60:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("cpsie i" : : : "memory"); 61:Drivers/CMSIS/Include/cmsis_gcc.h **** } 62:Drivers/CMSIS/Include/cmsis_gcc.h **** 63:Drivers/CMSIS/Include/cmsis_gcc.h **** 64:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 65:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Disable IRQ Interrupts 66:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Disables IRQ interrupts by setting the I-bit in the CPSR. 67:Drivers/CMSIS/Include/cmsis_gcc.h **** Can only be executed in Privileged modes. 68:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 69:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void) 70:Drivers/CMSIS/Include/cmsis_gcc.h **** { 71:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("cpsid i" : : : "memory"); 72:Drivers/CMSIS/Include/cmsis_gcc.h **** } 73:Drivers/CMSIS/Include/cmsis_gcc.h **** 74:Drivers/CMSIS/Include/cmsis_gcc.h **** 75:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 76:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Get Control Register 77:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Returns the content of the Control Register. 78:Drivers/CMSIS/Include/cmsis_gcc.h **** \return Control Register value 79:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 80:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void) 81:Drivers/CMSIS/Include/cmsis_gcc.h **** { 82:Drivers/CMSIS/Include/cmsis_gcc.h **** uint32_t result; 83:Drivers/CMSIS/Include/cmsis_gcc.h **** 84:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MRS %0, control" : "=r" (result) ); ARM GAS /tmp/cciA02i6.s page 12 85:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 86:Drivers/CMSIS/Include/cmsis_gcc.h **** } 87:Drivers/CMSIS/Include/cmsis_gcc.h **** 88:Drivers/CMSIS/Include/cmsis_gcc.h **** 89:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 90:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Set Control Register 91:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Writes the given value to the Control Register. 92:Drivers/CMSIS/Include/cmsis_gcc.h **** \param [in] control Control Register value to set 93:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 94:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control) 95:Drivers/CMSIS/Include/cmsis_gcc.h **** { 96:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); 97:Drivers/CMSIS/Include/cmsis_gcc.h **** } 98:Drivers/CMSIS/Include/cmsis_gcc.h **** 99:Drivers/CMSIS/Include/cmsis_gcc.h **** 100:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 101:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Get IPSR Register 102:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Returns the content of the IPSR Register. 103:Drivers/CMSIS/Include/cmsis_gcc.h **** \return IPSR Register value 104:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 105:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void) 106:Drivers/CMSIS/Include/cmsis_gcc.h **** { 107:Drivers/CMSIS/Include/cmsis_gcc.h **** uint32_t result; 108:Drivers/CMSIS/Include/cmsis_gcc.h **** 109:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); 110:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 111:Drivers/CMSIS/Include/cmsis_gcc.h **** } 112:Drivers/CMSIS/Include/cmsis_gcc.h **** 113:Drivers/CMSIS/Include/cmsis_gcc.h **** 114:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 115:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Get APSR Register 116:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Returns the content of the APSR Register. 117:Drivers/CMSIS/Include/cmsis_gcc.h **** \return APSR Register value 118:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 119:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void) 120:Drivers/CMSIS/Include/cmsis_gcc.h **** { 121:Drivers/CMSIS/Include/cmsis_gcc.h **** uint32_t result; 122:Drivers/CMSIS/Include/cmsis_gcc.h **** 123:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MRS %0, apsr" : "=r" (result) ); 124:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 125:Drivers/CMSIS/Include/cmsis_gcc.h **** } 126:Drivers/CMSIS/Include/cmsis_gcc.h **** 127:Drivers/CMSIS/Include/cmsis_gcc.h **** 128:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 129:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Get xPSR Register 130:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Returns the content of the xPSR Register. 131:Drivers/CMSIS/Include/cmsis_gcc.h **** 132:Drivers/CMSIS/Include/cmsis_gcc.h **** \return xPSR Register value 133:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 134:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void) 135:Drivers/CMSIS/Include/cmsis_gcc.h **** { 136:Drivers/CMSIS/Include/cmsis_gcc.h **** uint32_t result; 137:Drivers/CMSIS/Include/cmsis_gcc.h **** 138:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); 139:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 140:Drivers/CMSIS/Include/cmsis_gcc.h **** } 141:Drivers/CMSIS/Include/cmsis_gcc.h **** ARM GAS /tmp/cciA02i6.s page 13 142:Drivers/CMSIS/Include/cmsis_gcc.h **** 143:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 144:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Get Process Stack Pointer 145:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Returns the current value of the Process Stack Pointer (PSP). 146:Drivers/CMSIS/Include/cmsis_gcc.h **** \return PSP Register value 147:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 148:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void) 149:Drivers/CMSIS/Include/cmsis_gcc.h **** { 150:Drivers/CMSIS/Include/cmsis_gcc.h **** register uint32_t result; 151:Drivers/CMSIS/Include/cmsis_gcc.h **** 152:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MRS %0, psp\n" : "=r" (result) ); 153:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 154:Drivers/CMSIS/Include/cmsis_gcc.h **** } 155:Drivers/CMSIS/Include/cmsis_gcc.h **** 156:Drivers/CMSIS/Include/cmsis_gcc.h **** 157:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 158:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Set Process Stack Pointer 159:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Assigns the given value to the Process Stack Pointer (PSP). 160:Drivers/CMSIS/Include/cmsis_gcc.h **** \param [in] topOfProcStack Process Stack Pointer value to set 161:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 162:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) 163:Drivers/CMSIS/Include/cmsis_gcc.h **** { 164:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp"); 165:Drivers/CMSIS/Include/cmsis_gcc.h **** } 166:Drivers/CMSIS/Include/cmsis_gcc.h **** 167:Drivers/CMSIS/Include/cmsis_gcc.h **** 168:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 169:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Get Main Stack Pointer 170:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Returns the current value of the Main Stack Pointer (MSP). 171:Drivers/CMSIS/Include/cmsis_gcc.h **** \return MSP Register value 172:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 173:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void) 174:Drivers/CMSIS/Include/cmsis_gcc.h **** { 175:Drivers/CMSIS/Include/cmsis_gcc.h **** register uint32_t result; 176:Drivers/CMSIS/Include/cmsis_gcc.h **** 177:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MRS %0, msp\n" : "=r" (result) ); 178:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 179:Drivers/CMSIS/Include/cmsis_gcc.h **** } 180:Drivers/CMSIS/Include/cmsis_gcc.h **** 181:Drivers/CMSIS/Include/cmsis_gcc.h **** 182:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 183:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Set Main Stack Pointer 184:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Assigns the given value to the Main Stack Pointer (MSP). 185:Drivers/CMSIS/Include/cmsis_gcc.h **** 186:Drivers/CMSIS/Include/cmsis_gcc.h **** \param [in] topOfMainStack Main Stack Pointer value to set 187:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 188:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) 189:Drivers/CMSIS/Include/cmsis_gcc.h **** { 190:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) : "sp"); 191:Drivers/CMSIS/Include/cmsis_gcc.h **** } 192:Drivers/CMSIS/Include/cmsis_gcc.h **** 193:Drivers/CMSIS/Include/cmsis_gcc.h **** 194:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 195:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Get Priority Mask 196:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Returns the current state of the priority mask bit from the Priority Mask Register. 197:Drivers/CMSIS/Include/cmsis_gcc.h **** \return Priority Mask value 198:Drivers/CMSIS/Include/cmsis_gcc.h **** */ ARM GAS /tmp/cciA02i6.s page 14 199:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void) 200:Drivers/CMSIS/Include/cmsis_gcc.h **** { 201:Drivers/CMSIS/Include/cmsis_gcc.h **** uint32_t result; 202:Drivers/CMSIS/Include/cmsis_gcc.h **** 203:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MRS %0, primask" : "=r" (result) ); 135 .loc 2 203 0 136 .syntax divided 137 @ 203 "Drivers/CMSIS/Include/cmsis_gcc.h" 1 138 0004 EFF31085 MRS r5, primask 139 @ 0 "" 2 140 .thumb 141 .syntax unified 142 .LBE35: 143 .LBE34: 144 .LBB36: 145 .LBB37: 71:Drivers/CMSIS/Include/cmsis_gcc.h **** } 146 .loc 2 71 0 147 .syntax divided 148 @ 71 "Drivers/CMSIS/Include/cmsis_gcc.h" 1 149 0008 72B6 cpsid i 150 @ 0 "" 2 151 .thumb 152 .syntax unified 153 .LBE37: 154 .LBE36: 147:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 155 .loc 1 147 0 156 000a 0028 cmp r0, #0 157 000c 29D0 beq .L6 158 .LVL13: 159 .LBB38: 160 .LBB39: 343:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 161 .loc 1 343 0 162 000e 264B ldr r3, .L23 163 0010 1A68 ldr r2, [r3] 164 .LVL14: 165 0012 1300 movs r3, r2 166 .LVL15: 167 .L7: 345:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 168 .loc 1 345 0 169 0014 002B cmp r3, #0 170 0016 04D0 beq .L8 347:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 171 .loc 1 347 0 172 0018 9C42 cmp r4, r3 173 001a 01D0 beq .L20 351:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 174 .loc 1 351 0 175 001c 1B69 ldr r3, [r3, #16] 176 .LVL16: 177 001e F9E7 b .L7 178 .L20: 349:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 179 .loc 1 349 0 ARM GAS /tmp/cciA02i6.s page 15 180 0020 0123 movs r3, #1 181 .LVL17: 182 .L8: 183 .LBE39: 184 .LBE38: 147:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 185 .loc 1 147 0 186 0022 002B cmp r3, #0 187 0024 1DD1 bne .L6 152:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->IsRunning = false; 188 .loc 1 152 0 189 0026 6368 ldr r3, [r4, #4] 190 0028 2360 str r3, [r4] 153:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 191 .loc 1 153 0 192 002a 0023 movs r3, #0 193 002c 2372 strb r3, [r4, #8] 155:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 194 .loc 1 155 0 195 002e 002A cmp r2, #0 196 0030 1AD0 beq .L21 162:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Timestamp += elapsedTime; 197 .loc 1 162 0 198 0032 FFF7FEFF bl HW_RTC_GetTimerElapsedTime 199 .LVL18: 163:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 200 .loc 1 163 0 201 0036 2368 ldr r3, [r4] 202 0038 9C46 mov ip, r3 203 003a 6044 add r0, r0, ip 204 .LVL19: 205 003c 2060 str r0, [r4] 165:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 206 .loc 1 165 0 207 003e 1A4B ldr r3, .L23 208 0040 1A68 ldr r2, [r3] 209 0042 1368 ldr r3, [r2] 210 0044 9842 cmp r0, r3 211 0046 1ED2 bcs .L15 212 .LVL20: 213 .LBB40: 214 .LBB41: 205:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 215 .loc 1 205 0 216 0048 002A cmp r2, #0 217 004a 01D0 beq .L16 207:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 218 .loc 1 207 0 219 004c 0023 movs r3, #0 220 004e 1372 strb r3, [r2, #8] 221 .L16: 210:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = obj; 222 .loc 1 210 0 223 0050 2261 str r2, [r4, #16] 211:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerSetTimeout( TimerListHead ); 224 .loc 1 211 0 225 0052 154B ldr r3, .L23 ARM GAS /tmp/cciA02i6.s page 16 226 0054 1C60 str r4, [r3] 212:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 227 .loc 1 212 0 228 0056 2000 movs r0, r4 229 0058 FFF7FEFF bl TimerSetTimeout 230 .LVL21: 231 .L14: 232 .LBE41: 233 .LBE40: 234 .LBB42: 235 .LBB43: 204:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 205:Drivers/CMSIS/Include/cmsis_gcc.h **** } 206:Drivers/CMSIS/Include/cmsis_gcc.h **** 207:Drivers/CMSIS/Include/cmsis_gcc.h **** 208:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 209:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Set Priority Mask 210:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Assigns the given value to the Priority Mask Register. 211:Drivers/CMSIS/Include/cmsis_gcc.h **** \param [in] priMask Priority Mask 212:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 213:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) 214:Drivers/CMSIS/Include/cmsis_gcc.h **** { 215:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); 236 .loc 2 215 0 237 .syntax divided 238 @ 215 "Drivers/CMSIS/Include/cmsis_gcc.h" 1 239 005c 85F31088 MSR primask, r5 240 @ 0 "" 2 241 .thumb 242 .syntax unified 243 0060 01E0 b .L5 244 .LVL22: 245 .L6: 246 .LBE43: 247 .LBE42: 248 .LBB44: 249 .LBB45: 250 .syntax divided 251 @ 215 "Drivers/CMSIS/Include/cmsis_gcc.h" 1 252 0062 85F31088 MSR primask, r5 253 @ 0 "" 2 254 .LVL23: 255 .thumb 256 .syntax unified 257 .L5: 258 .LBE45: 259 .LBE44: 175:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 260 .loc 1 175 0 261 @ sp needed 262 .LVL24: 263 0066 70BD pop {r4, r5, r6, pc} 264 .LVL25: 265 .L21: 157:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerInsertNewHeadTimer( obj ); // insert a timeout at now+obj->Timestamp 266 .loc 1 157 0 267 0068 FFF7FEFF bl HW_RTC_SetTimerContext ARM GAS /tmp/cciA02i6.s page 17 268 .LVL26: 269 .LBB46: 270 .LBB47: 203:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 271 .loc 1 203 0 272 006c 0E4B ldr r3, .L23 273 006e 1B68 ldr r3, [r3] 274 .LVL27: 205:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 275 .loc 1 205 0 276 0070 002B cmp r3, #0 277 0072 01D0 beq .L13 207:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 278 .loc 1 207 0 279 0074 0022 movs r2, #0 280 0076 1A72 strb r2, [r3, #8] 281 .L13: 210:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = obj; 282 .loc 1 210 0 283 0078 2361 str r3, [r4, #16] 211:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerSetTimeout( TimerListHead ); 284 .loc 1 211 0 285 007a 0B4B ldr r3, .L23 286 .LVL28: 287 007c 1C60 str r4, [r3] 288 .LVL29: 212:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 289 .loc 1 212 0 290 007e 2000 movs r0, r4 291 0080 FFF7FEFF bl TimerSetTimeout 292 .LVL30: 293 0084 EAE7 b .L14 294 .LVL31: 295 .L15: 296 .LBE47: 297 .LBE46: 298 .LBB48: 299 .LBB49: 180:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 300 .loc 1 180 0 301 0086 1369 ldr r3, [r2, #16] 302 .LVL32: 303 .L17: 182:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 304 .loc 1 182 0 305 0088 1169 ldr r1, [r2, #16] 306 008a 0029 cmp r1, #0 307 008c 08D0 beq .L22 184:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 308 .loc 1 184 0 309 008e 1968 ldr r1, [r3] 310 0090 8842 cmp r0, r1 311 0092 02D9 bls .L18 312 .LVL33: 186:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** next = next->Next; 313 .loc 1 186 0 314 0094 1A00 movs r2, r3 ARM GAS /tmp/cciA02i6.s page 18 187:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 315 .loc 1 187 0 316 0096 1B69 ldr r3, [r3, #16] 317 .LVL34: 318 0098 F6E7 b .L17 319 .L18: 191:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Next = next; 320 .loc 1 191 0 321 009a 1461 str r4, [r2, #16] 192:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** return; 322 .loc 1 192 0 323 009c 2361 str r3, [r4, #16] 324 009e DDE7 b .L14 325 .L22: 197:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->Next = NULL; 326 .loc 1 197 0 327 00a0 1461 str r4, [r2, #16] 198:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 328 .loc 1 198 0 329 00a2 0023 movs r3, #0 330 .LVL35: 331 00a4 2361 str r3, [r4, #16] 332 00a6 D9E7 b .L14 333 .L24: 334 .align 2 335 .L23: 336 00a8 00000000 .word .LANCHOR0 337 .LBE49: 338 .LBE48: 339 .cfi_endproc 340 .LFE97: 342 .section .text.TimerIrqHandler,"ax",%progbits 343 .align 1 344 .global TimerIrqHandler 345 .syntax unified 346 .code 16 347 .thumb_func 348 .fpu softvfp 350 TimerIrqHandler: 351 .LFB100: 216:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerEvent_t* cur; 352 .loc 1 216 0 353 .cfi_startproc 354 @ args = 0, pretend = 0, frame = 0 355 @ frame_needed = 0, uses_anonymous_args = 0 356 0000 10B5 push {r4, lr} 357 .LCFI2: 358 .cfi_def_cfa_offset 8 359 .cfi_offset 4, -8 360 .cfi_offset 14, -4 222:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t now = HW_RTC_SetTimerContext( ); 361 .loc 1 222 0 362 0002 FFF7FEFF bl HW_RTC_GetTimerContext 363 .LVL36: 364 0006 0400 movs r4, r0 365 .LVL37: 223:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t DeltaContext = now - old; //intentionnal wrap around ARM GAS /tmp/cciA02i6.s page 19 366 .loc 1 223 0 367 0008 FFF7FEFF bl HW_RTC_SetTimerContext 368 .LVL38: 224:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 369 .loc 1 224 0 370 000c 001B subs r0, r0, r4 371 .LVL39: 228:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 372 .loc 1 228 0 373 000e 1C4B ldr r3, .L41 374 0010 1B68 ldr r3, [r3] 375 0012 002B cmp r3, #0 376 0014 0DD0 beq .L27 230:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 377 .loc 1 230 0 378 0016 1C00 movs r4, r3 379 .LVL40: 380 0018 02E0 b .L26 381 .LVL41: 382 .L28: 239:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 383 .loc 1 239 0 384 001a 0021 movs r1, #0 385 001c 1160 str r1, [r2] 386 .L29: 230:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 387 .loc 1 230 0 discriminator 2 388 001e 2469 ldr r4, [r4, #16] 389 .LVL42: 390 .L26: 230:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 391 .loc 1 230 0 is_stmt 0 discriminator 1 392 0020 2269 ldr r2, [r4, #16] 393 0022 002A cmp r2, #0 394 0024 05D0 beq .L27 395 .LVL43: 233:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 396 .loc 1 233 0 is_stmt 1 397 0026 1168 ldr r1, [r2] 398 0028 8142 cmp r1, r0 399 002a F6D9 bls .L28 235:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 400 .loc 1 235 0 401 002c 091A subs r1, r1, r0 402 002e 1160 str r1, [r2] 403 0030 F5E7 b .L29 404 .LVL44: 405 .L27: 245:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 406 .loc 1 245 0 407 0032 002B cmp r3, #0 408 0034 06D0 beq .L36 409 .LVL45: 248:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** exec_cb( cur->Callback ); 410 .loc 1 248 0 411 0036 124A ldr r2, .L41 412 0038 1969 ldr r1, [r3, #16] ARM GAS /tmp/cciA02i6.s page 20 413 003a 1160 str r1, [r2] 249:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 414 .loc 1 249 0 415 003c DB68 ldr r3, [r3, #12] 416 .LVL46: 417 003e 002B cmp r3, #0 418 0040 12D0 beq .L33 249:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 419 .loc 1 249 0 is_stmt 0 discriminator 1 420 0042 9847 blx r3 421 .LVL47: 422 .L36: 254:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 423 .loc 1 254 0 is_stmt 1 424 0044 0E4B ldr r3, .L41 425 0046 1B68 ldr r3, [r3] 426 0048 002B cmp r3, #0 427 004a 0FD0 beq .L37 254:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 428 .loc 1 254 0 is_stmt 0 discriminator 1 429 004c 1C68 ldr r4, [r3] 430 004e FFF7FEFF bl HW_RTC_GetTimerElapsedTime 431 .LVL48: 432 0052 8442 cmp r4, r0 433 0054 0AD2 bcs .L37 256:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = TimerListHead->Next; 434 .loc 1 256 0 is_stmt 1 435 0056 0A4A ldr r2, .L41 436 0058 1368 ldr r3, [r2] 437 .LVL49: 257:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** exec_cb( cur->Callback ); 438 .loc 1 257 0 439 005a 1969 ldr r1, [r3, #16] 440 005c 1160 str r1, [r2] 258:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 441 .loc 1 258 0 442 005e DB68 ldr r3, [r3, #12] 443 .LVL50: 444 0060 002B cmp r3, #0 445 0062 02D0 beq .L35 258:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 446 .loc 1 258 0 is_stmt 0 discriminator 1 447 0064 9847 blx r3 448 .LVL51: 449 0066 EDE7 b .L36 450 .LVL52: 451 .L33: 452 0068 FEE7 b .L33 453 .LVL53: 454 .L35: 455 006a FEE7 b .L35 456 .L37: 262:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 457 .loc 1 262 0 is_stmt 1 458 006c 044B ldr r3, .L41 459 006e 1868 ldr r0, [r3] 460 0070 0028 cmp r0, #0 ARM GAS /tmp/cciA02i6.s page 21 461 0072 04D0 beq .L25 262:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 462 .loc 1 262 0 is_stmt 0 discriminator 1 463 0074 037A ldrb r3, [r0, #8] 464 0076 002B cmp r3, #0 465 0078 01D1 bne .L25 264:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 466 .loc 1 264 0 is_stmt 1 467 007a FFF7FEFF bl TimerSetTimeout 468 .LVL54: 469 .L25: 266:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 470 .loc 1 266 0 471 @ sp needed 472 007e 10BD pop {r4, pc} 473 .L42: 474 .align 2 475 .L41: 476 0080 00000000 .word .LANCHOR0 477 .cfi_endproc 478 .LFE100: 480 .section .text.TimerStop,"ax",%progbits 481 .align 1 482 .global TimerStop 483 .syntax unified 484 .code 16 485 .thumb_func 486 .fpu softvfp 488 TimerStop: 489 .LFB101: 269:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** BACKUP_PRIMASK(); 490 .loc 1 269 0 491 .cfi_startproc 492 @ args = 0, pretend = 0, frame = 0 493 @ frame_needed = 0, uses_anonymous_args = 0 494 .LVL55: 495 0000 10B5 push {r4, lr} 496 .LCFI3: 497 .cfi_def_cfa_offset 8 498 .cfi_offset 4, -8 499 .cfi_offset 14, -4 500 .LBB50: 501 .LBB51: 203:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 502 .loc 2 203 0 503 .syntax divided 504 @ 203 "Drivers/CMSIS/Include/cmsis_gcc.h" 1 505 0002 EFF31084 MRS r4, primask 506 @ 0 "" 2 507 .thumb 508 .syntax unified 509 .LBE51: 510 .LBE50: 511 .LBB52: 512 .LBB53: 71:Drivers/CMSIS/Include/cmsis_gcc.h **** } 513 .loc 2 71 0 ARM GAS /tmp/cciA02i6.s page 22 514 .syntax divided 515 @ 71 "Drivers/CMSIS/Include/cmsis_gcc.h" 1 516 0006 72B6 cpsid i 517 @ 0 "" 2 518 .thumb 519 .syntax unified 520 .LBE53: 521 .LBE52: 274:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerEvent_t* cur = TimerListHead; 522 .loc 1 274 0 523 0008 1C4B ldr r3, .L58 524 000a 1A68 ldr r2, [r3] 525 .LVL56: 278:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 526 .loc 1 278 0 527 000c 002A cmp r2, #0 528 000e 0BD0 beq .L44 278:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 529 .loc 1 278 0 is_stmt 0 discriminator 1 530 0010 0028 cmp r0, #0 531 0012 09D0 beq .L44 284:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 532 .loc 1 284 0 is_stmt 1 533 0014 8242 cmp r2, r0 534 0016 0AD0 beq .L56 275:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 535 .loc 1 275 0 536 0018 1300 movs r3, r2 537 .LVL57: 538 .L47: 314:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 539 .loc 1 314 0 540 001a 002B cmp r3, #0 541 001c 28D0 beq .L50 316:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 542 .loc 1 316 0 543 001e 8342 cmp r3, r0 544 0020 22D0 beq .L57 545 .LVL58: 332:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** cur = cur->Next; 546 .loc 1 332 0 547 0022 1A00 movs r2, r3 333:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 548 .loc 1 333 0 549 0024 1B69 ldr r3, [r3, #16] 550 .LVL59: 551 0026 F8E7 b .L47 552 .LVL60: 553 .L44: 554 .LBB54: 555 .LBB55: 556 .loc 2 215 0 557 .syntax divided 558 @ 215 "Drivers/CMSIS/Include/cmsis_gcc.h" 1 559 0028 84F31088 MSR primask, r4 560 @ 0 "" 2 561 .thumb ARM GAS /tmp/cciA02i6.s page 23 562 .syntax unified 563 002c 22E0 b .L43 564 .LVL61: 565 .L56: 566 .LBE55: 567 .LBE54: 286:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 568 .loc 1 286 0 569 002e 137A ldrb r3, [r2, #8] 570 0030 002B cmp r3, #0 571 0032 0FD0 beq .L48 288:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 572 .loc 1 288 0 573 0034 1069 ldr r0, [r2, #16] 574 .LVL62: 575 0036 0028 cmp r0, #0 576 0038 06D0 beq .L49 290:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = TimerListHead->Next; 577 .loc 1 290 0 578 003a 0023 movs r3, #0 579 003c 1372 strb r3, [r2, #8] 291:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerSetTimeout( TimerListHead ); 580 .loc 1 291 0 581 003e 0F4B ldr r3, .L58 582 0040 1860 str r0, [r3] 292:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 583 .loc 1 292 0 584 0042 FFF7FEFF bl TimerSetTimeout 585 .LVL63: 586 0046 13E0 b .L50 587 .LVL64: 588 .L49: 296:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerListHead = NULL; 589 .loc 1 296 0 590 0048 FFF7FEFF bl HW_RTC_StopAlarm 591 .LVL65: 297:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 592 .loc 1 297 0 593 004c 0B4B ldr r3, .L58 594 004e 0022 movs r2, #0 595 0050 1A60 str r2, [r3] 596 0052 0DE0 b .L50 597 .LVL66: 598 .L48: 302:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 599 .loc 1 302 0 600 0054 1369 ldr r3, [r2, #16] 601 0056 002B cmp r3, #0 602 0058 02D0 beq .L51 304:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 603 .loc 1 304 0 604 005a 084A ldr r2, .L58 605 .LVL67: 606 005c 1360 str r3, [r2] 607 .LVL68: 608 005e 07E0 b .L50 609 .LVL69: ARM GAS /tmp/cciA02i6.s page 24 610 .L51: 308:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 611 .loc 1 308 0 612 0060 064B ldr r3, .L58 613 0062 0022 movs r2, #0 614 .LVL70: 615 0064 1A60 str r2, [r3] 616 .LVL71: 617 0066 03E0 b .L50 618 .LVL72: 619 .L57: 318:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 620 .loc 1 318 0 621 0068 1B69 ldr r3, [r3, #16] 622 .LVL73: 623 006a 002B cmp r3, #0 624 006c 03D0 beq .L53 625 .LVL74: 321:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 626 .loc 1 321 0 627 006e 1361 str r3, [r2, #16] 628 .LVL75: 629 .L50: 630 .LBB56: 631 .LBB57: 632 .loc 2 215 0 633 .syntax divided 634 @ 215 "Drivers/CMSIS/Include/cmsis_gcc.h" 1 635 0070 84F31088 MSR primask, r4 636 @ 0 "" 2 637 .LVL76: 638 .thumb 639 .syntax unified 640 .L43: 641 .LBE57: 642 .LBE56: 339:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 643 .loc 1 339 0 644 @ sp needed 645 0074 10BD pop {r4, pc} 646 .LVL77: 647 .L53: 326:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 648 .loc 1 326 0 649 0076 0023 movs r3, #0 650 0078 1361 str r3, [r2, #16] 651 007a F9E7 b .L50 652 .L59: 653 .align 2 654 .L58: 655 007c 00000000 .word .LANCHOR0 656 .cfi_endproc 657 .LFE101: 659 .section .text.TimerReset,"ax",%progbits 660 .align 1 661 .global TimerReset 662 .syntax unified ARM GAS /tmp/cciA02i6.s page 25 663 .code 16 664 .thumb_func 665 .fpu softvfp 667 TimerReset: 668 .LFB103: 357:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerStop( obj ); 669 .loc 1 357 0 670 .cfi_startproc 671 @ args = 0, pretend = 0, frame = 0 672 @ frame_needed = 0, uses_anonymous_args = 0 673 .LVL78: 674 0000 10B5 push {r4, lr} 675 .LCFI4: 676 .cfi_def_cfa_offset 8 677 .cfi_offset 4, -8 678 .cfi_offset 14, -4 679 0002 0400 movs r4, r0 358:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** TimerStart( obj ); 680 .loc 1 358 0 681 0004 FFF7FEFF bl TimerStop 682 .LVL79: 359:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 683 .loc 1 359 0 684 0008 2000 movs r0, r4 685 000a FFF7FEFF bl TimerStart 686 .LVL80: 360:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 687 .loc 1 360 0 688 @ sp needed 689 .LVL81: 690 000e 10BD pop {r4, pc} 691 .cfi_endproc 692 .LFE103: 694 .section .text.TimerSetValue,"ax",%progbits 695 .align 1 696 .global TimerSetValue 697 .syntax unified 698 .code 16 699 .thumb_func 700 .fpu softvfp 702 TimerSetValue: 703 .LFB104: 363:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t minValue = 0; 704 .loc 1 363 0 705 .cfi_startproc 706 @ args = 0, pretend = 0, frame = 0 707 @ frame_needed = 0, uses_anonymous_args = 0 708 .LVL82: 709 0000 70B5 push {r4, r5, r6, lr} 710 .LCFI5: 711 .cfi_def_cfa_offset 16 712 .cfi_offset 4, -16 713 .cfi_offset 5, -12 714 .cfi_offset 6, -8 715 .cfi_offset 14, -4 716 0002 0400 movs r4, r0 717 .LVL83: ARM GAS /tmp/cciA02i6.s page 26 365:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 718 .loc 1 365 0 719 0004 0800 movs r0, r1 720 .LVL84: 721 0006 FFF7FEFF bl HW_RTC_ms2Tick 722 .LVL85: 723 000a 0500 movs r5, r0 724 .LVL86: 367:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 725 .loc 1 367 0 726 000c 2000 movs r0, r4 727 .LVL87: 728 000e FFF7FEFF bl TimerStop 729 .LVL88: 369:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 730 .loc 1 369 0 731 0012 FFF7FEFF bl HW_RTC_GetMinimumTimeout 732 .LVL89: 371:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** { 733 .loc 1 371 0 734 0016 8542 cmp r5, r0 735 0018 02D2 bcs .L63 736 .LVL90: 737 .L62: 376:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** obj->ReloadValue = ticks; 738 .loc 1 376 0 739 001a 2060 str r0, [r4] 377:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 740 .loc 1 377 0 741 001c 6060 str r0, [r4, #4] 378:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 742 .loc 1 378 0 743 @ sp needed 744 .LVL91: 745 001e 70BD pop {r4, r5, r6, pc} 746 .LVL92: 747 .L63: 365:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 748 .loc 1 365 0 749 0020 2800 movs r0, r5 750 .LVL93: 751 0022 FAE7 b .L62 752 .cfi_endproc 753 .LFE104: 755 .section .text.TimerGetCurrentTime,"ax",%progbits 756 .align 1 757 .global TimerGetCurrentTime 758 .syntax unified 759 .code 16 760 .thumb_func 761 .fpu softvfp 763 TimerGetCurrentTime: 764 .LFB105: 381:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t now = HW_RTC_GetTimerValue( ); 765 .loc 1 381 0 766 .cfi_startproc 767 @ args = 0, pretend = 0, frame = 0 ARM GAS /tmp/cciA02i6.s page 27 768 @ frame_needed = 0, uses_anonymous_args = 0 769 0000 10B5 push {r4, lr} 770 .LCFI6: 771 .cfi_def_cfa_offset 8 772 .cfi_offset 4, -8 773 .cfi_offset 14, -4 382:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** return HW_RTC_Tick2ms(now); 774 .loc 1 382 0 775 0002 FFF7FEFF bl HW_RTC_GetTimerValue 776 .LVL94: 383:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 777 .loc 1 383 0 778 0006 FFF7FEFF bl HW_RTC_Tick2ms 779 .LVL95: 384:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 780 .loc 1 384 0 781 @ sp needed 782 000a 10BD pop {r4, pc} 783 .cfi_endproc 784 .LFE105: 786 .section .text.TimerGetElapsedTime,"ax",%progbits 787 .align 1 788 .global TimerGetElapsedTime 789 .syntax unified 790 .code 16 791 .thumb_func 792 .fpu softvfp 794 TimerGetElapsedTime: 795 .LFB106: 387:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t nowInTicks = HW_RTC_GetTimerValue( ); 796 .loc 1 387 0 797 .cfi_startproc 798 @ args = 0, pretend = 0, frame = 0 799 @ frame_needed = 0, uses_anonymous_args = 0 800 .LVL96: 801 0000 70B5 push {r4, r5, r6, lr} 802 .LCFI7: 803 .cfi_def_cfa_offset 16 804 .cfi_offset 4, -16 805 .cfi_offset 5, -12 806 .cfi_offset 6, -8 807 .cfi_offset 14, -4 808 0002 0500 movs r5, r0 388:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** uint32_t pastInTicks = HW_RTC_ms2Tick( past ); 809 .loc 1 388 0 810 0004 FFF7FEFF bl HW_RTC_GetTimerValue 811 .LVL97: 812 0008 0400 movs r4, r0 813 .LVL98: 389:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** /* intentional wrap around. Works Ok if tick duation below 1ms */ 814 .loc 1 389 0 815 000a 2800 movs r0, r5 816 .LVL99: 817 000c FFF7FEFF bl HW_RTC_ms2Tick 818 .LVL100: 391:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** } 819 .loc 1 391 0 ARM GAS /tmp/cciA02i6.s page 28 820 0010 201A subs r0, r4, r0 821 .LVL101: 822 0012 FFF7FEFF bl HW_RTC_Tick2ms 823 .LVL102: 392:./Middlewares/Third_Party/Lora/Utilities/timeServer.c **** 824 .loc 1 392 0 825 @ sp needed 826 .LVL103: 827 .LVL104: 828 0016 70BD pop {r4, r5, r6, pc} 829 .cfi_endproc 830 .LFE106: 832 .section .bss.TimerListHead,"aw",%nobits 833 .align 2 834 .set .LANCHOR0,. + 0 837 TimerListHead: 838 0000 00000000 .space 4 839 .text 840 .Letext0: 841 .file 3 "/usr/arm-none-eabi/include/machine/_default_types.h" 842 .file 4 "/usr/arm-none-eabi/include/sys/lock.h" 843 .file 5 "/usr/arm-none-eabi/include/sys/_types.h" 844 .file 6 "/usr/lib/gcc/arm-none-eabi/7.2.0/include/stddef.h" 845 .file 7 "/usr/arm-none-eabi/include/sys/reent.h" 846 .file 8 "/usr/arm-none-eabi/include/sys/_stdint.h" 847 .file 9 "/usr/arm-none-eabi/include/time.h" 848 .file 10 "/usr/arm-none-eabi/include/math.h" 849 .file 11 "Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h" 850 .file 12 "Middlewares/Third_Party/Lora/Utilities/utilities.h" 851 .file 13 "./Middlewares/Third_Party/Lora/Utilities/timeServer.h" 852 .file 14 "Inc/hw_rtc.h" ARM GAS /tmp/cciA02i6.s page 29 DEFINED SYMBOLS *ABS*:0000000000000000 timeServer.c /tmp/cciA02i6.s:16 .text.TimerSetTimeout:0000000000000000 $t /tmp/cciA02i6.s:22 .text.TimerSetTimeout:0000000000000000 TimerSetTimeout /tmp/cciA02i6.s:76 .text.TimerInit:0000000000000000 $t /tmp/cciA02i6.s:83 .text.TimerInit:0000000000000000 TimerInit /tmp/cciA02i6.s:109 .text.TimerStart:0000000000000000 $t /tmp/cciA02i6.s:116 .text.TimerStart:0000000000000000 TimerStart /tmp/cciA02i6.s:336 .text.TimerStart:00000000000000a8 $d /tmp/cciA02i6.s:343 .text.TimerIrqHandler:0000000000000000 $t /tmp/cciA02i6.s:350 .text.TimerIrqHandler:0000000000000000 TimerIrqHandler /tmp/cciA02i6.s:476 .text.TimerIrqHandler:0000000000000080 $d /tmp/cciA02i6.s:481 .text.TimerStop:0000000000000000 $t /tmp/cciA02i6.s:488 .text.TimerStop:0000000000000000 TimerStop /tmp/cciA02i6.s:655 .text.TimerStop:000000000000007c $d /tmp/cciA02i6.s:660 .text.TimerReset:0000000000000000 $t /tmp/cciA02i6.s:667 .text.TimerReset:0000000000000000 TimerReset /tmp/cciA02i6.s:695 .text.TimerSetValue:0000000000000000 $t /tmp/cciA02i6.s:702 .text.TimerSetValue:0000000000000000 TimerSetValue /tmp/cciA02i6.s:756 .text.TimerGetCurrentTime:0000000000000000 $t /tmp/cciA02i6.s:763 .text.TimerGetCurrentTime:0000000000000000 TimerGetCurrentTime /tmp/cciA02i6.s:787 .text.TimerGetElapsedTime:0000000000000000 $t /tmp/cciA02i6.s:794 .text.TimerGetElapsedTime:0000000000000000 TimerGetElapsedTime /tmp/cciA02i6.s:833 .bss.TimerListHead:0000000000000000 $d /tmp/cciA02i6.s:837 .bss.TimerListHead:0000000000000000 TimerListHead .debug_frame:0000000000000010 $d UNDEFINED SYMBOLS HW_RTC_GetMinimumTimeout HW_RTC_GetTimerElapsedTime HW_RTC_SetAlarm HW_RTC_SetTimerContext HW_RTC_GetTimerContext HW_RTC_StopAlarm HW_RTC_ms2Tick HW_RTC_GetTimerValue HW_RTC_Tick2ms