fholin fholin / Mbed 2 deprecated MiniMousetest

Dependencies:   mbed

Committer:
fholin
Date:
Fri Dec 15 13:15:04 2017 +0000
Revision:
0:2325d1d28df3
Child:
1:eda561b01daf
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fholin 0:2325d1d28df3 1 /*
fholin 0:2325d1d28df3 2 __ __ _ _
fholin 0:2325d1d28df3 3 | \/ (_) (_)
fholin 0:2325d1d28df3 4 | \ / |_ _ __ _ _ __ ___ ___ _ _ ___ ___
fholin 0:2325d1d28df3 5 | |\/| | | '_ \| | '_ ` _ \ / _ \| | | / __|/ _ \
fholin 0:2325d1d28df3 6 | | | | | | | | | | | | | | (_) | |_| \__ \ __/
fholin 0:2325d1d28df3 7 |_| |_|_|_| |_|_|_| |_| |_|\___/ \__,_|___/\___|
fholin 0:2325d1d28df3 8
fholin 0:2325d1d28df3 9
fholin 0:2325d1d28df3 10 Description : Flash Api.
fholin 0:2325d1d28df3 11
fholin 0:2325d1d28df3 12
fholin 0:2325d1d28df3 13 License : Revised BSD License, see LICENSE.TXT file include in the project
fholin 0:2325d1d28df3 14
fholin 0:2325d1d28df3 15 Maintainer : Fabien Holin (SEMTECH)
fholin 0:2325d1d28df3 16 */
fholin 0:2325d1d28df3 17 #include "mbed.h"
fholin 0:2325d1d28df3 18 #include "Define.h"
fholin 0:2325d1d28df3 19 #include "rtc_api.h"
fholin 0:2325d1d28df3 20 #include "LoraWanProcess.h"
fholin 0:2325d1d28df3 21 #include "mbed.h"
fholin 0:2325d1d28df3 22 RTC_HandleTypeDef RtcHandle;
fholin 0:2325d1d28df3 23 static int rtc_inited = 0;
fholin 0:2325d1d28df3 24 static void RTC_IRQHandler (void)
fholin 0:2325d1d28df3 25 {
fholin 0:2325d1d28df3 26 HAL_RTC_AlarmIRQHandler(&RtcHandle);
fholin 0:2325d1d28df3 27 }
fholin 0:2325d1d28df3 28 void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc){
fholin 0:2325d1d28df3 29 HAL_RTC_DeactivateAlarm( hrtc, RTC_ALARM_A );
fholin 0:2325d1d28df3 30 pcf.printf("alarm ok \n");
fholin 0:2325d1d28df3 31 }
fholin 0:2325d1d28df3 32
fholin 0:2325d1d28df3 33
fholin 0:2325d1d28df3 34 uint32_t RtcGetTimeMs( void )//uint32_t *Seconds, uint16_t * SubSeconds)
fholin 0:2325d1d28df3 35 {
fholin 0:2325d1d28df3 36 RTC_DateTypeDef dateStruct;
fholin 0:2325d1d28df3 37 RTC_TimeTypeDef timeStruct;
fholin 0:2325d1d28df3 38 struct tm timeinfo;
fholin 0:2325d1d28df3 39 RtcHandle.Instance = RTC;
fholin 0:2325d1d28df3 40 uint32_t Seconds;
fholin 0:2325d1d28df3 41 uint16_t SubSeconds;
fholin 0:2325d1d28df3 42 // Read actual date and time
fholin 0:2325d1d28df3 43 // Warning: the time must be read first!
fholin 0:2325d1d28df3 44 HAL_RTC_GetTime(&RtcHandle, &timeStruct, FORMAT_BIN);
fholin 0:2325d1d28df3 45 HAL_RTC_GetDate(&RtcHandle, &dateStruct, FORMAT_BIN);
fholin 0:2325d1d28df3 46
fholin 0:2325d1d28df3 47 // Setup a tm structure based on the RTC
fholin 0:2325d1d28df3 48 timeinfo.tm_wday = dateStruct.WeekDay;
fholin 0:2325d1d28df3 49 timeinfo.tm_mon = dateStruct.Month ;
fholin 0:2325d1d28df3 50 timeinfo.tm_mday = dateStruct.Date;
fholin 0:2325d1d28df3 51 timeinfo.tm_year = dateStruct.Year ;
fholin 0:2325d1d28df3 52 timeinfo.tm_hour = timeStruct.Hours;
fholin 0:2325d1d28df3 53 timeinfo.tm_min = timeStruct.Minutes;
fholin 0:2325d1d28df3 54 timeinfo.tm_sec = timeStruct.Seconds;
fholin 0:2325d1d28df3 55 SubSeconds = ( 255 - ( timeStruct.SubSeconds ) ) << 7;
fholin 0:2325d1d28df3 56
fholin 0:2325d1d28df3 57 // Convert to timestamp
fholin 0:2325d1d28df3 58 time_t t = mktime(&timeinfo);
fholin 0:2325d1d28df3 59 Seconds = t;
fholin 0:2325d1d28df3 60 return ( ( t * 1000 ) + ( 999 - ( ( timeStruct.SubSeconds *999) / 255 ) ) ); // get time en ms
fholin 0:2325d1d28df3 61 }
fholin 0:2325d1d28df3 62
fholin 0:2325d1d28df3 63 uint32_t RtcGetTimeSecond( void )//uint32_t *Seconds, uint16_t * SubSeconds)
fholin 0:2325d1d28df3 64 {
fholin 0:2325d1d28df3 65 RTC_DateTypeDef dateStruct;
fholin 0:2325d1d28df3 66 RTC_TimeTypeDef timeStruct;
fholin 0:2325d1d28df3 67 struct tm timeinfo;
fholin 0:2325d1d28df3 68 RtcHandle.Instance = RTC;
fholin 0:2325d1d28df3 69
fholin 0:2325d1d28df3 70 // Read actual date and time
fholin 0:2325d1d28df3 71 // Warning: the time must be read first!
fholin 0:2325d1d28df3 72 HAL_RTC_GetTime(&RtcHandle, &timeStruct, FORMAT_BIN);
fholin 0:2325d1d28df3 73 HAL_RTC_GetDate(&RtcHandle, &dateStruct, FORMAT_BIN);
fholin 0:2325d1d28df3 74
fholin 0:2325d1d28df3 75 // Setup a tm structure based on the RTC
fholin 0:2325d1d28df3 76 timeinfo.tm_wday = dateStruct.WeekDay;
fholin 0:2325d1d28df3 77 timeinfo.tm_mon = dateStruct.Month ;
fholin 0:2325d1d28df3 78 timeinfo.tm_mday = dateStruct.Date;
fholin 0:2325d1d28df3 79 timeinfo.tm_year = dateStruct.Year ;
fholin 0:2325d1d28df3 80 timeinfo.tm_hour = timeStruct.Hours;
fholin 0:2325d1d28df3 81 timeinfo.tm_min = timeStruct.Minutes;
fholin 0:2325d1d28df3 82 timeinfo.tm_sec = timeStruct.Seconds;
fholin 0:2325d1d28df3 83
fholin 0:2325d1d28df3 84
fholin 0:2325d1d28df3 85 // Convert to timestamp
fholin 0:2325d1d28df3 86 time_t t = mktime(&timeinfo);
fholin 0:2325d1d28df3 87 return ( t );
fholin 0:2325d1d28df3 88 }
fholin 0:2325d1d28df3 89
fholin 0:2325d1d28df3 90 void RtcSetAlarm( void ){
fholin 0:2325d1d28df3 91 RTC_AlarmTypeDef sAlarm;
fholin 0:2325d1d28df3 92 sAlarm.AlarmTime.Hours = 0;
fholin 0:2325d1d28df3 93 sAlarm.AlarmTime.Minutes = 0;
fholin 0:2325d1d28df3 94 sAlarm.AlarmTime.Seconds = RTC_ByteToBcd2(1);//RTC_ByteToBcd2(next_second);
fholin 0:2325d1d28df3 95 sAlarm.AlarmTime.TimeFormat = RTC_HOURFORMAT12_AM;
fholin 0:2325d1d28df3 96 sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
fholin 0:2325d1d28df3 97 sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
fholin 0:2325d1d28df3 98 sAlarm.AlarmMask = RTC_ALARMMASK_ALL;//(RTC_ALARMMASK_NONE|RTC_ALARMMASK_DATEWEEKDAY | RTC_ALARMMASK_HOURS | RTC_ALARMMASK_MINUTES );
fholin 0:2325d1d28df3 99 sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
fholin 0:2325d1d28df3 100 sAlarm.AlarmDateWeekDay = 1;
fholin 0:2325d1d28df3 101 sAlarm.Alarm = RTC_ALARM_A;
fholin 0:2325d1d28df3 102 HAL_RTC_SetAlarm_IT(&RtcHandle, &sAlarm, FORMAT_BCD);
fholin 0:2325d1d28df3 103 }
fholin 0:2325d1d28df3 104 void RtcGetAlarm( void ){
fholin 0:2325d1d28df3 105 RTC_AlarmTypeDef sAlarm;
fholin 0:2325d1d28df3 106 HAL_RTC_GetAlarm(&RtcHandle, &sAlarm, RTC_ALARM_A,FORMAT_BCD);
fholin 0:2325d1d28df3 107 pcf.printf("sAlarm.AlarmTime.Hours = %d\n",sAlarm.AlarmTime.Hours);
fholin 0:2325d1d28df3 108 pcf.printf("sAlarm.AlarmTime.Minutes = %d\n",sAlarm.AlarmTime.Minutes);
fholin 0:2325d1d28df3 109 pcf.printf("sAlarm.AlarmTime.Seconds = %d\n",sAlarm.AlarmTime.Seconds);
fholin 0:2325d1d28df3 110 pcf.printf("sAlarm.AlarmTime.AlarmDateWeekDaySel = %d\n",sAlarm.AlarmDateWeekDaySel);
fholin 0:2325d1d28df3 111 pcf.printf("sAlarm.AlarmTime.AlarmMask = %x\n",sAlarm.AlarmMask);
fholin 0:2325d1d28df3 112 }
fholin 0:2325d1d28df3 113 void myrtc_write( time_t t )
fholin 0:2325d1d28df3 114 {
fholin 0:2325d1d28df3 115 RTC_DateTypeDef dateStruct;
fholin 0:2325d1d28df3 116 RTC_TimeTypeDef timeStruct;
fholin 0:2325d1d28df3 117 RtcHandle.Instance = RTC;
fholin 0:2325d1d28df3 118 // Convert the time into a tm
fholin 0:2325d1d28df3 119 struct tm *timeinfo = localtime(&t);
fholin 0:2325d1d28df3 120
fholin 0:2325d1d28df3 121 // Fill RTC structures
fholin 0:2325d1d28df3 122 dateStruct.WeekDay = timeinfo->tm_wday;
fholin 0:2325d1d28df3 123 dateStruct.Month = timeinfo->tm_mon + 1;
fholin 0:2325d1d28df3 124 dateStruct.Date = timeinfo->tm_mday;
fholin 0:2325d1d28df3 125 dateStruct.Year = timeinfo->tm_year;
fholin 0:2325d1d28df3 126 timeStruct.Hours = timeinfo->tm_hour;
fholin 0:2325d1d28df3 127 timeStruct.Minutes = timeinfo->tm_min;
fholin 0:2325d1d28df3 128 timeStruct.Seconds = timeinfo->tm_sec;
fholin 0:2325d1d28df3 129 timeStruct.TimeFormat = RTC_HOURFORMAT_24;
fholin 0:2325d1d28df3 130 timeStruct.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
fholin 0:2325d1d28df3 131 timeStruct.StoreOperation = RTC_STOREOPERATION_RESET;
fholin 0:2325d1d28df3 132
fholin 0:2325d1d28df3 133 // Change the RTC current date/time
fholin 0:2325d1d28df3 134 HAL_RTC_SetDate(&RtcHandle, &dateStruct, FORMAT_BIN);
fholin 0:2325d1d28df3 135 HAL_RTC_SetTime(&RtcHandle, &timeStruct, FORMAT_BIN);
fholin 0:2325d1d28df3 136 }
fholin 0:2325d1d28df3 137
fholin 0:2325d1d28df3 138
fholin 0:2325d1d28df3 139
fholin 0:2325d1d28df3 140 void my_rtc_init (void)
fholin 0:2325d1d28df3 141 {
fholin 0:2325d1d28df3 142 int rtc_inited = 0;
fholin 0:2325d1d28df3 143 uint32_t rtc_freq = 0;
fholin 0:2325d1d28df3 144 RTC_HandleTypeDef RtcHandle;
fholin 0:2325d1d28df3 145 RCC_OscInitTypeDef RCC_OscInitStruct;
fholin 0:2325d1d28df3 146 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
fholin 0:2325d1d28df3 147 HAL_PWR_EnableBkUpAccess();
fholin 0:2325d1d28df3 148 RtcHandle.Instance = RTC;
fholin 0:2325d1d28df3 149 __PWR_CLK_ENABLE();
fholin 0:2325d1d28df3 150 // Reset Backup domain
fholin 0:2325d1d28df3 151 __HAL_RCC_BACKUPRESET_FORCE();
fholin 0:2325d1d28df3 152 __HAL_RCC_BACKUPRESET_RELEASE();
fholin 0:2325d1d28df3 153 // Enable LSE Oscillator
fholin 0:2325d1d28df3 154 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
fholin 0:2325d1d28df3 155 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Mandatory, otherwise the PLL is reconfigured!
fholin 0:2325d1d28df3 156 RCC_OscInitStruct.LSEState = RCC_LSE_ON; // External 32.768 kHz clock on OSC_IN/OSC_OUT
fholin 0:2325d1d28df3 157 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) == HAL_OK) {
fholin 0:2325d1d28df3 158 // Connect LSE to RTC
fholin 0:2325d1d28df3 159 __HAL_RCC_RTC_CLKPRESCALER(RCC_RTCCLKSOURCE_LSE);
fholin 0:2325d1d28df3 160 __HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE);
fholin 0:2325d1d28df3 161 rtc_freq = LSE_VALUE;
fholin 0:2325d1d28df3 162 }
fholin 0:2325d1d28df3 163 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
fholin 0:2325d1d28df3 164 PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
fholin 0:2325d1d28df3 165 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
fholin 0:2325d1d28df3 166 pcf.printf("PeriphClkInitStruct RTC failed with LSE\n");
fholin 0:2325d1d28df3 167 }
fholin 0:2325d1d28df3 168 // Enable RTC
fholin 0:2325d1d28df3 169 __HAL_RCC_RTC_ENABLE();
fholin 0:2325d1d28df3 170 RtcHandle.Init.HourFormat = RTC_HOURFORMAT_24;
fholin 0:2325d1d28df3 171 RtcHandle.Init.AsynchPrediv = 127;
fholin 0:2325d1d28df3 172 RtcHandle.Init.SynchPrediv = (rtc_freq / 128 )-1 ;
fholin 0:2325d1d28df3 173 RtcHandle.Init.OutPut = RTC_OUTPUT_DISABLE;
fholin 0:2325d1d28df3 174 RtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
fholin 0:2325d1d28df3 175 RtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
fholin 0:2325d1d28df3 176 if (HAL_RTC_Init(&RtcHandle) != HAL_OK) {
fholin 0:2325d1d28df3 177 pcf.printf("RTC error: RTC initialization failed.");
fholin 0:2325d1d28df3 178 }
fholin 0:2325d1d28df3 179 NVIC_ClearPendingIRQ(RTC_WKUP_IRQn);
fholin 0:2325d1d28df3 180 NVIC_DisableIRQ(RTC_WKUP_IRQn);
fholin 0:2325d1d28df3 181 NVIC_SetVector(RTC_WKUP_IRQn, (uint32_t)RTC_IRQHandler);
fholin 0:2325d1d28df3 182 NVIC_EnableIRQ(RTC_WKUP_IRQn);
fholin 0:2325d1d28df3 183 myrtc_write ( 0 );
fholin 0:2325d1d28df3 184 // __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_EVENT();
fholin 0:2325d1d28df3 185 // pcf.printf("status %d\n",HAL_RTCEx_SetWakeUpTimer_IT(&RtcHandle, 10000, 0));
fholin 0:2325d1d28df3 186 // HAL_RTCEx_WakeUpTimerIRQHandler(&RtcHandle);
fholin 0:2325d1d28df3 187 // pcf.printf("rtccounter %d\n",HAL_RTCEx_GetWakeUpTimer(&RtcHandle));
fholin 0:2325d1d28df3 188 // wait_ms(100);
fholin 0:2325d1d28df3 189 // pcf.printf("rtccounter %d\n",HAL_RTCEx_GetWakeUpTimer(&RtcHandle));
fholin 0:2325d1d28df3 190 }
fholin 0:2325d1d28df3 191 void mysleep (int time)
fholin 0:2325d1d28df3 192 {
fholin 0:2325d1d28df3 193 pcf.printf("status %d\n",HAL_RTCEx_SetWakeUpTimer_IT(&RtcHandle, 10000, 0));
fholin 0:2325d1d28df3 194 deepsleep();
fholin 0:2325d1d28df3 195 }
fholin 0:2325d1d28df3 196
fholin 0:2325d1d28df3 197 void wait_s ( int t )
fholin 0:2325d1d28df3 198 {
fholin 0:2325d1d28df3 199 wait(t);
fholin 0:2325d1d28df3 200 }
fholin 0:2325d1d28df3 201 Timer timerglobal ;
fholin 0:2325d1d28df3 202 void TimerLoraInit(void){
fholin 0:2325d1d28df3 203 timerglobal.start();
fholin 0:2325d1d28df3 204 }
fholin 0:2325d1d28df3 205 int GetTime(void)
fholin 0:2325d1d28df3 206 {
fholin 0:2325d1d28df3 207 return(timerglobal.read_ms());
fholin 0:2325d1d28df3 208 }