NIIETCM4 PD  v0.8.0
Драйвер периферии для микроконтроллеров на базе ядра ARM Cortex-M4
niietcm4_rtc.c
См. документацию.
1 
30 /* Includes ------------------------------------------------------------------*/
31 #include "niietcm4_rtc.h"
32 
50 uint32_t bcd2hex (uint32_t a)
51 {
52  if ((a&0x000000F0) == 0) return (a&0x0000000F);
53  else return ((a&0x0000000F)+ 10*((a&0x000000F0)>>4));
54 }
55 
56 uint32_t hex2bcd (uint32_t x)
57 {
58  uint32_t y;
59  y = (x / 10) << 4;
60  y = y | (x % 10);
61  return (y);
62 }
63 
64 void RTC_ShadowUpd(FunctionalState State)
65 {
66  NT_RTC->SHDW_bit.UPDTEN = (uint32_t)State;
67 }
68 
69 void RTC_GetTime(RTC_Format_TypeDef RTC_Format, RTC_Time_TypeDef* RTC_Time)
70 {
71  uint32_t time;
72 
73  RTC_ShadowUpd(DISABLE);
74  time = NT_RTC->TIME;
75  RTC_ShadowUpd(ENABLE);
76 
77  if (RTC_Format == RTC_Format_BIN)
78  {
79  RTC_Time->RTC_Hour = bcd2hex((uint32_t)((time & TIME_HOUR_Msk) >> TIME_HOUR_Pos));
80  RTC_Time->RTC_Minute = bcd2hex((uint32_t)((time & TIME_MINUTE_Msk) >> TIME_MINUTE_Pos));
81  RTC_Time->RTC_Second = bcd2hex((uint32_t)((time & TIME_SECOND_Msk) >> TIME_SECOND_Pos));
82  RTC_Time->RTC_Psecond = bcd2hex((uint32_t)((time & TIME_SPLIT_SEC_Msk) >> TIME_SPLIT_SEC_Pos));
83  }
84  else /* (RTC_Format == RTC_Format_BCD) */
85  {
86  RTC_Time->RTC_Hour = (uint32_t)((time & TIME_HOUR_Msk) >> TIME_HOUR_Pos);
87  RTC_Time->RTC_Minute = (uint32_t)((time & TIME_MINUTE_Msk) >> TIME_MINUTE_Pos);
88  RTC_Time->RTC_Second = (uint32_t)((time & TIME_SECOND_Msk) >> TIME_SECOND_Pos);
89  RTC_Time->RTC_Psecond = (uint32_t)((time & TIME_SPLIT_SEC_Msk) >> TIME_SPLIT_SEC_Pos);
90  }
91 
92 }
93 
94 void RTC_GetDate(RTC_Format_TypeDef RTC_Format, RTC_Date_TypeDef* RTC_Date)
95 {
96  RTC_ShadowUpd(DISABLE);
97  if (RTC_Format == RTC_Format_BIN)
98  {
99  RTC_Date->RTC_Weekday = bcd2hex(NT_RTC->WDAY);
100  RTC_Date->RTC_Day = bcd2hex(NT_RTC->DAY);
101  RTC_Date->RTC_Month = bcd2hex(NT_RTC->MONTH);
102  RTC_Date->RTC_Year = bcd2hex(NT_RTC->YEAR);
103  }
104  else /* (RTC_Format == RTC_Format_BCD) */
105  {
106  RTC_Date->RTC_Weekday = NT_RTC->WDAY;
107  RTC_Date->RTC_Day = NT_RTC->DAY;
108  RTC_Date->RTC_Month = NT_RTC->MONTH;
109  RTC_Date->RTC_Year = NT_RTC->YEAR;
110  }
111  RTC_ShadowUpd(ENABLE);
112 }
113 
114 void RTC_SetTime(RTC_Format_TypeDef RTC_Format, RTC_Time_TypeDef* RTC_Time)
115 {
116  assert_param(IS_RTC_PSECOND(RTC_Time->RTC_Psecond));
117  if (RTC_Format == RTC_Format_BIN)
118  {
119  assert_param(IS_RTC_SECOND(RTC_Time->RTC_Second));
120  assert_param(IS_RTC_MINUTE(RTC_Time->RTC_Minute));
121  assert_param(IS_RTC_HOUR(RTC_Time->RTC_Hour));
122  }
123  else /* (RTC_Format == RTC_Format_BCD) */
124  {
125  assert_param(IS_RTC_SECOND(bcd2hex(RTC_Time->RTC_Second)));
126  assert_param(IS_RTC_MINUTE(bcd2hex(RTC_Time->RTC_Minute)));
127  assert_param(IS_RTC_HOUR(bcd2hex(RTC_Time->RTC_Hour)));
128  }
129 
130  if (RTC_Format == RTC_Format_BIN)
131  {
132  NT_RTC->HOUR = hex2bcd(RTC_Time->RTC_Hour);
133  NT_RTC->MINUTE = hex2bcd(RTC_Time->RTC_Minute);
134  NT_RTC->SECOND = hex2bcd(RTC_Time->RTC_Second);
135  NT_RTC->PSECONDS = hex2bcd(RTC_Time->RTC_Psecond);
136  }
137  else /* (RTC_Format == RTC_Format_BCD) */
138  {
139  NT_RTC->HOUR = RTC_Time->RTC_Hour;
140  NT_RTC->MINUTE = RTC_Time->RTC_Minute;
141  NT_RTC->SECOND = RTC_Time->RTC_Second;
142  NT_RTC->PSECONDS = RTC_Time->RTC_Psecond;
143  }
144 }
145 
146 void RTC_SetDate(RTC_Format_TypeDef RTC_Format, RTC_Date_TypeDef* RTC_Date)
147 {
148  if (RTC_Format == RTC_Format_BIN)
149  {
150  assert_param(IS_RTC_WEEKDAY(RTC_Date->RTC_Weekday));
151  assert_param(IS_RTC_DAY(RTC_Date->RTC_Day));
152  assert_param(IS_RTC_MONTH(RTC_Date->RTC_Month));
153  assert_param(IS_RTC_YEAR(RTC_Date->RTC_Year));
154  }
155  else /* (RTC_Format == RTC_Format_BCD) */
156  {
157  assert_param(IS_RTC_WEEKDAY(bcd2hex(RTC_Date->RTC_Weekday)));
158  assert_param(IS_RTC_DAY(bcd2hex(RTC_Date->RTC_Day)));
159  assert_param(IS_RTC_MONTH(bcd2hex(RTC_Date->RTC_Month)));
160  assert_param(IS_RTC_YEAR(bcd2hex(RTC_Date->RTC_Year)));
161  }
162 
163  if (RTC_Format == RTC_Format_BIN)
164  {
165  NT_RTC->WDAY = hex2bcd(RTC_Date->RTC_Weekday);
166  NT_RTC->DAY = hex2bcd(RTC_Date->RTC_Day);
167  NT_RTC->MONTH = hex2bcd(RTC_Date->RTC_Month);
168  NT_RTC->YEAR = hex2bcd(RTC_Date->RTC_Year);
169  }
170  else /* (RTC_Format == RTC_Format_BCD) */
171  {
172  NT_RTC->WDAY = RTC_Date->RTC_Weekday;
173  NT_RTC->DAY = RTC_Date->RTC_Day;
174  NT_RTC->MONTH = RTC_Date->RTC_Month;
175  NT_RTC->YEAR = RTC_Date->RTC_Year;
176  }
177 }
178 
195 /******************* (C) COPYRIGHT 2015 NIIET *****END OF FILE****/
#define IS_RTC_DAY(DAY)
Макрос проверки попадания значений дней в допустимый диапазон.
Definition: niietcm4_rtc.h:109
#define IS_RTC_PSECOND(PSECOND)
Макрос проверки попадания значений долей секунд в допустимый диапазон.
Definition: niietcm4_rtc.h:57
FunctionalState
Описывает логическое состояние периферии. Используется для операций включения/выключения периферийных...
Definition: niietcm4.h:157
#define IS_RTC_WEEKDAY(WEEKDAY)
Макрос проверки аргументов типа RTC_Weekday_TypeDef.
Definition: niietcm4_rtc.h:97
Структура времени.
Definition: niietcm4_rtc.h:178
RTC_Weekday_TypeDef RTC_Weekday
Definition: niietcm4_rtc.h:208
uint32_t RTC_Month
Definition: niietcm4_rtc.h:215
RTC_Format_TypeDef
Формат ввода/вывода времени и даты.
Definition: niietcm4_rtc.h:159
uint32_t RTC_Psecond
Definition: niietcm4_rtc.h:180
#define IS_RTC_HOUR(HOUR)
Макрос проверки попадания значений часов в допустимый диапазон.
Definition: niietcm4_rtc.h:75
#define IS_RTC_MINUTE(MINUTE)
Макрос проверки попадания значений минут в допустимый диапазон.
Definition: niietcm4_rtc.h:69
#define IS_RTC_YEAR(YEAR)
Макрос проверки попадания значений лет в допустимый диапазон.
Definition: niietcm4_rtc.h:153
uint32_t RTC_Minute
Definition: niietcm4_rtc.h:188
Структура даты.
Definition: niietcm4_rtc.h:206
#define IS_RTC_SECOND(SECOND)
Макрос проверки попадания значений секунд в допустимый диапазон.
Definition: niietcm4_rtc.h:63
#define IS_RTC_MONTH(MONTH)
Макрос проверки аргументов типа RTC_Month_TypeDef.
Definition: niietcm4_rtc.h:136
uint32_t RTC_Second
Definition: niietcm4_rtc.h:182
Файл содержит все прототипы функций для таймеров