B3M38SPD seminar project - beehive monitor with LoRa reporting
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
spd-lorabees/build/hw_rtc.lst

2705 lines
121 KiB

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 **** * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics International N.V.
25:./Src/hw_rtc.c **** * All rights reserved.</center></h2>
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)-1)
86:./Src/hw_rtc.c ****
87:./Src/hw_rtc.c **** /* Asynchonuous prediv */
88:./Src/hw_rtc.c **** #define PREDIV_A (1<<(15-N_PREDIV_S))-1
89:./Src/hw_rtc.c ****
90:./Src/hw_rtc.c **** /* Sub-second mask definition */
91:./Src/hw_rtc.c **** #if (N_PREDIV_S == 10)
ARM GAS /tmp/ccGAhXKe.s page 3
92:./Src/hw_rtc.c **** #define HW_RTC_ALARMSUBSECONDMASK RTC_ALARMSUBSECONDMASK_SS14_10
93:./Src/hw_rtc.c **** #else
94:./Src/hw_rtc.c **** #error "Please define HW_RTC_ALARMSUBSECONDMASK"
95:./Src/hw_rtc.c **** #endif
96:./Src/hw_rtc.c ****
97:./Src/hw_rtc.c **** /* RTC Time base in us */
98:./Src/hw_rtc.c **** #define USEC_NUMBER 1000000
99:./Src/hw_rtc.c **** #define MSEC_NUMBER (USEC_NUMBER/1000)
100:./Src/hw_rtc.c **** #define RTC_ALARM_TIME_BASE (USEC_NUMBER>>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<<N_PREDIV_S) + ( PREDIV_S - RTC_TimeStruct->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