ARM GAS /tmp/ccGAhXKe.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 "hw_rtc.c" 12 .text 13 .Ltext0: 14 .cfi_sections .debug_frame 15 .section .text.HW_RTC_GetCalendarValue,"ax",%progbits 16 .align 1 17 .syntax unified 18 .code 16 19 .thumb_func 20 .fpu softvfp 22 HW_RTC_GetCalendarValue: 23 .LFB113: 24 .file 1 "./Src/hw_rtc.c" 1:./Src/hw_rtc.c **** /* 2:./Src/hw_rtc.c **** / _____) _ | | 3:./Src/hw_rtc.c **** ( (____ _____ ____ _| |_ _____ ____| |__ 4:./Src/hw_rtc.c **** \____ \| ___ | (_ _) ___ |/ ___) _ \ 5:./Src/hw_rtc.c **** _____) ) ____| | | || |_| ____( (___| | | | 6:./Src/hw_rtc.c **** (______/|_____)_|_|_| \__)_____)\____)_| |_| 7:./Src/hw_rtc.c **** (C)2013 Semtech 8:./Src/hw_rtc.c **** 9:./Src/hw_rtc.c **** Description: MCU RTC timer 10:./Src/hw_rtc.c **** 11:./Src/hw_rtc.c **** License: Revised BSD License, see LICENSE.TXT file include in the project 12:./Src/hw_rtc.c **** 13:./Src/hw_rtc.c **** Maintainer: Miguel Luis and Gregory Cristian 14:./Src/hw_rtc.c **** */ 15:./Src/hw_rtc.c **** /******************************************************************************* 16:./Src/hw_rtc.c **** * @file hw_rtc.c 17:./Src/hw_rtc.c **** * @author MCD Application Team 18:./Src/hw_rtc.c **** * @version V1.1.2 19:./Src/hw_rtc.c **** * @date 08-September-2017 20:./Src/hw_rtc.c **** * @brief driver for RTC 21:./Src/hw_rtc.c **** ****************************************************************************** 22:./Src/hw_rtc.c **** * @attention 23:./Src/hw_rtc.c **** * 24:./Src/hw_rtc.c **** *

© Copyright (c) 2017 STMicroelectronics International N.V. 25:./Src/hw_rtc.c **** * All rights reserved.

26:./Src/hw_rtc.c **** * 27:./Src/hw_rtc.c **** * Redistribution and use in source and binary forms, with or without 28:./Src/hw_rtc.c **** * modification, are permitted, provided that the following conditions are met: 29:./Src/hw_rtc.c **** * 30:./Src/hw_rtc.c **** * 1. Redistribution of source code must retain the above copyright notice, 31:./Src/hw_rtc.c **** * this list of conditions and the following disclaimer. 32:./Src/hw_rtc.c **** * 2. Redistributions in binary form must reproduce the above copyright notice, 33:./Src/hw_rtc.c **** * this list of conditions and the following disclaimer in the documentation 34:./Src/hw_rtc.c **** * and/or other materials provided with the distribution. ARM GAS /tmp/ccGAhXKe.s page 2 35:./Src/hw_rtc.c **** * 3. Neither the name of STMicroelectronics nor the names of other 36:./Src/hw_rtc.c **** * contributors to this software may be used to endorse or promote products 37:./Src/hw_rtc.c **** * derived from this software without specific written permission. 38:./Src/hw_rtc.c **** * 4. This software, including modifications and/or derivative works of this 39:./Src/hw_rtc.c **** * software, must execute solely and exclusively on microcontroller or 40:./Src/hw_rtc.c **** * microprocessor devices manufactured by or for STMicroelectronics. 41:./Src/hw_rtc.c **** * 5. Redistribution and use of this software other than as permitted under 42:./Src/hw_rtc.c **** * this license is void and will automatically terminate your rights under 43:./Src/hw_rtc.c **** * this license. 44:./Src/hw_rtc.c **** * 45:./Src/hw_rtc.c **** * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" 46:./Src/hw_rtc.c **** * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT 47:./Src/hw_rtc.c **** * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 48:./Src/hw_rtc.c **** * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY 49:./Src/hw_rtc.c **** * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT 50:./Src/hw_rtc.c **** * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 51:./Src/hw_rtc.c **** * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 52:./Src/hw_rtc.c **** * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 53:./Src/hw_rtc.c **** * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 54:./Src/hw_rtc.c **** * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 55:./Src/hw_rtc.c **** * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 56:./Src/hw_rtc.c **** * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 57:./Src/hw_rtc.c **** * 58:./Src/hw_rtc.c **** ****************************************************************************** 59:./Src/hw_rtc.c **** */ 60:./Src/hw_rtc.c **** 61:./Src/hw_rtc.c **** /* Includes ------------------------------------------------------------------*/ 62:./Src/hw_rtc.c **** #include "hw.h" 63:./Src/hw_rtc.c **** #include "low_power.h" 64:./Src/hw_rtc.c **** 65:./Src/hw_rtc.c **** /* Private typedef -----------------------------------------------------------*/ 66:./Src/hw_rtc.c **** typedef struct 67:./Src/hw_rtc.c **** { 68:./Src/hw_rtc.c **** TimerTime_t Rtc_Time; /* Reference time */ 69:./Src/hw_rtc.c **** 70:./Src/hw_rtc.c **** RTC_TimeTypeDef RTC_Calndr_Time; /* Reference time in calendar format */ 71:./Src/hw_rtc.c **** 72:./Src/hw_rtc.c **** RTC_DateTypeDef RTC_Calndr_Date; /* Reference date in calendar format */ 73:./Src/hw_rtc.c **** 74:./Src/hw_rtc.c **** } RtcTimerContext_t; 75:./Src/hw_rtc.c **** 76:./Src/hw_rtc.c **** /* Private define ------------------------------------------------------------*/ 77:./Src/hw_rtc.c **** 78:./Src/hw_rtc.c **** /* MCU Wake Up Time */ 79:./Src/hw_rtc.c **** #define MIN_ALARM_DELAY 3 /* in ticks */ 80:./Src/hw_rtc.c **** 81:./Src/hw_rtc.c **** /* subsecond number of bits */ 82:./Src/hw_rtc.c **** #define N_PREDIV_S 10 83:./Src/hw_rtc.c **** 84:./Src/hw_rtc.c **** /* Synchonuous prediv */ 85:./Src/hw_rtc.c **** #define PREDIV_S ((1<>N_PREDIV_S) 101:./Src/hw_rtc.c **** 102:./Src/hw_rtc.c **** #define COMMON_FACTOR 3 103:./Src/hw_rtc.c **** #define CONV_NUMER (MSEC_NUMBER>>COMMON_FACTOR) 104:./Src/hw_rtc.c **** #define CONV_DENOM (1<<(N_PREDIV_S-COMMON_FACTOR)) 105:./Src/hw_rtc.c **** 106:./Src/hw_rtc.c **** #define DAYS_IN_LEAP_YEAR (uint32_t) 366 107:./Src/hw_rtc.c **** 108:./Src/hw_rtc.c **** #define DAYS_IN_YEAR (uint32_t) 365 109:./Src/hw_rtc.c **** 110:./Src/hw_rtc.c **** #define SECONDS_IN_1DAY (uint32_t) 86400 111:./Src/hw_rtc.c **** 112:./Src/hw_rtc.c **** #define SECONDS_IN_1HOUR (uint32_t) 3600 113:./Src/hw_rtc.c **** 114:./Src/hw_rtc.c **** #define SECONDS_IN_1MINUTE (uint32_t) 60 115:./Src/hw_rtc.c **** 116:./Src/hw_rtc.c **** #define MINUTES_IN_1HOUR (uint32_t) 60 117:./Src/hw_rtc.c **** 118:./Src/hw_rtc.c **** #define HOURS_IN_1DAY (uint32_t) 24 119:./Src/hw_rtc.c **** 120:./Src/hw_rtc.c **** #define DAYS_IN_MONTH_CORRECTION_NORM ((uint32_t) 0x99AAA0 ) 121:./Src/hw_rtc.c **** #define DAYS_IN_MONTH_CORRECTION_LEAP ((uint32_t) 0x445550 ) 122:./Src/hw_rtc.c **** 123:./Src/hw_rtc.c **** 124:./Src/hw_rtc.c **** /* Calculates ceiling(X/N) */ 125:./Src/hw_rtc.c **** #define DIVC(X,N) ( ( (X) + (N) -1 ) / (N) ) 126:./Src/hw_rtc.c **** 127:./Src/hw_rtc.c **** 128:./Src/hw_rtc.c **** /* Private macro -------------------------------------------------------------*/ 129:./Src/hw_rtc.c **** /* Private variables ---------------------------------------------------------*/ 130:./Src/hw_rtc.c **** /*! 131:./Src/hw_rtc.c **** * \brief Indicates if the RTC is already Initalized or not 132:./Src/hw_rtc.c **** */ 133:./Src/hw_rtc.c **** static bool HW_RTC_Initalized = false; 134:./Src/hw_rtc.c **** 135:./Src/hw_rtc.c **** /*! 136:./Src/hw_rtc.c **** * \brief compensates MCU wakeup time 137:./Src/hw_rtc.c **** */ 138:./Src/hw_rtc.c **** 139:./Src/hw_rtc.c **** static bool McuWakeUpTimeInitialized = false; 140:./Src/hw_rtc.c **** 141:./Src/hw_rtc.c **** /*! 142:./Src/hw_rtc.c **** * \brief compensates MCU wakeup time 143:./Src/hw_rtc.c **** */ 144:./Src/hw_rtc.c **** 145:./Src/hw_rtc.c **** static int16_t McuWakeUpTimeCal = 0; 146:./Src/hw_rtc.c **** 147:./Src/hw_rtc.c **** /*! 148:./Src/hw_rtc.c **** * Number of days in each month on a normal year ARM GAS /tmp/ccGAhXKe.s page 4 149:./Src/hw_rtc.c **** */ 150:./Src/hw_rtc.c **** static const uint8_t DaysInMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 151:./Src/hw_rtc.c **** 152:./Src/hw_rtc.c **** /*! 153:./Src/hw_rtc.c **** * Number of days in each month on a leap year 154:./Src/hw_rtc.c **** */ 155:./Src/hw_rtc.c **** static const uint8_t DaysInMonthLeapYear[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 156:./Src/hw_rtc.c **** 157:./Src/hw_rtc.c **** static RTC_HandleTypeDef RtcHandle={0}; 158:./Src/hw_rtc.c **** 159:./Src/hw_rtc.c **** static RTC_AlarmTypeDef RTC_AlarmStructure; 160:./Src/hw_rtc.c **** 161:./Src/hw_rtc.c **** /*! 162:./Src/hw_rtc.c **** * Keep the value of the RTC timer when the RTC alarm is set 163:./Src/hw_rtc.c **** * Set with the HW_RTC_SetTimerContext function 164:./Src/hw_rtc.c **** * Value is kept as a Reference to calculate alarm 165:./Src/hw_rtc.c **** */ 166:./Src/hw_rtc.c **** static RtcTimerContext_t RtcTimerContext; 167:./Src/hw_rtc.c **** 168:./Src/hw_rtc.c **** /* Private function prototypes -----------------------------------------------*/ 169:./Src/hw_rtc.c **** 170:./Src/hw_rtc.c **** static void HW_RTC_SetConfig( void ); 171:./Src/hw_rtc.c **** 172:./Src/hw_rtc.c **** static void HW_RTC_SetAlarmConfig( void ); 173:./Src/hw_rtc.c **** 174:./Src/hw_rtc.c **** static void HW_RTC_StartWakeUpAlarm( uint32_t timeoutValue ); 175:./Src/hw_rtc.c **** 176:./Src/hw_rtc.c **** static TimerTime_t HW_RTC_GetCalendarValue( RTC_DateTypeDef* RTC_DateStruct, RTC_TimeTypeDef* RTC_ 177:./Src/hw_rtc.c **** 178:./Src/hw_rtc.c **** /* Exported functions ---------------------------------------------------------*/ 179:./Src/hw_rtc.c **** 180:./Src/hw_rtc.c **** /*! 181:./Src/hw_rtc.c **** * @brief Initializes the RTC timer 182:./Src/hw_rtc.c **** * @note The timer is based on the RTC 183:./Src/hw_rtc.c **** * @param none 184:./Src/hw_rtc.c **** * @retval none 185:./Src/hw_rtc.c **** */ 186:./Src/hw_rtc.c **** void HW_RTC_Init( void ) 187:./Src/hw_rtc.c **** { 188:./Src/hw_rtc.c **** if( HW_RTC_Initalized == false ) 189:./Src/hw_rtc.c **** { 190:./Src/hw_rtc.c **** HW_RTC_SetConfig( ); 191:./Src/hw_rtc.c **** HW_RTC_SetAlarmConfig( ); 192:./Src/hw_rtc.c **** HW_RTC_SetTimerContext( ); 193:./Src/hw_rtc.c **** HW_RTC_Initalized = true; 194:./Src/hw_rtc.c **** } 195:./Src/hw_rtc.c **** } 196:./Src/hw_rtc.c **** 197:./Src/hw_rtc.c **** /*! 198:./Src/hw_rtc.c **** * @brief Configures the RTC timer 199:./Src/hw_rtc.c **** * @note The timer is based on the RTC 200:./Src/hw_rtc.c **** * @param none 201:./Src/hw_rtc.c **** * @retval none 202:./Src/hw_rtc.c **** */ 203:./Src/hw_rtc.c **** static void HW_RTC_SetConfig( void ) 204:./Src/hw_rtc.c **** { 205:./Src/hw_rtc.c **** RTC_TimeTypeDef RTC_TimeStruct; ARM GAS /tmp/ccGAhXKe.s page 5 206:./Src/hw_rtc.c **** RTC_DateTypeDef RTC_DateStruct; 207:./Src/hw_rtc.c **** 208:./Src/hw_rtc.c **** RtcHandle.Instance = RTC; 209:./Src/hw_rtc.c **** 210:./Src/hw_rtc.c **** RtcHandle.Init.HourFormat = RTC_HOURFORMAT_24; 211:./Src/hw_rtc.c **** RtcHandle.Init.AsynchPrediv = PREDIV_A; /* RTC_ASYNCH_PREDIV; */ 212:./Src/hw_rtc.c **** RtcHandle.Init.SynchPrediv = PREDIV_S; /* RTC_SYNCH_PREDIV; */ 213:./Src/hw_rtc.c **** RtcHandle.Init.OutPut = RTC_OUTPUT; 214:./Src/hw_rtc.c **** RtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; 215:./Src/hw_rtc.c **** RtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; 216:./Src/hw_rtc.c **** 217:./Src/hw_rtc.c **** HAL_RTC_Init( &RtcHandle ); 218:./Src/hw_rtc.c **** 219:./Src/hw_rtc.c **** /*Monday 1st January 2016*/ 220:./Src/hw_rtc.c **** RTC_DateStruct.Year = 0; 221:./Src/hw_rtc.c **** RTC_DateStruct.Month = RTC_MONTH_JANUARY; 222:./Src/hw_rtc.c **** RTC_DateStruct.Date = 1; 223:./Src/hw_rtc.c **** RTC_DateStruct.WeekDay = RTC_WEEKDAY_MONDAY; 224:./Src/hw_rtc.c **** HAL_RTC_SetDate(&RtcHandle , &RTC_DateStruct, RTC_FORMAT_BIN); 225:./Src/hw_rtc.c **** 226:./Src/hw_rtc.c **** /*at 0:0:0*/ 227:./Src/hw_rtc.c **** RTC_TimeStruct.Hours = 0; 228:./Src/hw_rtc.c **** RTC_TimeStruct.Minutes = 0; 229:./Src/hw_rtc.c **** 230:./Src/hw_rtc.c **** RTC_TimeStruct.Seconds = 0; 231:./Src/hw_rtc.c **** RTC_TimeStruct.TimeFormat = 0; 232:./Src/hw_rtc.c **** RTC_TimeStruct.SubSeconds = 0; 233:./Src/hw_rtc.c **** RTC_TimeStruct.StoreOperation = RTC_DAYLIGHTSAVING_NONE; 234:./Src/hw_rtc.c **** RTC_TimeStruct.DayLightSaving = RTC_STOREOPERATION_RESET; 235:./Src/hw_rtc.c **** 236:./Src/hw_rtc.c **** HAL_RTC_SetTime(&RtcHandle , &RTC_TimeStruct, RTC_FORMAT_BIN); 237:./Src/hw_rtc.c **** 238:./Src/hw_rtc.c **** /*Enable Direct Read of the calendar registers (not through Shadow) */ 239:./Src/hw_rtc.c **** HAL_RTCEx_EnableBypassShadow(&RtcHandle); 240:./Src/hw_rtc.c **** } 241:./Src/hw_rtc.c **** 242:./Src/hw_rtc.c **** /*! 243:./Src/hw_rtc.c **** * @brief calculates the wake up time between wake up and mcu start 244:./Src/hw_rtc.c **** * @note resulotion in RTC_ALARM_TIME_BASE in timer ticks 245:./Src/hw_rtc.c **** * @param none 246:./Src/hw_rtc.c **** * @retval none 247:./Src/hw_rtc.c **** */ 248:./Src/hw_rtc.c **** void HW_RTC_setMcuWakeUpTime( void ) 249:./Src/hw_rtc.c **** { 250:./Src/hw_rtc.c **** RTC_TimeTypeDef RTC_TimeStruct; 251:./Src/hw_rtc.c **** RTC_DateTypeDef RTC_DateStruct; 252:./Src/hw_rtc.c **** 253:./Src/hw_rtc.c **** TimerTime_t now, hit; 254:./Src/hw_rtc.c **** int16_t McuWakeUpTime; 255:./Src/hw_rtc.c **** 256:./Src/hw_rtc.c **** if ((McuWakeUpTimeInitialized == false) && 257:./Src/hw_rtc.c **** ( HAL_NVIC_GetPendingIRQ( RTC_Alarm_IRQn ) == 1)) 258:./Src/hw_rtc.c **** { /* warning: works ok if now is below 30 days 259:./Src/hw_rtc.c **** it is ok since it's done once at first alarm wake-up*/ 260:./Src/hw_rtc.c **** McuWakeUpTimeInitialized = true; 261:./Src/hw_rtc.c **** now = HW_RTC_GetCalendarValue( &RTC_DateStruct, &RTC_TimeStruct ); 262:./Src/hw_rtc.c **** ARM GAS /tmp/ccGAhXKe.s page 6 263:./Src/hw_rtc.c **** DBG_GPIO_SET(GPIOB, GPIO_PIN_13); 264:./Src/hw_rtc.c **** DBG_GPIO_RST(GPIOB, GPIO_PIN_13); 265:./Src/hw_rtc.c **** HAL_RTC_GetAlarm(&RtcHandle, &RTC_AlarmStructure, RTC_ALARM_A, RTC_FORMAT_BIN ); 266:./Src/hw_rtc.c **** hit = RTC_AlarmStructure.AlarmTime.Seconds+ 267:./Src/hw_rtc.c **** 60*(RTC_AlarmStructure.AlarmTime.Minutes+ 268:./Src/hw_rtc.c **** 60*(RTC_AlarmStructure.AlarmTime.Hours+ 269:./Src/hw_rtc.c **** 24*(RTC_AlarmStructure.AlarmDateWeekDay))); 270:./Src/hw_rtc.c **** hit = ( hit << N_PREDIV_S ) + (PREDIV_S - RTC_AlarmStructure.AlarmTime.SubSeconds); 271:./Src/hw_rtc.c **** 272:./Src/hw_rtc.c **** McuWakeUpTime = (int16_t) ((now-hit)); 273:./Src/hw_rtc.c **** McuWakeUpTimeCal += McuWakeUpTime; 274:./Src/hw_rtc.c **** DBG_PRINTF("Cal=%d, %d\n\r",McuWakeUpTimeCal, McuWakeUpTime); 275:./Src/hw_rtc.c **** } 276:./Src/hw_rtc.c **** } 277:./Src/hw_rtc.c **** 278:./Src/hw_rtc.c **** int16_t HW_RTC_getMcuWakeUpTime( void ) 279:./Src/hw_rtc.c **** { 280:./Src/hw_rtc.c **** return McuWakeUpTimeCal; 281:./Src/hw_rtc.c **** } 282:./Src/hw_rtc.c **** 283:./Src/hw_rtc.c **** /*! 284:./Src/hw_rtc.c **** * @brief returns the wake up time in ticks 285:./Src/hw_rtc.c **** * @param none 286:./Src/hw_rtc.c **** * @retval wake up time in ticks 287:./Src/hw_rtc.c **** */ 288:./Src/hw_rtc.c **** uint32_t HW_RTC_GetMinimumTimeout( void ) 289:./Src/hw_rtc.c **** { 290:./Src/hw_rtc.c **** return( MIN_ALARM_DELAY ); 291:./Src/hw_rtc.c **** } 292:./Src/hw_rtc.c **** 293:./Src/hw_rtc.c **** /*! 294:./Src/hw_rtc.c **** * @brief converts time in ms to time in ticks 295:./Src/hw_rtc.c **** * @param [IN] time in milliseconds 296:./Src/hw_rtc.c **** * @retval returns time in timer ticks 297:./Src/hw_rtc.c **** */ 298:./Src/hw_rtc.c **** uint32_t HW_RTC_ms2Tick( TimerTime_t timeMicroSec ) 299:./Src/hw_rtc.c **** { 300:./Src/hw_rtc.c **** /*return( ( timeMicroSec / RTC_ALARM_TIME_BASE ) ); */ 301:./Src/hw_rtc.c **** return ( uint32_t) ( ( ((uint64_t)timeMicroSec) * CONV_DENOM ) / CONV_NUMER ); 302:./Src/hw_rtc.c **** } 303:./Src/hw_rtc.c **** 304:./Src/hw_rtc.c **** /*! 305:./Src/hw_rtc.c **** * @brief converts time in ticks to time in ms 306:./Src/hw_rtc.c **** * @param [IN] time in timer ticks 307:./Src/hw_rtc.c **** * @retval returns time in milliseconds 308:./Src/hw_rtc.c **** */ 309:./Src/hw_rtc.c **** TimerTime_t HW_RTC_Tick2ms( uint32_t tick ) 310:./Src/hw_rtc.c **** { 311:./Src/hw_rtc.c **** /*return( ( timeMicroSec * RTC_ALARM_TIME_BASE ) ); */ 312:./Src/hw_rtc.c **** return ( ( (uint64_t)( tick )* CONV_NUMER ) / CONV_DENOM ); 313:./Src/hw_rtc.c **** } 314:./Src/hw_rtc.c **** 315:./Src/hw_rtc.c **** /*! 316:./Src/hw_rtc.c **** * @brief Set the alarm 317:./Src/hw_rtc.c **** * @note The alarm is set at now (read in this funtion) + timeout 318:./Src/hw_rtc.c **** * @param timeout Duration of the Timer ticks 319:./Src/hw_rtc.c **** */ ARM GAS /tmp/ccGAhXKe.s page 7 320:./Src/hw_rtc.c **** void HW_RTC_SetAlarm( uint32_t timeout ) 321:./Src/hw_rtc.c **** { 322:./Src/hw_rtc.c **** /* we don't go in Low Power mode for timeout below MIN_ALARM_DELAY */ 323:./Src/hw_rtc.c **** if ( (MIN_ALARM_DELAY + McuWakeUpTimeCal ) < ((timeout - HW_RTC_GetTimerElapsedTime( ) )) ) 324:./Src/hw_rtc.c **** { 325:./Src/hw_rtc.c **** LowPower_Enable( e_LOW_POWER_RTC ); 326:./Src/hw_rtc.c **** } 327:./Src/hw_rtc.c **** else 328:./Src/hw_rtc.c **** { 329:./Src/hw_rtc.c **** LowPower_Disable( e_LOW_POWER_RTC ); 330:./Src/hw_rtc.c **** } 331:./Src/hw_rtc.c **** 332:./Src/hw_rtc.c **** if( LowPower_GetState() == 0 ) 333:./Src/hw_rtc.c **** { 334:./Src/hw_rtc.c **** LowPower_Enable( e_LOW_POWER_RTC ); 335:./Src/hw_rtc.c **** timeout = timeout - McuWakeUpTimeCal; 336:./Src/hw_rtc.c **** } 337:./Src/hw_rtc.c **** 338:./Src/hw_rtc.c **** HW_RTC_StartWakeUpAlarm( timeout ); 339:./Src/hw_rtc.c **** } 340:./Src/hw_rtc.c **** 341:./Src/hw_rtc.c **** /*! 342:./Src/hw_rtc.c **** * @brief Get the RTC timer elapsed time since the last Alarm was set 343:./Src/hw_rtc.c **** * @param none 344:./Src/hw_rtc.c **** * @retval RTC Elapsed time in ticks 345:./Src/hw_rtc.c **** */ 346:./Src/hw_rtc.c **** uint32_t HW_RTC_GetTimerElapsedTime( void ) 347:./Src/hw_rtc.c **** { 348:./Src/hw_rtc.c **** RTC_TimeTypeDef RTC_TimeStruct; 349:./Src/hw_rtc.c **** RTC_DateTypeDef RTC_DateStruct; 350:./Src/hw_rtc.c **** 351:./Src/hw_rtc.c **** TimerTime_t CalendarValue = HW_RTC_GetCalendarValue(&RTC_DateStruct, &RTC_TimeStruct ); 352:./Src/hw_rtc.c **** 353:./Src/hw_rtc.c **** return( ( uint32_t )( CalendarValue - RtcTimerContext.Rtc_Time )); 354:./Src/hw_rtc.c **** } 355:./Src/hw_rtc.c **** 356:./Src/hw_rtc.c **** /*! 357:./Src/hw_rtc.c **** * @brief Get the RTC timer value 358:./Src/hw_rtc.c **** * @param none 359:./Src/hw_rtc.c **** * @retval RTC Timer value in ticks 360:./Src/hw_rtc.c **** */ 361:./Src/hw_rtc.c **** uint32_t HW_RTC_GetTimerValue( void ) 362:./Src/hw_rtc.c **** { 363:./Src/hw_rtc.c **** RTC_TimeTypeDef RTC_TimeStruct; 364:./Src/hw_rtc.c **** RTC_DateTypeDef RTC_DateStruct; 365:./Src/hw_rtc.c **** 366:./Src/hw_rtc.c **** uint32_t CalendarValue = (uint32_t) HW_RTC_GetCalendarValue(&RTC_DateStruct, &RTC_TimeStruct ); 367:./Src/hw_rtc.c **** 368:./Src/hw_rtc.c **** return( CalendarValue ); 369:./Src/hw_rtc.c **** } 370:./Src/hw_rtc.c **** 371:./Src/hw_rtc.c **** /*! 372:./Src/hw_rtc.c **** * @brief Stop the Alarm 373:./Src/hw_rtc.c **** * @param none 374:./Src/hw_rtc.c **** * @retval none 375:./Src/hw_rtc.c **** */ 376:./Src/hw_rtc.c **** void HW_RTC_StopAlarm( void ) ARM GAS /tmp/ccGAhXKe.s page 8 377:./Src/hw_rtc.c **** { 378:./Src/hw_rtc.c **** 379:./Src/hw_rtc.c **** /* Clear RTC Alarm Flag */ 380:./Src/hw_rtc.c **** __HAL_RTC_ALARM_CLEAR_FLAG( &RtcHandle, RTC_FLAG_ALRAF); 381:./Src/hw_rtc.c **** 382:./Src/hw_rtc.c **** /* Disable the Alarm A interrupt */ 383:./Src/hw_rtc.c **** 384:./Src/hw_rtc.c **** HAL_RTC_DeactivateAlarm(&RtcHandle, RTC_ALARM_A ); 385:./Src/hw_rtc.c **** } 386:./Src/hw_rtc.c **** 387:./Src/hw_rtc.c **** /*! 388:./Src/hw_rtc.c **** * @brief RTC IRQ Handler on the RTC Alarm 389:./Src/hw_rtc.c **** * @param none 390:./Src/hw_rtc.c **** * @retval none 391:./Src/hw_rtc.c **** */ 392:./Src/hw_rtc.c **** void HW_RTC_IrqHandler ( void ) 393:./Src/hw_rtc.c **** { 394:./Src/hw_rtc.c **** RTC_HandleTypeDef* hrtc=&RtcHandle; 395:./Src/hw_rtc.c **** /* enable low power at irq*/ 396:./Src/hw_rtc.c **** LowPower_Enable( e_LOW_POWER_RTC ); 397:./Src/hw_rtc.c **** 398:./Src/hw_rtc.c **** /* Get the AlarmA interrupt source enable status */ 399:./Src/hw_rtc.c **** if(__HAL_RTC_ALARM_GET_IT_SOURCE(hrtc, RTC_IT_ALRA) != RESET) 400:./Src/hw_rtc.c **** { 401:./Src/hw_rtc.c **** /* Get the pending status of the AlarmA Interrupt */ 402:./Src/hw_rtc.c **** if(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAF) != RESET) 403:./Src/hw_rtc.c **** { 404:./Src/hw_rtc.c **** /* Clear the AlarmA interrupt pending bit */ 405:./Src/hw_rtc.c **** __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF); 406:./Src/hw_rtc.c **** /* Clear the EXTI's line Flag for RTC Alarm */ 407:./Src/hw_rtc.c **** __HAL_RTC_ALARM_EXTI_CLEAR_FLAG(); 408:./Src/hw_rtc.c **** /* AlarmA callback */ 409:./Src/hw_rtc.c **** HAL_RTC_AlarmAEventCallback(hrtc); 410:./Src/hw_rtc.c **** } 411:./Src/hw_rtc.c **** } 412:./Src/hw_rtc.c **** } 413:./Src/hw_rtc.c **** 414:./Src/hw_rtc.c **** 415:./Src/hw_rtc.c **** /*! 416:./Src/hw_rtc.c **** * @brief a delay of delay ms by polling RTC 417:./Src/hw_rtc.c **** * @param delay in ms 418:./Src/hw_rtc.c **** * @retval none 419:./Src/hw_rtc.c **** */ 420:./Src/hw_rtc.c **** void HW_RTC_DelayMs( uint32_t delay ) 421:./Src/hw_rtc.c **** { 422:./Src/hw_rtc.c **** TimerTime_t delayValue = 0; 423:./Src/hw_rtc.c **** TimerTime_t timeout = 0; 424:./Src/hw_rtc.c **** 425:./Src/hw_rtc.c **** delayValue = HW_RTC_ms2Tick( delay ); 426:./Src/hw_rtc.c **** 427:./Src/hw_rtc.c **** /* Wait delay ms */ 428:./Src/hw_rtc.c **** timeout = HW_RTC_GetTimerValue( ); 429:./Src/hw_rtc.c **** while( ( ( HW_RTC_GetTimerValue( ) - timeout ) ) < delayValue ) 430:./Src/hw_rtc.c **** { 431:./Src/hw_rtc.c **** __NOP( ); 432:./Src/hw_rtc.c **** } 433:./Src/hw_rtc.c **** } ARM GAS /tmp/ccGAhXKe.s page 9 434:./Src/hw_rtc.c **** 435:./Src/hw_rtc.c **** /*! 436:./Src/hw_rtc.c **** * @brief set Time Reference set also the RTC_DateStruct and RTC_TimeStruct 437:./Src/hw_rtc.c **** * @param none 438:./Src/hw_rtc.c **** * @retval Timer Value 439:./Src/hw_rtc.c **** */ 440:./Src/hw_rtc.c **** uint32_t HW_RTC_SetTimerContext( void ) 441:./Src/hw_rtc.c **** { 442:./Src/hw_rtc.c **** RtcTimerContext.Rtc_Time = HW_RTC_GetCalendarValue( &RtcTimerContext.RTC_Calndr_Date, &RtcTimerCo 443:./Src/hw_rtc.c **** return ( uint32_t ) RtcTimerContext.Rtc_Time; 444:./Src/hw_rtc.c **** } 445:./Src/hw_rtc.c **** 446:./Src/hw_rtc.c **** /*! 447:./Src/hw_rtc.c **** * @brief Get the RTC timer Reference 448:./Src/hw_rtc.c **** * @param none 449:./Src/hw_rtc.c **** * @retval Timer Value in Ticks 450:./Src/hw_rtc.c **** */ 451:./Src/hw_rtc.c **** uint32_t HW_RTC_GetTimerContext( void ) 452:./Src/hw_rtc.c **** { 453:./Src/hw_rtc.c **** return (uint32_t) RtcTimerContext.Rtc_Time; 454:./Src/hw_rtc.c **** } 455:./Src/hw_rtc.c **** /* Private functions ---------------------------------------------------------*/ 456:./Src/hw_rtc.c **** 457:./Src/hw_rtc.c **** /*! 458:./Src/hw_rtc.c **** * @brief configure alarm at init 459:./Src/hw_rtc.c **** * @param none 460:./Src/hw_rtc.c **** * @retval none 461:./Src/hw_rtc.c **** */ 462:./Src/hw_rtc.c **** static void HW_RTC_SetAlarmConfig( void ) 463:./Src/hw_rtc.c **** { 464:./Src/hw_rtc.c **** HAL_RTC_DeactivateAlarm(&RtcHandle, RTC_ALARM_A); 465:./Src/hw_rtc.c **** } 466:./Src/hw_rtc.c **** 467:./Src/hw_rtc.c **** /*! 468:./Src/hw_rtc.c **** * @brief start wake up alarm 469:./Src/hw_rtc.c **** * @note alarm in RtcTimerContext.Rtc_Time + timeoutValue 470:./Src/hw_rtc.c **** * @param timeoutValue in ticks 471:./Src/hw_rtc.c **** * @retval none 472:./Src/hw_rtc.c **** */ 473:./Src/hw_rtc.c **** static void HW_RTC_StartWakeUpAlarm( uint32_t timeoutValue ) 474:./Src/hw_rtc.c **** { 475:./Src/hw_rtc.c **** uint16_t rtcAlarmSubSeconds = 0; 476:./Src/hw_rtc.c **** uint16_t rtcAlarmSeconds = 0; 477:./Src/hw_rtc.c **** uint16_t rtcAlarmMinutes = 0; 478:./Src/hw_rtc.c **** uint16_t rtcAlarmHours = 0; 479:./Src/hw_rtc.c **** uint16_t rtcAlarmDays = 0; 480:./Src/hw_rtc.c **** RTC_TimeTypeDef RTC_TimeStruct = RtcTimerContext.RTC_Calndr_Time; 481:./Src/hw_rtc.c **** RTC_DateTypeDef RTC_DateStruct = RtcTimerContext.RTC_Calndr_Date; 482:./Src/hw_rtc.c **** 483:./Src/hw_rtc.c **** HW_RTC_StopAlarm( ); 484:./Src/hw_rtc.c **** DBG_GPIO_SET(GPIOB, GPIO_PIN_13); 485:./Src/hw_rtc.c **** 486:./Src/hw_rtc.c **** /*reverse counter */ 487:./Src/hw_rtc.c **** rtcAlarmSubSeconds = PREDIV_S - RTC_TimeStruct.SubSeconds; 488:./Src/hw_rtc.c **** rtcAlarmSubSeconds += ( timeoutValue & PREDIV_S); 489:./Src/hw_rtc.c **** /* convert timeout to seconds */ 490:./Src/hw_rtc.c **** timeoutValue >>= N_PREDIV_S; /* convert timeout in seconds */ ARM GAS /tmp/ccGAhXKe.s page 10 491:./Src/hw_rtc.c **** 492:./Src/hw_rtc.c **** /*convert microsecs to RTC format and add to 'Now' */ 493:./Src/hw_rtc.c **** rtcAlarmDays = RTC_DateStruct.Date; 494:./Src/hw_rtc.c **** while (timeoutValue >= SECONDS_IN_1DAY) 495:./Src/hw_rtc.c **** { 496:./Src/hw_rtc.c **** timeoutValue -= SECONDS_IN_1DAY; 497:./Src/hw_rtc.c **** rtcAlarmDays++; 498:./Src/hw_rtc.c **** } 499:./Src/hw_rtc.c **** 500:./Src/hw_rtc.c **** /* calc hours */ 501:./Src/hw_rtc.c **** rtcAlarmHours = RTC_TimeStruct.Hours; 502:./Src/hw_rtc.c **** while (timeoutValue >= SECONDS_IN_1HOUR) 503:./Src/hw_rtc.c **** { 504:./Src/hw_rtc.c **** timeoutValue -= SECONDS_IN_1HOUR; 505:./Src/hw_rtc.c **** rtcAlarmHours++; 506:./Src/hw_rtc.c **** } 507:./Src/hw_rtc.c **** 508:./Src/hw_rtc.c **** /* calc minutes */ 509:./Src/hw_rtc.c **** rtcAlarmMinutes = RTC_TimeStruct.Minutes; 510:./Src/hw_rtc.c **** while (timeoutValue >= SECONDS_IN_1MINUTE) 511:./Src/hw_rtc.c **** { 512:./Src/hw_rtc.c **** timeoutValue -= SECONDS_IN_1MINUTE; 513:./Src/hw_rtc.c **** rtcAlarmMinutes++; 514:./Src/hw_rtc.c **** } 515:./Src/hw_rtc.c **** 516:./Src/hw_rtc.c **** /* calc seconds */ 517:./Src/hw_rtc.c **** rtcAlarmSeconds = RTC_TimeStruct.Seconds + timeoutValue; 518:./Src/hw_rtc.c **** 519:./Src/hw_rtc.c **** /***** correct for modulo********/ 520:./Src/hw_rtc.c **** while (rtcAlarmSubSeconds >= (PREDIV_S+1)) 521:./Src/hw_rtc.c **** { 522:./Src/hw_rtc.c **** rtcAlarmSubSeconds -= (PREDIV_S+1); 523:./Src/hw_rtc.c **** rtcAlarmSeconds++; 524:./Src/hw_rtc.c **** } 525:./Src/hw_rtc.c **** 526:./Src/hw_rtc.c **** while (rtcAlarmSeconds >= SECONDS_IN_1MINUTE) 527:./Src/hw_rtc.c **** { 528:./Src/hw_rtc.c **** rtcAlarmSeconds -= SECONDS_IN_1MINUTE; 529:./Src/hw_rtc.c **** rtcAlarmMinutes++; 530:./Src/hw_rtc.c **** } 531:./Src/hw_rtc.c **** 532:./Src/hw_rtc.c **** while (rtcAlarmMinutes >= MINUTES_IN_1HOUR) 533:./Src/hw_rtc.c **** { 534:./Src/hw_rtc.c **** rtcAlarmMinutes -= MINUTES_IN_1HOUR; 535:./Src/hw_rtc.c **** rtcAlarmHours++; 536:./Src/hw_rtc.c **** } 537:./Src/hw_rtc.c **** 538:./Src/hw_rtc.c **** while (rtcAlarmHours >= HOURS_IN_1DAY) 539:./Src/hw_rtc.c **** { 540:./Src/hw_rtc.c **** rtcAlarmHours -= HOURS_IN_1DAY; 541:./Src/hw_rtc.c **** rtcAlarmDays++; 542:./Src/hw_rtc.c **** } 543:./Src/hw_rtc.c **** 544:./Src/hw_rtc.c **** if( RTC_DateStruct.Year % 4 == 0 ) 545:./Src/hw_rtc.c **** { 546:./Src/hw_rtc.c **** if( rtcAlarmDays > DaysInMonthLeapYear[ RTC_DateStruct.Month - 1 ] ) 547:./Src/hw_rtc.c **** { ARM GAS /tmp/ccGAhXKe.s page 11 548:./Src/hw_rtc.c **** rtcAlarmDays = rtcAlarmDays % DaysInMonthLeapYear[ RTC_DateStruct.Month - 1 ]; 549:./Src/hw_rtc.c **** } 550:./Src/hw_rtc.c **** } 551:./Src/hw_rtc.c **** else 552:./Src/hw_rtc.c **** { 553:./Src/hw_rtc.c **** if( rtcAlarmDays > DaysInMonth[ RTC_DateStruct.Month - 1 ] ) 554:./Src/hw_rtc.c **** { 555:./Src/hw_rtc.c **** rtcAlarmDays = rtcAlarmDays % DaysInMonth[ RTC_DateStruct.Month - 1 ]; 556:./Src/hw_rtc.c **** } 557:./Src/hw_rtc.c **** } 558:./Src/hw_rtc.c **** 559:./Src/hw_rtc.c **** /* Set RTC_AlarmStructure with calculated values*/ 560:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.SubSeconds = PREDIV_S-rtcAlarmSubSeconds; 561:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmSubSecondMask = HW_RTC_ALARMSUBSECONDMASK; 562:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.Seconds = rtcAlarmSeconds; 563:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.Minutes = rtcAlarmMinutes; 564:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.Hours = rtcAlarmHours; 565:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmDateWeekDay = ( uint8_t )rtcAlarmDays; 566:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.TimeFormat = RTC_TimeStruct.TimeFormat; 567:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE; 568:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmMask = RTC_ALARMMASK_NONE; 569:./Src/hw_rtc.c **** RTC_AlarmStructure.Alarm = RTC_ALARM_A; 570:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; 571:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET; 572:./Src/hw_rtc.c **** 573:./Src/hw_rtc.c **** /* Set RTC_Alarm */ 574:./Src/hw_rtc.c **** HAL_RTC_SetAlarm_IT( &RtcHandle, &RTC_AlarmStructure, RTC_FORMAT_BIN ); 575:./Src/hw_rtc.c **** 576:./Src/hw_rtc.c **** /* Debug Printf*/ 577:./Src/hw_rtc.c **** DBG( HW_RTC_GetCalendarValue( &RTC_DateStruct, &RTC_TimeStruct ); ); 578:./Src/hw_rtc.c **** DBG_PRINTF("it's %d:%d:%d:%d ", RTC_TimeStruct.Hours, RTC_TimeStruct.Minutes, RTC_TimeStruct.Seco 579:./Src/hw_rtc.c **** DBG_PRINTF("WU@ %d:%d:%d:%d\n\r", rtcAlarmHours, rtcAlarmMinutes, rtcAlarmSeconds, (rtcAlarmSubSe 580:./Src/hw_rtc.c **** 581:./Src/hw_rtc.c **** DBG_GPIO_RST(GPIOB, GPIO_PIN_13); 582:./Src/hw_rtc.c **** } 583:./Src/hw_rtc.c **** 584:./Src/hw_rtc.c **** 585:./Src/hw_rtc.c **** /*! 586:./Src/hw_rtc.c **** * @brief get current time from calendar in ticks 587:./Src/hw_rtc.c **** * @param pointer to RTC_DateStruct 588:./Src/hw_rtc.c **** * @param pointer to RTC_TimeStruct 589:./Src/hw_rtc.c **** * @retval time in ticks 590:./Src/hw_rtc.c **** */ 591:./Src/hw_rtc.c **** static TimerTime_t HW_RTC_GetCalendarValue( RTC_DateTypeDef* RTC_DateStruct, RTC_TimeTypeDef* RTC_T 592:./Src/hw_rtc.c **** { 25 .loc 1 592 0 26 .cfi_startproc 27 @ args = 0, pretend = 0, frame = 0 28 @ frame_needed = 0, uses_anonymous_args = 0 29 .LVL0: 30 0000 F8B5 push {r3, r4, r5, r6, r7, lr} 31 .LCFI0: 32 .cfi_def_cfa_offset 24 33 .cfi_offset 3, -24 34 .cfi_offset 4, -20 35 .cfi_offset 5, -16 36 .cfi_offset 6, -12 ARM GAS /tmp/ccGAhXKe.s page 12 37 .cfi_offset 7, -8 38 .cfi_offset 14, -4 39 0002 0600 movs r6, r0 40 0004 0C00 movs r4, r1 41 .LVL1: 593:./Src/hw_rtc.c **** TimerTime_t calendarValue = 0; 594:./Src/hw_rtc.c **** uint32_t first_read; 595:./Src/hw_rtc.c **** uint32_t correction; 596:./Src/hw_rtc.c **** 597:./Src/hw_rtc.c **** /* Get Time and Date*/ 598:./Src/hw_rtc.c **** HAL_RTC_GetTime( &RtcHandle, RTC_TimeStruct, RTC_FORMAT_BIN ); 42 .loc 1 598 0 43 0006 0022 movs r2, #0 44 0008 2448 ldr r0, .L6 45 .LVL2: 46 000a FFF7FEFF bl HAL_RTC_GetTime 47 .LVL3: 48 .L2: 599:./Src/hw_rtc.c **** 600:./Src/hw_rtc.c **** /* make sure it is correct due to asynchronus nature of RTC*/ 601:./Src/hw_rtc.c **** do { 602:./Src/hw_rtc.c **** first_read = RTC_TimeStruct->SubSeconds; 49 .loc 1 602 0 discriminator 1 50 000e 6768 ldr r7, [r4, #4] 51 .LVL4: 603:./Src/hw_rtc.c **** HAL_RTC_GetDate( &RtcHandle, RTC_DateStruct, RTC_FORMAT_BIN ); 52 .loc 1 603 0 discriminator 1 53 0010 224D ldr r5, .L6 54 0012 0022 movs r2, #0 55 0014 3100 movs r1, r6 56 0016 2800 movs r0, r5 57 0018 FFF7FEFF bl HAL_RTC_GetDate 58 .LVL5: 604:./Src/hw_rtc.c **** HAL_RTC_GetTime( &RtcHandle, RTC_TimeStruct, RTC_FORMAT_BIN ); 59 .loc 1 604 0 discriminator 1 60 001c 0022 movs r2, #0 61 001e 2100 movs r1, r4 62 0020 2800 movs r0, r5 63 0022 FFF7FEFF bl HAL_RTC_GetTime 64 .LVL6: 605:./Src/hw_rtc.c **** } while (first_read != RTC_TimeStruct->SubSeconds); 65 .loc 1 605 0 discriminator 1 66 0026 6268 ldr r2, [r4, #4] 67 0028 BA42 cmp r2, r7 68 002a F0D1 bne .L2 606:./Src/hw_rtc.c **** 607:./Src/hw_rtc.c **** /* calculte amount of elapsed days since 01/01/2000 */ 608:./Src/hw_rtc.c **** calendarValue= DIVC( (DAYS_IN_YEAR*3 + DAYS_IN_LEAP_YEAR)* RTC_DateStruct->Year , 4); 69 .loc 1 608 0 70 002c F178 ldrb r1, [r6, #3] 71 002e 1C4B ldr r3, .L6+4 72 0030 4B43 muls r3, r1 73 0032 0333 adds r3, r3, #3 74 0034 9D08 lsrs r5, r3, #2 75 .LVL7: 609:./Src/hw_rtc.c **** 610:./Src/hw_rtc.c **** correction = ( (RTC_DateStruct->Year % 4) == 0 ) ? DAYS_IN_MONTH_CORRECTION_LEAP : DAYS_IN_MONTH_ ARM GAS /tmp/ccGAhXKe.s page 13 76 .loc 1 610 0 77 0036 8B07 lsls r3, r1, #30 78 0038 2ED0 beq .L5 79 003a 1A4F ldr r7, .L6+8 80 .LVL8: 81 .L3: 611:./Src/hw_rtc.c **** 612:./Src/hw_rtc.c **** calendarValue +=( DIVC( (RTC_DateStruct->Month-1)*(30+31) ,2 ) - (((correction>> ((RTC_DateStruct 82 .loc 1 612 0 discriminator 4 83 003c 7078 ldrb r0, [r6, #1] 84 003e 0138 subs r0, r0, #1 85 0040 0301 lsls r3, r0, #4 86 0042 1B1A subs r3, r3, r0 87 0044 9B00 lsls r3, r3, #2 88 0046 1B18 adds r3, r3, r0 89 0048 0133 adds r3, r3, #1 90 004a D90F lsrs r1, r3, #31 91 004c C918 adds r1, r1, r3 92 004e 4910 asrs r1, r1, #1 93 0050 4000 lsls r0, r0, #1 94 0052 C740 lsrs r7, r7, r0 95 .LVL9: 96 0054 0323 movs r3, #3 97 0056 3B40 ands r3, r7 98 0058 CB1A subs r3, r1, r3 99 005a 5B19 adds r3, r3, r5 100 .LVL10: 613:./Src/hw_rtc.c **** 614:./Src/hw_rtc.c **** calendarValue += (RTC_DateStruct->Date -1); 101 .loc 1 614 0 discriminator 4 102 005c B178 ldrb r1, [r6, #2] 103 005e CB18 adds r3, r1, r3 104 .LVL11: 105 0060 013B subs r3, r3, #1 106 .LVL12: 615:./Src/hw_rtc.c **** 616:./Src/hw_rtc.c **** /* convert from days to seconds */ 617:./Src/hw_rtc.c **** calendarValue *= SECONDS_IN_1DAY; 107 .loc 1 617 0 discriminator 4 108 0062 5900 lsls r1, r3, #1 109 0064 CB18 adds r3, r1, r3 110 .LVL13: 111 0066 1901 lsls r1, r3, #4 112 0068 CB1A subs r3, r1, r3 113 006a 1901 lsls r1, r3, #4 114 006c C91A subs r1, r1, r3 115 006e CE01 lsls r6, r1, #7 116 .LVL14: 618:./Src/hw_rtc.c **** 619:./Src/hw_rtc.c **** calendarValue += ( ( uint32_t )RTC_TimeStruct->Seconds + 117 .loc 1 619 0 discriminator 4 118 0070 A778 ldrb r7, [r4, #2] 620:./Src/hw_rtc.c **** ( ( uint32_t )RTC_TimeStruct->Minutes * SECONDS_IN_1MINUTE ) + 621:./Src/hw_rtc.c **** ( ( uint32_t )RTC_TimeStruct->Hours * SECONDS_IN_1HOUR ) ) ; 119 .loc 1 621 0 discriminator 4 120 0072 2578 ldrb r5, [r4] 121 0074 2901 lsls r1, r5, #4 ARM GAS /tmp/ccGAhXKe.s page 14 122 0076 4D1B subs r5, r1, r5 123 0078 2901 lsls r1, r5, #4 124 007a 491B subs r1, r1, r5 125 007c 0B01 lsls r3, r1, #4 620:./Src/hw_rtc.c **** ( ( uint32_t )RTC_TimeStruct->Minutes * SECONDS_IN_1MINUTE ) + 126 .loc 1 620 0 discriminator 4 127 007e 6078 ldrb r0, [r4, #1] 128 0080 0101 lsls r1, r0, #4 129 0082 091A subs r1, r1, r0 130 0084 8800 lsls r0, r1, #2 131 0086 1818 adds r0, r3, r0 132 0088 C019 adds r0, r0, r7 619:./Src/hw_rtc.c **** ( ( uint32_t )RTC_TimeStruct->Minutes * SECONDS_IN_1MINUTE ) + 133 .loc 1 619 0 discriminator 4 134 008a 8019 adds r0, r0, r6 135 .LVL15: 622:./Src/hw_rtc.c **** 623:./Src/hw_rtc.c **** 624:./Src/hw_rtc.c **** 625:./Src/hw_rtc.c **** calendarValue = (calendarValue<SubSeconds); 136 .loc 1 625 0 discriminator 4 137 008c 8002 lsls r0, r0, #10 138 .LVL16: 139 008e 801A subs r0, r0, r2 140 0090 054B ldr r3, .L6+12 141 .LVL17: 142 0092 9C46 mov ip, r3 143 0094 6044 add r0, r0, ip 144 .LVL18: 626:./Src/hw_rtc.c **** 627:./Src/hw_rtc.c **** return( calendarValue ); 628:./Src/hw_rtc.c **** } 145 .loc 1 628 0 discriminator 4 146 @ sp needed 147 .LVL19: 148 0096 F8BD pop {r3, r4, r5, r6, r7, pc} 149 .LVL20: 150 .L5: 610:./Src/hw_rtc.c **** 151 .loc 1 610 0 152 0098 044F ldr r7, .L6+16 153 .LVL21: 154 009a CFE7 b .L3 155 .L7: 156 .align 2 157 .L6: 158 009c 00000000 .word .LANCHOR0 159 00a0 B5050000 .word 1461 160 00a4 A0AA9900 .word 10070688 161 00a8 FF030000 .word 1023 162 00ac 50554400 .word 4478288 163 .cfi_endproc 164 .LFE113: 166 .section .text.HW_RTC_Init,"ax",%progbits 167 .align 1 168 .global HW_RTC_Init 169 .syntax unified ARM GAS /tmp/ccGAhXKe.s page 15 170 .code 16 171 .thumb_func 172 .fpu softvfp 174 HW_RTC_Init: 175 .LFB96: 187:./Src/hw_rtc.c **** if( HW_RTC_Initalized == false ) 176 .loc 1 187 0 177 .cfi_startproc 178 @ args = 0, pretend = 0, frame = 24 179 @ frame_needed = 0, uses_anonymous_args = 0 180 0000 70B5 push {r4, r5, r6, lr} 181 .LCFI1: 182 .cfi_def_cfa_offset 16 183 .cfi_offset 4, -16 184 .cfi_offset 5, -12 185 .cfi_offset 6, -8 186 .cfi_offset 14, -4 187 0002 86B0 sub sp, sp, #24 188 .LCFI2: 189 .cfi_def_cfa_offset 40 188:./Src/hw_rtc.c **** { 190 .loc 1 188 0 191 0004 1E4B ldr r3, .L11 192 0006 1B78 ldrb r3, [r3] 193 0008 002B cmp r3, #0 194 000a 01D0 beq .L10 195 .L8: 195:./Src/hw_rtc.c **** 196 .loc 1 195 0 197 000c 06B0 add sp, sp, #24 198 @ sp needed 199 000e 70BD pop {r4, r5, r6, pc} 200 .L10: 201 .LBB26: 202 .LBB27: 208:./Src/hw_rtc.c **** 203 .loc 1 208 0 204 0010 1C4C ldr r4, .L11+4 205 0012 1D4B ldr r3, .L11+8 206 0014 2360 str r3, [r4] 210:./Src/hw_rtc.c **** RtcHandle.Init.AsynchPrediv = PREDIV_A; /* RTC_ASYNCH_PREDIV; */ 207 .loc 1 210 0 208 0016 0025 movs r5, #0 209 0018 6560 str r5, [r4, #4] 211:./Src/hw_rtc.c **** RtcHandle.Init.SynchPrediv = PREDIV_S; /* RTC_SYNCH_PREDIV; */ 210 .loc 1 211 0 211 001a 1F23 movs r3, #31 212 001c A360 str r3, [r4, #8] 212:./Src/hw_rtc.c **** RtcHandle.Init.OutPut = RTC_OUTPUT; 213 .loc 1 212 0 214 001e 1B4B ldr r3, .L11+12 215 0020 E360 str r3, [r4, #12] 213:./Src/hw_rtc.c **** RtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; 216 .loc 1 213 0 217 0022 2561 str r5, [r4, #16] 214:./Src/hw_rtc.c **** RtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; 218 .loc 1 214 0 ARM GAS /tmp/ccGAhXKe.s page 16 219 0024 A561 str r5, [r4, #24] 215:./Src/hw_rtc.c **** 220 .loc 1 215 0 221 0026 E561 str r5, [r4, #28] 217:./Src/hw_rtc.c **** 222 .loc 1 217 0 223 0028 2000 movs r0, r4 224 002a FFF7FEFF bl HAL_RTC_Init 225 .LVL22: 220:./Src/hw_rtc.c **** RTC_DateStruct.Month = RTC_MONTH_JANUARY; 226 .loc 1 220 0 227 002e 6B46 mov r3, sp 228 0030 DD70 strb r5, [r3, #3] 221:./Src/hw_rtc.c **** RTC_DateStruct.Date = 1; 229 .loc 1 221 0 230 0032 0126 movs r6, #1 231 0034 5E70 strb r6, [r3, #1] 222:./Src/hw_rtc.c **** RTC_DateStruct.WeekDay = RTC_WEEKDAY_MONDAY; 232 .loc 1 222 0 233 0036 9E70 strb r6, [r3, #2] 223:./Src/hw_rtc.c **** HAL_RTC_SetDate(&RtcHandle , &RTC_DateStruct, RTC_FORMAT_BIN); 234 .loc 1 223 0 235 0038 1E70 strb r6, [r3] 224:./Src/hw_rtc.c **** 236 .loc 1 224 0 237 003a 0022 movs r2, #0 238 003c 6946 mov r1, sp 239 003e 2000 movs r0, r4 240 0040 FFF7FEFF bl HAL_RTC_SetDate 241 .LVL23: 227:./Src/hw_rtc.c **** RTC_TimeStruct.Minutes = 0; 242 .loc 1 227 0 243 0044 01A9 add r1, sp, #4 244 0046 0D70 strb r5, [r1] 228:./Src/hw_rtc.c **** 245 .loc 1 228 0 246 0048 4D70 strb r5, [r1, #1] 230:./Src/hw_rtc.c **** RTC_TimeStruct.TimeFormat = 0; 247 .loc 1 230 0 248 004a 8D70 strb r5, [r1, #2] 231:./Src/hw_rtc.c **** RTC_TimeStruct.SubSeconds = 0; 249 .loc 1 231 0 250 004c CD70 strb r5, [r1, #3] 232:./Src/hw_rtc.c **** RTC_TimeStruct.StoreOperation = RTC_DAYLIGHTSAVING_NONE; 251 .loc 1 232 0 252 004e 4D60 str r5, [r1, #4] 233:./Src/hw_rtc.c **** RTC_TimeStruct.DayLightSaving = RTC_STOREOPERATION_RESET; 253 .loc 1 233 0 254 0050 0D61 str r5, [r1, #16] 234:./Src/hw_rtc.c **** 255 .loc 1 234 0 256 0052 CD60 str r5, [r1, #12] 236:./Src/hw_rtc.c **** 257 .loc 1 236 0 258 0054 0022 movs r2, #0 259 0056 2000 movs r0, r4 260 0058 FFF7FEFF bl HAL_RTC_SetTime ARM GAS /tmp/ccGAhXKe.s page 17 261 .LVL24: 239:./Src/hw_rtc.c **** } 262 .loc 1 239 0 263 005c 2000 movs r0, r4 264 005e FFF7FEFF bl HAL_RTCEx_EnableBypassShadow 265 .LVL25: 266 .LBE27: 267 .LBE26: 268 .LBB28: 269 .LBB29: 464:./Src/hw_rtc.c **** } 270 .loc 1 464 0 271 0062 8021 movs r1, #128 272 0064 4900 lsls r1, r1, #1 273 0066 2000 movs r0, r4 274 0068 FFF7FEFF bl HAL_RTC_DeactivateAlarm 275 .LVL26: 276 .LBE29: 277 .LBE28: 278 .LBB30: 279 .LBB31: 442:./Src/hw_rtc.c **** return ( uint32_t ) RtcTimerContext.Rtc_Time; 280 .loc 1 442 0 281 006c 084C ldr r4, .L11+16 282 006e 211D adds r1, r4, #4 283 0070 2000 movs r0, r4 284 0072 1830 adds r0, r0, #24 285 0074 FFF7FEFF bl HW_RTC_GetCalendarValue 286 .LVL27: 287 0078 2060 str r0, [r4] 288 .LBE31: 289 .LBE30: 193:./Src/hw_rtc.c **** } 290 .loc 1 193 0 291 007a 014B ldr r3, .L11 292 007c 1E70 strb r6, [r3] 195:./Src/hw_rtc.c **** 293 .loc 1 195 0 294 007e C5E7 b .L8 295 .L12: 296 .align 2 297 .L11: 298 0080 00000000 .word .LANCHOR1 299 0084 00000000 .word .LANCHOR0 300 0088 00280040 .word 1073752064 301 008c FF030000 .word 1023 302 0090 00000000 .word .LANCHOR2 303 .cfi_endproc 304 .LFE96: 306 .section .text.HW_RTC_setMcuWakeUpTime,"ax",%progbits 307 .align 1 308 .global HW_RTC_setMcuWakeUpTime 309 .syntax unified 310 .code 16 311 .thumb_func 312 .fpu softvfp 314 HW_RTC_setMcuWakeUpTime: ARM GAS /tmp/ccGAhXKe.s page 18 315 .LFB98: 249:./Src/hw_rtc.c **** RTC_TimeTypeDef RTC_TimeStruct; 316 .loc 1 249 0 317 .cfi_startproc 318 @ args = 0, pretend = 0, frame = 24 319 @ frame_needed = 0, uses_anonymous_args = 0 320 0000 70B5 push {r4, r5, r6, lr} 321 .LCFI3: 322 .cfi_def_cfa_offset 16 323 .cfi_offset 4, -16 324 .cfi_offset 5, -12 325 .cfi_offset 6, -8 326 .cfi_offset 14, -4 327 0002 86B0 sub sp, sp, #24 328 .LCFI4: 329 .cfi_def_cfa_offset 40 256:./Src/hw_rtc.c **** ( HAL_NVIC_GetPendingIRQ( RTC_Alarm_IRQn ) == 1)) 330 .loc 1 256 0 331 0004 1C4B ldr r3, .L16 332 0006 1B78 ldrb r3, [r3] 333 0008 002B cmp r3, #0 334 000a 01D0 beq .L15 335 .L13: 276:./Src/hw_rtc.c **** 336 .loc 1 276 0 337 000c 06B0 add sp, sp, #24 338 @ sp needed 339 000e 70BD pop {r4, r5, r6, pc} 340 .L15: 257:./Src/hw_rtc.c **** { /* warning: works ok if now is below 30 days 341 .loc 1 257 0 discriminator 1 342 0010 0220 movs r0, #2 343 0012 FFF7FEFF bl HAL_NVIC_GetPendingIRQ 344 .LVL28: 256:./Src/hw_rtc.c **** ( HAL_NVIC_GetPendingIRQ( RTC_Alarm_IRQn ) == 1)) 345 .loc 1 256 0 discriminator 1 346 0016 0128 cmp r0, #1 347 0018 F8D1 bne .L13 260:./Src/hw_rtc.c **** now = HW_RTC_GetCalendarValue( &RTC_DateStruct, &RTC_TimeStruct ); 348 .loc 1 260 0 349 001a 174B ldr r3, .L16 350 001c 0122 movs r2, #1 351 001e 1A70 strb r2, [r3] 261:./Src/hw_rtc.c **** 352 .loc 1 261 0 353 0020 01A9 add r1, sp, #4 354 0022 6846 mov r0, sp 355 0024 FFF7FEFF bl HW_RTC_GetCalendarValue 356 .LVL29: 357 0028 0400 movs r4, r0 358 .LVL30: 265:./Src/hw_rtc.c **** hit = RTC_AlarmStructure.AlarmTime.Seconds+ 359 .loc 1 265 0 360 002a 8022 movs r2, #128 361 002c 134D ldr r5, .L16+4 362 002e 0023 movs r3, #0 363 0030 5200 lsls r2, r2, #1 ARM GAS /tmp/ccGAhXKe.s page 19 364 0032 2900 movs r1, r5 365 0034 1248 ldr r0, .L16+8 366 .LVL31: 367 0036 FFF7FEFF bl HAL_RTC_GetAlarm 368 .LVL32: 266:./Src/hw_rtc.c **** 60*(RTC_AlarmStructure.AlarmTime.Minutes+ 369 .loc 1 266 0 370 003a A878 ldrb r0, [r5, #2] 267:./Src/hw_rtc.c **** 60*(RTC_AlarmStructure.AlarmTime.Hours+ 371 .loc 1 267 0 372 003c 6B78 ldrb r3, [r5, #1] 268:./Src/hw_rtc.c **** 24*(RTC_AlarmStructure.AlarmDateWeekDay))); 373 .loc 1 268 0 374 003e 2978 ldrb r1, [r5] 269:./Src/hw_rtc.c **** hit = ( hit << N_PREDIV_S ) + (PREDIV_S - RTC_AlarmStructure.AlarmTime.SubSeconds); 375 .loc 1 269 0 376 0040 2022 movs r2, #32 377 0042 AA5C ldrb r2, [r5, r2] 378 0044 5600 lsls r6, r2, #1 379 0046 B618 adds r6, r6, r2 380 0048 F200 lsls r2, r6, #3 268:./Src/hw_rtc.c **** 24*(RTC_AlarmStructure.AlarmDateWeekDay))); 381 .loc 1 268 0 382 004a 8A18 adds r2, r1, r2 383 004c 1101 lsls r1, r2, #4 384 004e 891A subs r1, r1, r2 385 0050 8A00 lsls r2, r1, #2 267:./Src/hw_rtc.c **** 60*(RTC_AlarmStructure.AlarmTime.Hours+ 386 .loc 1 267 0 387 0052 9A18 adds r2, r3, r2 388 0054 1301 lsls r3, r2, #4 389 0056 9B1A subs r3, r3, r2 390 0058 9A00 lsls r2, r3, #2 266:./Src/hw_rtc.c **** 60*(RTC_AlarmStructure.AlarmTime.Minutes+ 391 .loc 1 266 0 392 005a 8018 adds r0, r0, r2 393 .LVL33: 270:./Src/hw_rtc.c **** 394 .loc 1 270 0 395 005c 8002 lsls r0, r0, #10 396 .LVL34: 397 005e 6B68 ldr r3, [r5, #4] 398 0060 C01A subs r0, r0, r3 399 0062 084B ldr r3, .L16+12 400 0064 9C46 mov ip, r3 401 0066 6044 add r0, r0, ip 402 .LVL35: 272:./Src/hw_rtc.c **** McuWakeUpTimeCal += McuWakeUpTime; 403 .loc 1 272 0 404 0068 201A subs r0, r4, r0 405 .LVL36: 406 006a 80B2 uxth r0, r0 407 .LVL37: 273:./Src/hw_rtc.c **** DBG_PRINTF("Cal=%d, %d\n\r",McuWakeUpTimeCal, McuWakeUpTime); 408 .loc 1 273 0 409 006c 064B ldr r3, .L16+16 410 .LVL38: ARM GAS /tmp/ccGAhXKe.s page 20 411 006e 1C88 ldrh r4, [r3] 412 .LVL39: 413 0070 0019 adds r0, r0, r4 414 .LVL40: 415 0072 1880 strh r0, [r3] 276:./Src/hw_rtc.c **** 416 .loc 1 276 0 417 0074 CAE7 b .L13 418 .L17: 419 0076 C046 .align 2 420 .L16: 421 0078 00000000 .word .LANCHOR3 422 007c 00000000 .word .LANCHOR4 423 0080 00000000 .word .LANCHOR0 424 0084 FF030000 .word 1023 425 0088 00000000 .word .LANCHOR5 426 .cfi_endproc 427 .LFE98: 429 .section .text.HW_RTC_getMcuWakeUpTime,"ax",%progbits 430 .align 1 431 .global HW_RTC_getMcuWakeUpTime 432 .syntax unified 433 .code 16 434 .thumb_func 435 .fpu softvfp 437 HW_RTC_getMcuWakeUpTime: 438 .LFB99: 279:./Src/hw_rtc.c **** return McuWakeUpTimeCal; 439 .loc 1 279 0 440 .cfi_startproc 441 @ args = 0, pretend = 0, frame = 0 442 @ frame_needed = 0, uses_anonymous_args = 0 443 @ link register save eliminated. 280:./Src/hw_rtc.c **** } 444 .loc 1 280 0 445 0000 014B ldr r3, .L19 446 0002 0020 movs r0, #0 447 0004 185E ldrsh r0, [r3, r0] 281:./Src/hw_rtc.c **** 448 .loc 1 281 0 449 @ sp needed 450 0006 7047 bx lr 451 .L20: 452 .align 2 453 .L19: 454 0008 00000000 .word .LANCHOR5 455 .cfi_endproc 456 .LFE99: 458 .section .text.HW_RTC_GetMinimumTimeout,"ax",%progbits 459 .align 1 460 .global HW_RTC_GetMinimumTimeout 461 .syntax unified 462 .code 16 463 .thumb_func 464 .fpu softvfp 466 HW_RTC_GetMinimumTimeout: 467 .LFB100: ARM GAS /tmp/ccGAhXKe.s page 21 289:./Src/hw_rtc.c **** return( MIN_ALARM_DELAY ); 468 .loc 1 289 0 469 .cfi_startproc 470 @ args = 0, pretend = 0, frame = 0 471 @ frame_needed = 0, uses_anonymous_args = 0 472 @ link register save eliminated. 291:./Src/hw_rtc.c **** 473 .loc 1 291 0 474 0000 0320 movs r0, #3 475 @ sp needed 476 0002 7047 bx lr 477 .cfi_endproc 478 .LFE100: 480 .global __aeabi_uldivmod 481 .section .text.HW_RTC_ms2Tick,"ax",%progbits 482 .align 1 483 .global HW_RTC_ms2Tick 484 .syntax unified 485 .code 16 486 .thumb_func 487 .fpu softvfp 489 HW_RTC_ms2Tick: 490 .LFB101: 299:./Src/hw_rtc.c **** /*return( ( timeMicroSec / RTC_ALARM_TIME_BASE ) ); */ 491 .loc 1 299 0 492 .cfi_startproc 493 @ args = 0, pretend = 0, frame = 0 494 @ frame_needed = 0, uses_anonymous_args = 0 495 .LVL41: 496 0000 10B5 push {r4, lr} 497 .LCFI5: 498 .cfi_def_cfa_offset 8 499 .cfi_offset 4, -8 500 .cfi_offset 14, -4 301:./Src/hw_rtc.c **** } 501 .loc 1 301 0 502 0002 410E lsrs r1, r0, #25 503 0004 C001 lsls r0, r0, #7 504 .LVL42: 505 0006 7D22 movs r2, #125 506 0008 0023 movs r3, #0 507 000a FFF7FEFF bl __aeabi_uldivmod 508 .LVL43: 302:./Src/hw_rtc.c **** 509 .loc 1 302 0 510 @ sp needed 511 000e 10BD pop {r4, pc} 512 .cfi_endproc 513 .LFE101: 515 .section .text.HW_RTC_Tick2ms,"ax",%progbits 516 .align 1 517 .global HW_RTC_Tick2ms 518 .syntax unified 519 .code 16 520 .thumb_func 521 .fpu softvfp 523 HW_RTC_Tick2ms: ARM GAS /tmp/ccGAhXKe.s page 22 524 .LFB102: 310:./Src/hw_rtc.c **** /*return( ( timeMicroSec * RTC_ALARM_TIME_BASE ) ); */ 525 .loc 1 310 0 526 .cfi_startproc 527 @ args = 0, pretend = 0, frame = 0 528 @ frame_needed = 0, uses_anonymous_args = 0 529 .LVL44: 530 0000 70B5 push {r4, r5, r6, lr} 531 .LCFI6: 532 .cfi_def_cfa_offset 16 533 .cfi_offset 4, -16 534 .cfi_offset 5, -12 535 .cfi_offset 6, -8 536 .cfi_offset 14, -4 312:./Src/hw_rtc.c **** } 537 .loc 1 312 0 538 0002 0400 movs r4, r0 539 0004 0025 movs r5, #0 540 0006 C30E lsrs r3, r0, #27 541 0008 4201 lsls r2, r0, #5 542 000a 121B subs r2, r2, r4 543 000c AB41 sbcs r3, r3, r5 544 000e 960F lsrs r6, r2, #30 545 0010 9900 lsls r1, r3, #2 546 0012 3143 orrs r1, r6 547 0014 9000 lsls r0, r2, #2 548 .LVL45: 549 0016 0019 adds r0, r0, r4 550 0018 6941 adcs r1, r1, r5 551 001a 4B06 lsls r3, r1, #25 552 001c C009 lsrs r0, r0, #7 553 001e 1843 orrs r0, r3 313:./Src/hw_rtc.c **** 554 .loc 1 313 0 555 @ sp needed 556 .LVL46: 557 0020 70BD pop {r4, r5, r6, pc} 558 .cfi_endproc 559 .LFE102: 561 .global __aeabi_idivmod 562 .section .text.HW_RTC_SetAlarm,"ax",%progbits 563 .align 1 564 .global HW_RTC_SetAlarm 565 .syntax unified 566 .code 16 567 .thumb_func 568 .fpu softvfp 570 HW_RTC_SetAlarm: 571 .LFB103: 321:./Src/hw_rtc.c **** /* we don't go in Low Power mode for timeout below MIN_ALARM_DELAY */ 572 .loc 1 321 0 573 .cfi_startproc 574 @ args = 0, pretend = 0, frame = 24 575 @ frame_needed = 0, uses_anonymous_args = 0 576 .LVL47: 577 0000 F0B5 push {r4, r5, r6, r7, lr} 578 .LCFI7: ARM GAS /tmp/ccGAhXKe.s page 23 579 .cfi_def_cfa_offset 20 580 .cfi_offset 4, -20 581 .cfi_offset 5, -16 582 .cfi_offset 6, -12 583 .cfi_offset 7, -8 584 .cfi_offset 14, -4 585 0002 87B0 sub sp, sp, #28 586 .LCFI8: 587 .cfi_def_cfa_offset 48 588 0004 0400 movs r4, r0 323:./Src/hw_rtc.c **** { 589 .loc 1 323 0 590 0006 5D4B ldr r3, .L45 591 0008 0025 movs r5, #0 592 000a 5D5F ldrsh r5, [r3, r5] 593 000c 0335 adds r5, r5, #3 594 .LBB38: 595 .LBB39: 351:./Src/hw_rtc.c **** 596 .loc 1 351 0 597 000e 01A9 add r1, sp, #4 598 0010 6846 mov r0, sp 599 .LVL48: 600 0012 FFF7FEFF bl HW_RTC_GetCalendarValue 601 .LVL49: 353:./Src/hw_rtc.c **** } 602 .loc 1 353 0 603 0016 5A4B ldr r3, .L45+4 604 0018 1B68 ldr r3, [r3] 605 001a C01A subs r0, r0, r3 606 .LVL50: 607 .LBE39: 608 .LBE38: 323:./Src/hw_rtc.c **** { 609 .loc 1 323 0 610 001c 201A subs r0, r4, r0 611 001e 8542 cmp r5, r0 612 0020 28D2 bcs .L25 325:./Src/hw_rtc.c **** } 613 .loc 1 325 0 614 0022 0120 movs r0, #1 615 0024 FFF7FEFF bl LowPower_Enable 616 .LVL51: 617 .L26: 332:./Src/hw_rtc.c **** { 618 .loc 1 332 0 619 0028 FFF7FEFF bl LowPower_GetState 620 .LVL52: 621 002c 0028 cmp r0, #0 622 002e 25D0 beq .L44 623 .L27: 624 .LVL53: 625 .LBB40: 626 .LBB41: 480:./Src/hw_rtc.c **** RTC_DateTypeDef RTC_DateStruct = RtcTimerContext.RTC_Calndr_Date; 627 .loc 1 480 0 628 0030 01AD add r5, sp, #4 ARM GAS /tmp/ccGAhXKe.s page 24 629 0032 5349 ldr r1, .L45+4 630 0034 2A00 movs r2, r5 631 0036 0B1D adds r3, r1, #4 632 0038 C1CB ldmia r3!, {r0, r6, r7} 633 003a C1C2 stmia r2!, {r0, r6, r7} 634 003c 41CB ldmia r3!, {r0, r6} 635 003e 41C2 stmia r2!, {r0, r6} 481:./Src/hw_rtc.c **** 636 .loc 1 481 0 637 0040 8B69 ldr r3, [r1, #24] 638 0042 0093 str r3, [sp] 639 .LBB42: 640 .LBB43: 380:./Src/hw_rtc.c **** 641 .loc 1 380 0 642 0044 4F48 ldr r0, .L45+8 643 0046 0168 ldr r1, [r0] 644 0048 CA68 ldr r2, [r1, #12] 645 004a FF23 movs r3, #255 646 004c 1A40 ands r2, r3 647 004e 4E4B ldr r3, .L45+12 648 0050 1343 orrs r3, r2 649 0052 CB60 str r3, [r1, #12] 384:./Src/hw_rtc.c **** } 650 .loc 1 384 0 651 0054 8021 movs r1, #128 652 0056 4900 lsls r1, r1, #1 653 0058 FFF7FEFF bl HAL_RTC_DeactivateAlarm 654 .LVL54: 655 .LBE43: 656 .LBE42: 487:./Src/hw_rtc.c **** rtcAlarmSubSeconds += ( timeoutValue & PREDIV_S); 657 .loc 1 487 0 658 005c AB88 ldrh r3, [r5, #4] 659 005e 4B4F ldr r7, .L45+16 660 0060 FF1A subs r7, r7, r3 661 0062 BFB2 uxth r7, r7 662 .LVL55: 488:./Src/hw_rtc.c **** /* convert timeout to seconds */ 663 .loc 1 488 0 664 0064 A305 lsls r3, r4, #22 665 0066 9B0D lsrs r3, r3, #22 666 0068 FF18 adds r7, r7, r3 667 .LVL56: 668 006a BFB2 uxth r7, r7 669 .LVL57: 490:./Src/hw_rtc.c **** 670 .loc 1 490 0 671 006c A30A lsrs r3, r4, #10 672 .LVL58: 493:./Src/hw_rtc.c **** while (timeoutValue >= SECONDS_IN_1DAY) 673 .loc 1 493 0 674 006e 6A46 mov r2, sp 675 0070 9078 ldrb r0, [r2, #2] 676 .LVL59: 677 0072 10E0 b .L28 678 .LVL60: ARM GAS /tmp/ccGAhXKe.s page 25 679 .L25: 680 .LBE41: 681 .LBE40: 329:./Src/hw_rtc.c **** } 682 .loc 1 329 0 683 0074 0120 movs r0, #1 684 0076 FFF7FEFF bl LowPower_Disable 685 .LVL61: 686 007a D5E7 b .L26 687 .L44: 334:./Src/hw_rtc.c **** timeout = timeout - McuWakeUpTimeCal; 688 .loc 1 334 0 689 007c 0130 adds r0, r0, #1 690 007e FFF7FEFF bl LowPower_Enable 691 .LVL62: 335:./Src/hw_rtc.c **** } 692 .loc 1 335 0 693 0082 3E4B ldr r3, .L45 694 0084 0022 movs r2, #0 695 0086 9B5E ldrsh r3, [r3, r2] 696 0088 E41A subs r4, r4, r3 697 .LVL63: 698 008a D1E7 b .L27 699 .LVL64: 700 .L29: 701 .LBB45: 702 .LBB44: 496:./Src/hw_rtc.c **** rtcAlarmDays++; 703 .loc 1 496 0 704 008c 404A ldr r2, .L45+20 705 008e 9446 mov ip, r2 706 0090 6344 add r3, r3, ip 707 .LVL65: 497:./Src/hw_rtc.c **** } 708 .loc 1 497 0 709 0092 0130 adds r0, r0, #1 710 .LVL66: 711 0094 80B2 uxth r0, r0 712 .LVL67: 713 .L28: 494:./Src/hw_rtc.c **** { 714 .loc 1 494 0 715 0096 3F4A ldr r2, .L45+24 716 0098 9342 cmp r3, r2 717 009a F7D8 bhi .L29 501:./Src/hw_rtc.c **** while (timeoutValue >= SECONDS_IN_1HOUR) 718 .loc 1 501 0 719 009c 01AA add r2, sp, #4 720 009e 1478 ldrb r4, [r2] 721 .LVL68: 722 00a0 04E0 b .L30 723 .L31: 504:./Src/hw_rtc.c **** rtcAlarmHours++; 724 .loc 1 504 0 725 00a2 3D4A ldr r2, .L45+28 726 00a4 9446 mov ip, r2 727 00a6 6344 add r3, r3, ip ARM GAS /tmp/ccGAhXKe.s page 26 728 .LVL69: 505:./Src/hw_rtc.c **** } 729 .loc 1 505 0 730 00a8 0134 adds r4, r4, #1 731 .LVL70: 732 00aa A4B2 uxth r4, r4 733 .LVL71: 734 .L30: 502:./Src/hw_rtc.c **** { 735 .loc 1 502 0 736 00ac 3B4A ldr r2, .L45+32 737 00ae 9342 cmp r3, r2 738 00b0 F7D8 bhi .L31 509:./Src/hw_rtc.c **** while (timeoutValue >= SECONDS_IN_1MINUTE) 739 .loc 1 509 0 740 00b2 01AA add r2, sp, #4 741 00b4 5578 ldrb r5, [r2, #1] 742 .LVL72: 743 00b6 02E0 b .L32 744 .L33: 512:./Src/hw_rtc.c **** rtcAlarmMinutes++; 745 .loc 1 512 0 746 00b8 3C3B subs r3, r3, #60 747 .LVL73: 513:./Src/hw_rtc.c **** } 748 .loc 1 513 0 749 00ba 0135 adds r5, r5, #1 750 .LVL74: 751 00bc ADB2 uxth r5, r5 752 .LVL75: 753 .L32: 510:./Src/hw_rtc.c **** { 754 .loc 1 510 0 755 00be 3B2B cmp r3, #59 756 00c0 FAD8 bhi .L33 517:./Src/hw_rtc.c **** 757 .loc 1 517 0 758 00c2 01AA add r2, sp, #4 759 00c4 9678 ldrb r6, [r2, #2] 760 00c6 9BB2 uxth r3, r3 761 .LVL76: 762 00c8 F618 adds r6, r6, r3 763 00ca B6B2 uxth r6, r6 764 .LVL77: 765 00cc 05E0 b .L34 766 .L35: 522:./Src/hw_rtc.c **** rtcAlarmSeconds++; 767 .loc 1 522 0 768 00ce 344B ldr r3, .L45+36 769 00d0 9C46 mov ip, r3 770 00d2 6744 add r7, r7, ip 771 .LVL78: 772 00d4 BFB2 uxth r7, r7 773 .LVL79: 523:./Src/hw_rtc.c **** } 774 .loc 1 523 0 775 00d6 0136 adds r6, r6, #1 ARM GAS /tmp/ccGAhXKe.s page 27 776 .LVL80: 777 00d8 B6B2 uxth r6, r6 778 .LVL81: 779 .L34: 520:./Src/hw_rtc.c **** { 780 .loc 1 520 0 781 00da 2C4B ldr r3, .L45+16 782 00dc 9F42 cmp r7, r3 783 00de F6D8 bhi .L35 784 00e0 03E0 b .L36 785 .L37: 528:./Src/hw_rtc.c **** rtcAlarmMinutes++; 786 .loc 1 528 0 787 00e2 3C3E subs r6, r6, #60 788 .LVL82: 789 00e4 B6B2 uxth r6, r6 790 .LVL83: 529:./Src/hw_rtc.c **** } 791 .loc 1 529 0 792 00e6 0135 adds r5, r5, #1 793 .LVL84: 794 00e8 ADB2 uxth r5, r5 795 .LVL85: 796 .L36: 526:./Src/hw_rtc.c **** { 797 .loc 1 526 0 798 00ea 3B2E cmp r6, #59 799 00ec F9D8 bhi .L37 800 00ee 03E0 b .L38 801 .L39: 534:./Src/hw_rtc.c **** rtcAlarmHours++; 802 .loc 1 534 0 803 00f0 3C3D subs r5, r5, #60 804 .LVL86: 805 00f2 ADB2 uxth r5, r5 806 .LVL87: 535:./Src/hw_rtc.c **** } 807 .loc 1 535 0 808 00f4 0134 adds r4, r4, #1 809 .LVL88: 810 00f6 A4B2 uxth r4, r4 811 .LVL89: 812 .L38: 532:./Src/hw_rtc.c **** { 813 .loc 1 532 0 814 00f8 3B2D cmp r5, #59 815 00fa F9D8 bhi .L39 816 00fc 03E0 b .L40 817 .L41: 540:./Src/hw_rtc.c **** rtcAlarmDays++; 818 .loc 1 540 0 819 00fe 183C subs r4, r4, #24 820 .LVL90: 821 0100 A4B2 uxth r4, r4 822 .LVL91: 541:./Src/hw_rtc.c **** } 823 .loc 1 541 0 ARM GAS /tmp/ccGAhXKe.s page 28 824 0102 0130 adds r0, r0, #1 825 .LVL92: 826 0104 80B2 uxth r0, r0 827 .LVL93: 828 .L40: 538:./Src/hw_rtc.c **** { 829 .loc 1 538 0 830 0106 172C cmp r4, #23 831 0108 F9D8 bhi .L41 544:./Src/hw_rtc.c **** { 832 .loc 1 544 0 833 010a 6B46 mov r3, sp 834 010c DB78 ldrb r3, [r3, #3] 835 010e 9B07 lsls r3, r3, #30 836 0110 0BD1 bne .L42 546:./Src/hw_rtc.c **** { 837 .loc 1 546 0 838 0112 6B46 mov r3, sp 839 0114 5B78 ldrb r3, [r3, #1] 840 0116 013B subs r3, r3, #1 841 0118 224A ldr r2, .L45+40 842 011a D15C ldrb r1, [r2, r3] 843 011c 8BB2 uxth r3, r1 844 011e 9842 cmp r0, r3 845 0120 0ED9 bls .L43 548:./Src/hw_rtc.c **** } 846 .loc 1 548 0 847 0122 FFF7FEFF bl __aeabi_idivmod 848 .LVL94: 849 0126 88B2 uxth r0, r1 850 .LVL95: 851 0128 0AE0 b .L43 852 .L42: 553:./Src/hw_rtc.c **** { 853 .loc 1 553 0 854 012a 6B46 mov r3, sp 855 012c 5B78 ldrb r3, [r3, #1] 856 012e 013B subs r3, r3, #1 857 0130 1D4A ldr r2, .L45+44 858 0132 D15C ldrb r1, [r2, r3] 859 0134 8BB2 uxth r3, r1 860 0136 9842 cmp r0, r3 861 0138 02D9 bls .L43 555:./Src/hw_rtc.c **** } 862 .loc 1 555 0 863 013a FFF7FEFF bl __aeabi_idivmod 864 .LVL96: 865 013e 88B2 uxth r0, r1 866 .LVL97: 867 .L43: 560:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmSubSecondMask = HW_RTC_ALARMSUBSECONDMASK; 868 .loc 1 560 0 869 0140 124B ldr r3, .L45+16 870 0142 DF1B subs r7, r3, r7 871 .LVL98: 872 0144 1949 ldr r1, .L45+48 873 0146 4F60 str r7, [r1, #4] ARM GAS /tmp/ccGAhXKe.s page 29 561:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.Seconds = rtcAlarmSeconds; 874 .loc 1 561 0 875 0148 A023 movs r3, #160 876 014a 1B05 lsls r3, r3, #20 877 014c 8B61 str r3, [r1, #24] 562:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.Minutes = rtcAlarmMinutes; 878 .loc 1 562 0 879 014e 8E70 strb r6, [r1, #2] 563:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.Hours = rtcAlarmHours; 880 .loc 1 563 0 881 0150 4D70 strb r5, [r1, #1] 564:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmDateWeekDay = ( uint8_t )rtcAlarmDays; 882 .loc 1 564 0 883 0152 0C70 strb r4, [r1] 565:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.TimeFormat = RTC_TimeStruct.TimeFormat; 884 .loc 1 565 0 885 0154 2023 movs r3, #32 886 0156 C854 strb r0, [r1, r3] 566:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE; 887 .loc 1 566 0 888 0158 01AB add r3, sp, #4 889 015a DB78 ldrb r3, [r3, #3] 890 015c CB70 strb r3, [r1, #3] 567:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmMask = RTC_ALARMMASK_NONE; 891 .loc 1 567 0 892 015e 0023 movs r3, #0 893 0160 CB61 str r3, [r1, #28] 568:./Src/hw_rtc.c **** RTC_AlarmStructure.Alarm = RTC_ALARM_A; 894 .loc 1 568 0 895 0162 4B61 str r3, [r1, #20] 569:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; 896 .loc 1 569 0 897 0164 8022 movs r2, #128 898 0166 5200 lsls r2, r2, #1 899 0168 4A62 str r2, [r1, #36] 570:./Src/hw_rtc.c **** RTC_AlarmStructure.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET; 900 .loc 1 570 0 901 016a CB60 str r3, [r1, #12] 571:./Src/hw_rtc.c **** 902 .loc 1 571 0 903 016c 0B61 str r3, [r1, #16] 574:./Src/hw_rtc.c **** 904 .loc 1 574 0 905 016e 0022 movs r2, #0 906 0170 0448 ldr r0, .L45+8 907 .LVL99: 908 0172 FFF7FEFF bl HAL_RTC_SetAlarm_IT 909 .LVL100: 910 .LBE44: 911 .LBE45: 339:./Src/hw_rtc.c **** 912 .loc 1 339 0 913 0176 07B0 add sp, sp, #28 914 @ sp needed 915 0178 F0BD pop {r4, r5, r6, r7, pc} 916 .L46: 917 017a C046 .align 2 ARM GAS /tmp/ccGAhXKe.s page 30 918 .L45: 919 017c 00000000 .word .LANCHOR5 920 0180 00000000 .word .LANCHOR2 921 0184 00000000 .word .LANCHOR0 922 0188 7FFEFFFF .word -385 923 018c FF030000 .word 1023 924 0190 80AEFEFF .word -86400 925 0194 7F510100 .word 86399 926 0198 F0F1FFFF .word -3600 927 019c 0F0E0000 .word 3599 928 01a0 00FCFFFF .word -1024 929 01a4 00000000 .word .LANCHOR6 930 01a8 00000000 .word .LANCHOR7 931 01ac 00000000 .word .LANCHOR4 932 .cfi_endproc 933 .LFE103: 935 .section .text.HW_RTC_GetTimerElapsedTime,"ax",%progbits 936 .align 1 937 .global HW_RTC_GetTimerElapsedTime 938 .syntax unified 939 .code 16 940 .thumb_func 941 .fpu softvfp 943 HW_RTC_GetTimerElapsedTime: 944 .LFB104: 347:./Src/hw_rtc.c **** RTC_TimeTypeDef RTC_TimeStruct; 945 .loc 1 347 0 946 .cfi_startproc 947 @ args = 0, pretend = 0, frame = 24 948 @ frame_needed = 0, uses_anonymous_args = 0 949 0000 00B5 push {lr} 950 .LCFI9: 951 .cfi_def_cfa_offset 4 952 .cfi_offset 14, -4 953 0002 87B0 sub sp, sp, #28 954 .LCFI10: 955 .cfi_def_cfa_offset 32 351:./Src/hw_rtc.c **** 956 .loc 1 351 0 957 0004 01A9 add r1, sp, #4 958 0006 6846 mov r0, sp 959 0008 FFF7FEFF bl HW_RTC_GetCalendarValue 960 .LVL101: 353:./Src/hw_rtc.c **** } 961 .loc 1 353 0 962 000c 024B ldr r3, .L48 963 000e 1B68 ldr r3, [r3] 964 0010 C01A subs r0, r0, r3 965 .LVL102: 354:./Src/hw_rtc.c **** 966 .loc 1 354 0 967 0012 07B0 add sp, sp, #28 968 @ sp needed 969 0014 00BD pop {pc} 970 .L49: 971 0016 C046 .align 2 972 .L48: ARM GAS /tmp/ccGAhXKe.s page 31 973 0018 00000000 .word .LANCHOR2 974 .cfi_endproc 975 .LFE104: 977 .section .text.HW_RTC_GetTimerValue,"ax",%progbits 978 .align 1 979 .global HW_RTC_GetTimerValue 980 .syntax unified 981 .code 16 982 .thumb_func 983 .fpu softvfp 985 HW_RTC_GetTimerValue: 986 .LFB105: 362:./Src/hw_rtc.c **** RTC_TimeTypeDef RTC_TimeStruct; 987 .loc 1 362 0 988 .cfi_startproc 989 @ args = 0, pretend = 0, frame = 24 990 @ frame_needed = 0, uses_anonymous_args = 0 991 0000 00B5 push {lr} 992 .LCFI11: 993 .cfi_def_cfa_offset 4 994 .cfi_offset 14, -4 995 0002 87B0 sub sp, sp, #28 996 .LCFI12: 997 .cfi_def_cfa_offset 32 366:./Src/hw_rtc.c **** 998 .loc 1 366 0 999 0004 01A9 add r1, sp, #4 1000 0006 6846 mov r0, sp 1001 0008 FFF7FEFF bl HW_RTC_GetCalendarValue 1002 .LVL103: 369:./Src/hw_rtc.c **** 1003 .loc 1 369 0 1004 000c 07B0 add sp, sp, #28 1005 @ sp needed 1006 000e 00BD pop {pc} 1007 .cfi_endproc 1008 .LFE105: 1010 .section .text.HW_RTC_StopAlarm,"ax",%progbits 1011 .align 1 1012 .global HW_RTC_StopAlarm 1013 .syntax unified 1014 .code 16 1015 .thumb_func 1016 .fpu softvfp 1018 HW_RTC_StopAlarm: 1019 .LFB106: 377:./Src/hw_rtc.c **** 1020 .loc 1 377 0 1021 .cfi_startproc 1022 @ args = 0, pretend = 0, frame = 0 1023 @ frame_needed = 0, uses_anonymous_args = 0 1024 0000 10B5 push {r4, lr} 1025 .LCFI13: 1026 .cfi_def_cfa_offset 8 1027 .cfi_offset 4, -8 1028 .cfi_offset 14, -4 380:./Src/hw_rtc.c **** ARM GAS /tmp/ccGAhXKe.s page 32 1029 .loc 1 380 0 1030 0002 0648 ldr r0, .L52 1031 0004 0168 ldr r1, [r0] 1032 0006 CA68 ldr r2, [r1, #12] 1033 0008 FF23 movs r3, #255 1034 000a 1A40 ands r2, r3 1035 000c 044B ldr r3, .L52+4 1036 000e 1343 orrs r3, r2 1037 0010 CB60 str r3, [r1, #12] 384:./Src/hw_rtc.c **** } 1038 .loc 1 384 0 1039 0012 8021 movs r1, #128 1040 0014 4900 lsls r1, r1, #1 1041 0016 FFF7FEFF bl HAL_RTC_DeactivateAlarm 1042 .LVL104: 385:./Src/hw_rtc.c **** 1043 .loc 1 385 0 1044 @ sp needed 1045 001a 10BD pop {r4, pc} 1046 .L53: 1047 .align 2 1048 .L52: 1049 001c 00000000 .word .LANCHOR0 1050 0020 7FFEFFFF .word -385 1051 .cfi_endproc 1052 .LFE106: 1054 .section .text.HW_RTC_IrqHandler,"ax",%progbits 1055 .align 1 1056 .global HW_RTC_IrqHandler 1057 .syntax unified 1058 .code 16 1059 .thumb_func 1060 .fpu softvfp 1062 HW_RTC_IrqHandler: 1063 .LFB107: 393:./Src/hw_rtc.c **** RTC_HandleTypeDef* hrtc=&RtcHandle; 1064 .loc 1 393 0 1065 .cfi_startproc 1066 @ args = 0, pretend = 0, frame = 0 1067 @ frame_needed = 0, uses_anonymous_args = 0 1068 0000 10B5 push {r4, lr} 1069 .LCFI14: 1070 .cfi_def_cfa_offset 8 1071 .cfi_offset 4, -8 1072 .cfi_offset 14, -4 1073 .LVL105: 396:./Src/hw_rtc.c **** 1074 .loc 1 396 0 1075 0002 0120 movs r0, #1 1076 0004 FFF7FEFF bl LowPower_Enable 1077 .LVL106: 399:./Src/hw_rtc.c **** { 1078 .loc 1 399 0 1079 0008 0B4B ldr r3, .L57 1080 000a 1B68 ldr r3, [r3] 1081 000c 9A68 ldr r2, [r3, #8] 1082 000e D204 lsls r2, r2, #19 ARM GAS /tmp/ccGAhXKe.s page 33 1083 0010 02D5 bpl .L54 402:./Src/hw_rtc.c **** { 1084 .loc 1 402 0 1085 0012 DA68 ldr r2, [r3, #12] 1086 0014 D205 lsls r2, r2, #23 1087 0016 00D4 bmi .L56 1088 .L54: 412:./Src/hw_rtc.c **** 1089 .loc 1 412 0 1090 @ sp needed 1091 0018 10BD pop {r4, pc} 1092 .L56: 405:./Src/hw_rtc.c **** /* Clear the EXTI's line Flag for RTC Alarm */ 1093 .loc 1 405 0 1094 001a D968 ldr r1, [r3, #12] 1095 001c FF22 movs r2, #255 1096 001e 1140 ands r1, r2 1097 0020 064A ldr r2, .L57+4 1098 0022 0A43 orrs r2, r1 1099 0024 DA60 str r2, [r3, #12] 407:./Src/hw_rtc.c **** /* AlarmA callback */ 1100 .loc 1 407 0 1101 0026 064B ldr r3, .L57+8 1102 0028 8022 movs r2, #128 1103 002a 9202 lsls r2, r2, #10 1104 002c 5A61 str r2, [r3, #20] 409:./Src/hw_rtc.c **** } 1105 .loc 1 409 0 1106 002e 0248 ldr r0, .L57 1107 0030 FFF7FEFF bl HAL_RTC_AlarmAEventCallback 1108 .LVL107: 412:./Src/hw_rtc.c **** 1109 .loc 1 412 0 1110 0034 F0E7 b .L54 1111 .L58: 1112 0036 C046 .align 2 1113 .L57: 1114 0038 00000000 .word .LANCHOR0 1115 003c 7FFEFFFF .word -385 1116 0040 00040140 .word 1073808384 1117 .cfi_endproc 1118 .LFE107: 1120 .section .text.HW_RTC_DelayMs,"ax",%progbits 1121 .align 1 1122 .global HW_RTC_DelayMs 1123 .syntax unified 1124 .code 16 1125 .thumb_func 1126 .fpu softvfp 1128 HW_RTC_DelayMs: 1129 .LFB108: 421:./Src/hw_rtc.c **** TimerTime_t delayValue = 0; 1130 .loc 1 421 0 1131 .cfi_startproc 1132 @ args = 0, pretend = 0, frame = 24 1133 @ frame_needed = 0, uses_anonymous_args = 0 1134 .LVL108: ARM GAS /tmp/ccGAhXKe.s page 34 1135 0000 30B5 push {r4, r5, lr} 1136 .LCFI15: 1137 .cfi_def_cfa_offset 12 1138 .cfi_offset 4, -12 1139 .cfi_offset 5, -8 1140 .cfi_offset 14, -4 1141 0002 87B0 sub sp, sp, #28 1142 .LCFI16: 1143 .cfi_def_cfa_offset 40 1144 .LVL109: 1145 .LBB46: 1146 .LBB47: 301:./Src/hw_rtc.c **** } 1147 .loc 1 301 0 1148 0004 410E lsrs r1, r0, #25 1149 0006 C001 lsls r0, r0, #7 1150 .LVL110: 1151 0008 7D22 movs r2, #125 1152 000a 0023 movs r3, #0 1153 000c FFF7FEFF bl __aeabi_uldivmod 1154 .LVL111: 1155 0010 0400 movs r4, r0 1156 .LVL112: 1157 .LBE47: 1158 .LBE46: 1159 .LBB48: 1160 .LBB49: 366:./Src/hw_rtc.c **** 1161 .loc 1 366 0 1162 0012 01A9 add r1, sp, #4 1163 0014 6846 mov r0, sp 1164 0016 FFF7FEFF bl HW_RTC_GetCalendarValue 1165 .LVL113: 1166 001a 0500 movs r5, r0 1167 .LVL114: 1168 .LBE49: 1169 .LBE48: 429:./Src/hw_rtc.c **** { 1170 .loc 1 429 0 1171 001c 00E0 b .L60 1172 .L61: 1173 .LBB50: 1174 .LBB51: 1175 .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. ARM GAS /tmp/ccGAhXKe.s page 35 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 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 **** { ARM GAS /tmp/ccGAhXKe.s page 36 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) ); 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 **** ARM GAS /tmp/ccGAhXKe.s page 37 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 **** 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). ARM GAS /tmp/ccGAhXKe.s page 38 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 **** */ 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) ); 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"); 216:Drivers/CMSIS/Include/cmsis_gcc.h **** } 217:Drivers/CMSIS/Include/cmsis_gcc.h **** 218:Drivers/CMSIS/Include/cmsis_gcc.h **** 219:Drivers/CMSIS/Include/cmsis_gcc.h **** #if (__CORTEX_M >= 0x03U) 220:Drivers/CMSIS/Include/cmsis_gcc.h **** 221:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 222:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Enable FIQ 223:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Enables FIQ interrupts by clearing the F-bit in the CPSR. 224:Drivers/CMSIS/Include/cmsis_gcc.h **** Can only be executed in Privileged modes. 225:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 226:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void) 227:Drivers/CMSIS/Include/cmsis_gcc.h **** { 228:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("cpsie f" : : : "memory"); 229:Drivers/CMSIS/Include/cmsis_gcc.h **** } 230:Drivers/CMSIS/Include/cmsis_gcc.h **** 231:Drivers/CMSIS/Include/cmsis_gcc.h **** 232:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 233:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Disable FIQ 234:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Disables FIQ interrupts by setting the F-bit in the CPSR. 235:Drivers/CMSIS/Include/cmsis_gcc.h **** Can only be executed in Privileged modes. 236:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 237:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void) 238:Drivers/CMSIS/Include/cmsis_gcc.h **** { 239:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("cpsid f" : : : "memory"); 240:Drivers/CMSIS/Include/cmsis_gcc.h **** } 241:Drivers/CMSIS/Include/cmsis_gcc.h **** ARM GAS /tmp/ccGAhXKe.s page 39 242:Drivers/CMSIS/Include/cmsis_gcc.h **** 243:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 244:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Get Base Priority 245:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Returns the current value of the Base Priority register. 246:Drivers/CMSIS/Include/cmsis_gcc.h **** \return Base Priority register value 247:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 248:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void) 249:Drivers/CMSIS/Include/cmsis_gcc.h **** { 250:Drivers/CMSIS/Include/cmsis_gcc.h **** uint32_t result; 251:Drivers/CMSIS/Include/cmsis_gcc.h **** 252:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MRS %0, basepri" : "=r" (result) ); 253:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 254:Drivers/CMSIS/Include/cmsis_gcc.h **** } 255:Drivers/CMSIS/Include/cmsis_gcc.h **** 256:Drivers/CMSIS/Include/cmsis_gcc.h **** 257:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 258:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Set Base Priority 259:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Assigns the given value to the Base Priority register. 260:Drivers/CMSIS/Include/cmsis_gcc.h **** \param [in] basePri Base Priority value to set 261:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 262:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value) 263:Drivers/CMSIS/Include/cmsis_gcc.h **** { 264:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MSR basepri, %0" : : "r" (value) : "memory"); 265:Drivers/CMSIS/Include/cmsis_gcc.h **** } 266:Drivers/CMSIS/Include/cmsis_gcc.h **** 267:Drivers/CMSIS/Include/cmsis_gcc.h **** 268:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 269:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Set Base Priority with condition 270:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Assigns the given value to the Base Priority register only if BASEPRI masking is disable 271:Drivers/CMSIS/Include/cmsis_gcc.h **** or the new value increases the BASEPRI priority level. 272:Drivers/CMSIS/Include/cmsis_gcc.h **** \param [in] basePri Base Priority value to set 273:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 274:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t value) 275:Drivers/CMSIS/Include/cmsis_gcc.h **** { 276:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MSR basepri_max, %0" : : "r" (value) : "memory"); 277:Drivers/CMSIS/Include/cmsis_gcc.h **** } 278:Drivers/CMSIS/Include/cmsis_gcc.h **** 279:Drivers/CMSIS/Include/cmsis_gcc.h **** 280:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 281:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Get Fault Mask 282:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Returns the current value of the Fault Mask register. 283:Drivers/CMSIS/Include/cmsis_gcc.h **** \return Fault Mask register value 284:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 285:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void) 286:Drivers/CMSIS/Include/cmsis_gcc.h **** { 287:Drivers/CMSIS/Include/cmsis_gcc.h **** uint32_t result; 288:Drivers/CMSIS/Include/cmsis_gcc.h **** 289:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); 290:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 291:Drivers/CMSIS/Include/cmsis_gcc.h **** } 292:Drivers/CMSIS/Include/cmsis_gcc.h **** 293:Drivers/CMSIS/Include/cmsis_gcc.h **** 294:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 295:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Set Fault Mask 296:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Assigns the given value to the Fault Mask register. 297:Drivers/CMSIS/Include/cmsis_gcc.h **** \param [in] faultMask Fault Mask value to set 298:Drivers/CMSIS/Include/cmsis_gcc.h **** */ ARM GAS /tmp/ccGAhXKe.s page 40 299:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) 300:Drivers/CMSIS/Include/cmsis_gcc.h **** { 301:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); 302:Drivers/CMSIS/Include/cmsis_gcc.h **** } 303:Drivers/CMSIS/Include/cmsis_gcc.h **** 304:Drivers/CMSIS/Include/cmsis_gcc.h **** #endif /* (__CORTEX_M >= 0x03U) */ 305:Drivers/CMSIS/Include/cmsis_gcc.h **** 306:Drivers/CMSIS/Include/cmsis_gcc.h **** 307:Drivers/CMSIS/Include/cmsis_gcc.h **** #if (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) 308:Drivers/CMSIS/Include/cmsis_gcc.h **** 309:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 310:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Get FPSCR 311:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Returns the current value of the Floating Point Status/Control register. 312:Drivers/CMSIS/Include/cmsis_gcc.h **** \return Floating Point Status/Control register value 313:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 314:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void) 315:Drivers/CMSIS/Include/cmsis_gcc.h **** { 316:Drivers/CMSIS/Include/cmsis_gcc.h **** #if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U) 317:Drivers/CMSIS/Include/cmsis_gcc.h **** uint32_t result; 318:Drivers/CMSIS/Include/cmsis_gcc.h **** 319:Drivers/CMSIS/Include/cmsis_gcc.h **** /* Empty asm statement works as a scheduling barrier */ 320:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile (""); 321:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); 322:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile (""); 323:Drivers/CMSIS/Include/cmsis_gcc.h **** return(result); 324:Drivers/CMSIS/Include/cmsis_gcc.h **** #else 325:Drivers/CMSIS/Include/cmsis_gcc.h **** return(0); 326:Drivers/CMSIS/Include/cmsis_gcc.h **** #endif 327:Drivers/CMSIS/Include/cmsis_gcc.h **** } 328:Drivers/CMSIS/Include/cmsis_gcc.h **** 329:Drivers/CMSIS/Include/cmsis_gcc.h **** 330:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 331:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief Set FPSCR 332:Drivers/CMSIS/Include/cmsis_gcc.h **** \details Assigns the given value to the Floating Point Status/Control register. 333:Drivers/CMSIS/Include/cmsis_gcc.h **** \param [in] fpscr Floating Point Status/Control value to set 334:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 335:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) 336:Drivers/CMSIS/Include/cmsis_gcc.h **** { 337:Drivers/CMSIS/Include/cmsis_gcc.h **** #if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U) 338:Drivers/CMSIS/Include/cmsis_gcc.h **** /* Empty asm statement works as a scheduling barrier */ 339:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile (""); 340:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc"); 341:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile (""); 342:Drivers/CMSIS/Include/cmsis_gcc.h **** #endif 343:Drivers/CMSIS/Include/cmsis_gcc.h **** } 344:Drivers/CMSIS/Include/cmsis_gcc.h **** 345:Drivers/CMSIS/Include/cmsis_gcc.h **** #endif /* (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) */ 346:Drivers/CMSIS/Include/cmsis_gcc.h **** 347:Drivers/CMSIS/Include/cmsis_gcc.h **** 348:Drivers/CMSIS/Include/cmsis_gcc.h **** 349:Drivers/CMSIS/Include/cmsis_gcc.h **** /*@} end of CMSIS_Core_RegAccFunctions */ 350:Drivers/CMSIS/Include/cmsis_gcc.h **** 351:Drivers/CMSIS/Include/cmsis_gcc.h **** 352:Drivers/CMSIS/Include/cmsis_gcc.h **** /* ########################## Core Instruction Access ######################### */ 353:Drivers/CMSIS/Include/cmsis_gcc.h **** /** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface 354:Drivers/CMSIS/Include/cmsis_gcc.h **** Access to dedicated instructions 355:Drivers/CMSIS/Include/cmsis_gcc.h **** @{ ARM GAS /tmp/ccGAhXKe.s page 41 356:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 357:Drivers/CMSIS/Include/cmsis_gcc.h **** 358:Drivers/CMSIS/Include/cmsis_gcc.h **** /* Define macros for porting to both thumb1 and thumb2. 359:Drivers/CMSIS/Include/cmsis_gcc.h **** * For thumb1, use low register (r0-r7), specified by constraint "l" 360:Drivers/CMSIS/Include/cmsis_gcc.h **** * Otherwise, use general registers, specified by constraint "r" */ 361:Drivers/CMSIS/Include/cmsis_gcc.h **** #if defined (__thumb__) && !defined (__thumb2__) 362:Drivers/CMSIS/Include/cmsis_gcc.h **** #define __CMSIS_GCC_OUT_REG(r) "=l" (r) 363:Drivers/CMSIS/Include/cmsis_gcc.h **** #define __CMSIS_GCC_USE_REG(r) "l" (r) 364:Drivers/CMSIS/Include/cmsis_gcc.h **** #else 365:Drivers/CMSIS/Include/cmsis_gcc.h **** #define __CMSIS_GCC_OUT_REG(r) "=r" (r) 366:Drivers/CMSIS/Include/cmsis_gcc.h **** #define __CMSIS_GCC_USE_REG(r) "r" (r) 367:Drivers/CMSIS/Include/cmsis_gcc.h **** #endif 368:Drivers/CMSIS/Include/cmsis_gcc.h **** 369:Drivers/CMSIS/Include/cmsis_gcc.h **** /** 370:Drivers/CMSIS/Include/cmsis_gcc.h **** \brief No Operation 371:Drivers/CMSIS/Include/cmsis_gcc.h **** \details No Operation does nothing. This instruction can be used for code alignment purposes. 372:Drivers/CMSIS/Include/cmsis_gcc.h **** */ 373:Drivers/CMSIS/Include/cmsis_gcc.h **** __attribute__((always_inline)) __STATIC_INLINE void __NOP(void) 374:Drivers/CMSIS/Include/cmsis_gcc.h **** { 375:Drivers/CMSIS/Include/cmsis_gcc.h **** __ASM volatile ("nop"); 1176 .loc 2 375 0 1177 .syntax divided 1178 @ 375 "Drivers/CMSIS/Include/cmsis_gcc.h" 1 1179 001e C046 nop 1180 @ 0 "" 2 1181 .thumb 1182 .syntax unified 1183 .L60: 1184 .LBE51: 1185 .LBE50: 1186 .LBB52: 1187 .LBB53: 366:./Src/hw_rtc.c **** 1188 .loc 1 366 0 1189 0020 01A9 add r1, sp, #4 1190 0022 6846 mov r0, sp 1191 0024 FFF7FEFF bl HW_RTC_GetCalendarValue 1192 .LVL115: 1193 .LBE53: 1194 .LBE52: 429:./Src/hw_rtc.c **** { 1195 .loc 1 429 0 1196 0028 401B subs r0, r0, r5 1197 002a A042 cmp r0, r4 1198 002c F7D3 bcc .L61 433:./Src/hw_rtc.c **** 1199 .loc 1 433 0 1200 002e 07B0 add sp, sp, #28 1201 @ sp needed 1202 0030 30BD pop {r4, r5, pc} 1203 .cfi_endproc 1204 .LFE108: 1206 .section .text.HW_RTC_SetTimerContext,"ax",%progbits 1207 .align 1 1208 .global HW_RTC_SetTimerContext 1209 .syntax unified 1210 .code 16 ARM GAS /tmp/ccGAhXKe.s page 42 1211 .thumb_func 1212 .fpu softvfp 1214 HW_RTC_SetTimerContext: 1215 .LFB109: 441:./Src/hw_rtc.c **** RtcTimerContext.Rtc_Time = HW_RTC_GetCalendarValue( &RtcTimerContext.RTC_Calndr_Date, &RtcTimerCo 1216 .loc 1 441 0 1217 .cfi_startproc 1218 @ args = 0, pretend = 0, frame = 0 1219 @ frame_needed = 0, uses_anonymous_args = 0 1220 0000 10B5 push {r4, lr} 1221 .LCFI17: 1222 .cfi_def_cfa_offset 8 1223 .cfi_offset 4, -8 1224 .cfi_offset 14, -4 442:./Src/hw_rtc.c **** return ( uint32_t ) RtcTimerContext.Rtc_Time; 1225 .loc 1 442 0 1226 0002 044C ldr r4, .L63 1227 0004 211D adds r1, r4, #4 1228 0006 2000 movs r0, r4 1229 0008 1830 adds r0, r0, #24 1230 000a FFF7FEFF bl HW_RTC_GetCalendarValue 1231 .LVL116: 1232 000e 2060 str r0, [r4] 444:./Src/hw_rtc.c **** 1233 .loc 1 444 0 1234 @ sp needed 1235 0010 10BD pop {r4, pc} 1236 .L64: 1237 0012 C046 .align 2 1238 .L63: 1239 0014 00000000 .word .LANCHOR2 1240 .cfi_endproc 1241 .LFE109: 1243 .section .text.HW_RTC_GetTimerContext,"ax",%progbits 1244 .align 1 1245 .global HW_RTC_GetTimerContext 1246 .syntax unified 1247 .code 16 1248 .thumb_func 1249 .fpu softvfp 1251 HW_RTC_GetTimerContext: 1252 .LFB110: 452:./Src/hw_rtc.c **** return (uint32_t) RtcTimerContext.Rtc_Time; 1253 .loc 1 452 0 1254 .cfi_startproc 1255 @ args = 0, pretend = 0, frame = 0 1256 @ frame_needed = 0, uses_anonymous_args = 0 1257 @ link register save eliminated. 453:./Src/hw_rtc.c **** } 1258 .loc 1 453 0 1259 0000 014B ldr r3, .L66 1260 0002 1868 ldr r0, [r3] 454:./Src/hw_rtc.c **** /* Private functions ---------------------------------------------------------*/ 1261 .loc 1 454 0 1262 @ sp needed 1263 0004 7047 bx lr 1264 .L67: ARM GAS /tmp/ccGAhXKe.s page 43 1265 0006 C046 .align 2 1266 .L66: 1267 0008 00000000 .word .LANCHOR2 1268 .cfi_endproc 1269 .LFE110: 1271 .section .bss.HW_RTC_Initalized,"aw",%nobits 1272 .set .LANCHOR1,. + 0 1275 HW_RTC_Initalized: 1276 0000 00 .space 1 1277 .section .bss.McuWakeUpTimeCal,"aw",%nobits 1278 .align 1 1279 .set .LANCHOR5,. + 0 1282 McuWakeUpTimeCal: 1283 0000 0000 .space 2 1284 .section .bss.McuWakeUpTimeInitialized,"aw",%nobits 1285 .set .LANCHOR3,. + 0 1288 McuWakeUpTimeInitialized: 1289 0000 00 .space 1 1290 .section .bss.RTC_AlarmStructure,"aw",%nobits 1291 .align 2 1292 .set .LANCHOR4,. + 0 1295 RTC_AlarmStructure: 1296 0000 00000000 .space 40 1296 00000000 1296 00000000 1296 00000000 1296 00000000 1297 .section .bss.RtcHandle,"aw",%nobits 1298 .align 2 1299 .set .LANCHOR0,. + 0 1302 RtcHandle: 1303 0000 00000000 .space 36 1303 00000000 1303 00000000 1303 00000000 1303 00000000 1304 .section .bss.RtcTimerContext,"aw",%nobits 1305 .align 2 1306 .set .LANCHOR2,. + 0 1309 RtcTimerContext: 1310 0000 00000000 .space 28 1310 00000000 1310 00000000 1310 00000000 1310 00000000 1311 .section .rodata.DaysInMonth,"a",%progbits 1312 .align 2 1313 .set .LANCHOR7,. + 0 1316 DaysInMonth: 1317 0000 1F .byte 31 1318 0001 1C .byte 28 1319 0002 1F .byte 31 1320 0003 1E .byte 30 1321 0004 1F .byte 31 1322 0005 1E .byte 30 1323 0006 1F .byte 31 1324 0007 1F .byte 31 ARM GAS /tmp/ccGAhXKe.s page 44 1325 0008 1E .byte 30 1326 0009 1F .byte 31 1327 000a 1E .byte 30 1328 000b 1F .byte 31 1329 .section .rodata.DaysInMonthLeapYear,"a",%progbits 1330 .align 2 1331 .set .LANCHOR6,. + 0 1334 DaysInMonthLeapYear: 1335 0000 1F .byte 31 1336 0001 1D .byte 29 1337 0002 1F .byte 31 1338 0003 1E .byte 30 1339 0004 1F .byte 31 1340 0005 1E .byte 30 1341 0006 1F .byte 31 1342 0007 1F .byte 31 1343 0008 1E .byte 30 1344 0009 1F .byte 31 1345 000a 1E .byte 30 1346 000b 1F .byte 31 1347 .text 1348 .Letext0: 1349 .file 3 "/usr/arm-none-eabi/include/machine/_default_types.h" 1350 .file 4 "/usr/arm-none-eabi/include/sys/lock.h" 1351 .file 5 "/usr/arm-none-eabi/include/sys/_types.h" 1352 .file 6 "/usr/lib/gcc/arm-none-eabi/7.2.0/include/stddef.h" 1353 .file 7 "/usr/arm-none-eabi/include/sys/reent.h" 1354 .file 8 "/usr/arm-none-eabi/include/math.h" 1355 .file 9 "/usr/arm-none-eabi/include/sys/_stdint.h" 1356 .file 10 "Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h" 1357 .file 11 "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l073xx.h" 1358 .file 12 "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h" 1359 .file 13 "Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_def.h" 1360 .file 14 "Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_rtc.h" 1361 .file 15 "Middlewares/Third_Party/Lora/Utilities/utilities.h" 1362 .file 16 "Inc/hw_msp.h" 1363 .file 17 "Middlewares/Third_Party/Lora/Utilities/low_power.h" 1364 .file 18 "Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_cortex.h" 1365 .file 19 "Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_rtc_ex.h" ARM GAS /tmp/ccGAhXKe.s page 45 DEFINED SYMBOLS *ABS*:0000000000000000 hw_rtc.c /tmp/ccGAhXKe.s:16 .text.HW_RTC_GetCalendarValue:0000000000000000 $t /tmp/ccGAhXKe.s:22 .text.HW_RTC_GetCalendarValue:0000000000000000 HW_RTC_GetCalendarValue /tmp/ccGAhXKe.s:158 .text.HW_RTC_GetCalendarValue:000000000000009c $d /tmp/ccGAhXKe.s:167 .text.HW_RTC_Init:0000000000000000 $t /tmp/ccGAhXKe.s:174 .text.HW_RTC_Init:0000000000000000 HW_RTC_Init /tmp/ccGAhXKe.s:298 .text.HW_RTC_Init:0000000000000080 $d /tmp/ccGAhXKe.s:307 .text.HW_RTC_setMcuWakeUpTime:0000000000000000 $t /tmp/ccGAhXKe.s:314 .text.HW_RTC_setMcuWakeUpTime:0000000000000000 HW_RTC_setMcuWakeUpTime /tmp/ccGAhXKe.s:421 .text.HW_RTC_setMcuWakeUpTime:0000000000000078 $d /tmp/ccGAhXKe.s:430 .text.HW_RTC_getMcuWakeUpTime:0000000000000000 $t /tmp/ccGAhXKe.s:437 .text.HW_RTC_getMcuWakeUpTime:0000000000000000 HW_RTC_getMcuWakeUpTime /tmp/ccGAhXKe.s:454 .text.HW_RTC_getMcuWakeUpTime:0000000000000008 $d /tmp/ccGAhXKe.s:459 .text.HW_RTC_GetMinimumTimeout:0000000000000000 $t /tmp/ccGAhXKe.s:466 .text.HW_RTC_GetMinimumTimeout:0000000000000000 HW_RTC_GetMinimumTimeout /tmp/ccGAhXKe.s:482 .text.HW_RTC_ms2Tick:0000000000000000 $t /tmp/ccGAhXKe.s:489 .text.HW_RTC_ms2Tick:0000000000000000 HW_RTC_ms2Tick /tmp/ccGAhXKe.s:516 .text.HW_RTC_Tick2ms:0000000000000000 $t /tmp/ccGAhXKe.s:523 .text.HW_RTC_Tick2ms:0000000000000000 HW_RTC_Tick2ms /tmp/ccGAhXKe.s:563 .text.HW_RTC_SetAlarm:0000000000000000 $t /tmp/ccGAhXKe.s:570 .text.HW_RTC_SetAlarm:0000000000000000 HW_RTC_SetAlarm /tmp/ccGAhXKe.s:919 .text.HW_RTC_SetAlarm:000000000000017c $d /tmp/ccGAhXKe.s:936 .text.HW_RTC_GetTimerElapsedTime:0000000000000000 $t /tmp/ccGAhXKe.s:943 .text.HW_RTC_GetTimerElapsedTime:0000000000000000 HW_RTC_GetTimerElapsedTime /tmp/ccGAhXKe.s:973 .text.HW_RTC_GetTimerElapsedTime:0000000000000018 $d /tmp/ccGAhXKe.s:978 .text.HW_RTC_GetTimerValue:0000000000000000 $t /tmp/ccGAhXKe.s:985 .text.HW_RTC_GetTimerValue:0000000000000000 HW_RTC_GetTimerValue /tmp/ccGAhXKe.s:1011 .text.HW_RTC_StopAlarm:0000000000000000 $t /tmp/ccGAhXKe.s:1018 .text.HW_RTC_StopAlarm:0000000000000000 HW_RTC_StopAlarm /tmp/ccGAhXKe.s:1049 .text.HW_RTC_StopAlarm:000000000000001c $d /tmp/ccGAhXKe.s:1055 .text.HW_RTC_IrqHandler:0000000000000000 $t /tmp/ccGAhXKe.s:1062 .text.HW_RTC_IrqHandler:0000000000000000 HW_RTC_IrqHandler /tmp/ccGAhXKe.s:1114 .text.HW_RTC_IrqHandler:0000000000000038 $d /tmp/ccGAhXKe.s:1121 .text.HW_RTC_DelayMs:0000000000000000 $t /tmp/ccGAhXKe.s:1128 .text.HW_RTC_DelayMs:0000000000000000 HW_RTC_DelayMs /tmp/ccGAhXKe.s:1207 .text.HW_RTC_SetTimerContext:0000000000000000 $t /tmp/ccGAhXKe.s:1214 .text.HW_RTC_SetTimerContext:0000000000000000 HW_RTC_SetTimerContext /tmp/ccGAhXKe.s:1239 .text.HW_RTC_SetTimerContext:0000000000000014 $d /tmp/ccGAhXKe.s:1244 .text.HW_RTC_GetTimerContext:0000000000000000 $t /tmp/ccGAhXKe.s:1251 .text.HW_RTC_GetTimerContext:0000000000000000 HW_RTC_GetTimerContext /tmp/ccGAhXKe.s:1267 .text.HW_RTC_GetTimerContext:0000000000000008 $d /tmp/ccGAhXKe.s:1275 .bss.HW_RTC_Initalized:0000000000000000 HW_RTC_Initalized /tmp/ccGAhXKe.s:1276 .bss.HW_RTC_Initalized:0000000000000000 $d /tmp/ccGAhXKe.s:1278 .bss.McuWakeUpTimeCal:0000000000000000 $d /tmp/ccGAhXKe.s:1282 .bss.McuWakeUpTimeCal:0000000000000000 McuWakeUpTimeCal /tmp/ccGAhXKe.s:1288 .bss.McuWakeUpTimeInitialized:0000000000000000 McuWakeUpTimeInitialized /tmp/ccGAhXKe.s:1289 .bss.McuWakeUpTimeInitialized:0000000000000000 $d /tmp/ccGAhXKe.s:1291 .bss.RTC_AlarmStructure:0000000000000000 $d /tmp/ccGAhXKe.s:1295 .bss.RTC_AlarmStructure:0000000000000000 RTC_AlarmStructure /tmp/ccGAhXKe.s:1298 .bss.RtcHandle:0000000000000000 $d /tmp/ccGAhXKe.s:1302 .bss.RtcHandle:0000000000000000 RtcHandle /tmp/ccGAhXKe.s:1305 .bss.RtcTimerContext:0000000000000000 $d /tmp/ccGAhXKe.s:1309 .bss.RtcTimerContext:0000000000000000 RtcTimerContext /tmp/ccGAhXKe.s:1312 .rodata.DaysInMonth:0000000000000000 $d /tmp/ccGAhXKe.s:1316 .rodata.DaysInMonth:0000000000000000 DaysInMonth /tmp/ccGAhXKe.s:1330 .rodata.DaysInMonthLeapYear:0000000000000000 $d ARM GAS /tmp/ccGAhXKe.s page 46 /tmp/ccGAhXKe.s:1334 .rodata.DaysInMonthLeapYear:0000000000000000 DaysInMonthLeapYear .debug_frame:0000000000000010 $d UNDEFINED SYMBOLS HAL_RTC_GetTime HAL_RTC_GetDate HAL_RTC_Init HAL_RTC_SetDate HAL_RTC_SetTime HAL_RTCEx_EnableBypassShadow HAL_RTC_DeactivateAlarm HAL_NVIC_GetPendingIRQ HAL_RTC_GetAlarm __aeabi_uldivmod __aeabi_idivmod LowPower_Enable LowPower_GetState LowPower_Disable HAL_RTC_SetAlarm_IT HAL_RTC_AlarmAEventCallback