LibDriver PCF8563
Loading...
Searching...
No Matches
driver_pcf8563_timer_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static pcf8563_handle_t gs_handle;
41static volatile uint8_t gs_flag;
42
48static void a_receive_callback(uint8_t type)
49{
50 switch (type)
51 {
53 {
54 gs_flag = 1;
55 pcf8563_interface_debug_print("pcf8563: irq timer.\n");
56
57 break;
58 }
60 {
61 pcf8563_interface_debug_print("pcf8563: irq alarm.\n");
62
63 break;
64 }
65 default :
66 {
67 pcf8563_interface_debug_print("pcf8563: irq unknown.\n");
68
69 break;
70 }
71 }
72}
73
82{
83 if (pcf8563_irq_handler(&gs_handle) != 0)
84 {
85 return 1;
86 }
87
88 return 0;
89}
90
98uint8_t pcf8563_timer_test(void)
99{
100 uint8_t res;
101 uint32_t i;
102 pcf8563_info_t info;
103
104 /* link functions */
112 DRIVER_PCF8563_LINK_RECEIVE_CALLBACK(&gs_handle, a_receive_callback);
113
114 /* get pcf8563 info */
115 res = pcf8563_info(&info);
116 if (res != 0)
117 {
118 pcf8563_interface_debug_print("pcf8563: get info failed.\n");
119
120 return 1;
121 }
122 else
123 {
124 /* print pcf8563 info */
125 pcf8563_interface_debug_print("pcf8563: chip is %s.\n", info.chip_name);
126 pcf8563_interface_debug_print("pcf8563: manufacturer is %s.\n", info.manufacturer_name);
127 pcf8563_interface_debug_print("pcf8563: interface is %s.\n", info.interface);
128 pcf8563_interface_debug_print("pcf8563: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
129 pcf8563_interface_debug_print("pcf8563: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
130 pcf8563_interface_debug_print("pcf8563: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
131 pcf8563_interface_debug_print("pcf8563: max current is %0.2fmA.\n", info.max_current_ma);
132 pcf8563_interface_debug_print("pcf8563: max temperature is %0.1fC.\n", info.temperature_max);
133 pcf8563_interface_debug_print("pcf8563: min temperature is %0.1fC.\n", info.temperature_min);
134 }
135
136 /* start timer test */
137 pcf8563_interface_debug_print("pcf8563: start timer test.\n");
138
139 /* init pcf8563 */
140 res = pcf8563_init(&gs_handle);
141 if (res != 0)
142 {
143 pcf8563_interface_debug_print("pcf8563: init failed.\n");
144
145 return 1;
146 }
147
148 /* disable rtc stop */
149 res = pcf8563_set_rtc_stop(&gs_handle, PCF8563_BOOL_FALSE);
150 if (res != 0)
151 {
152 pcf8563_interface_debug_print("pcf8563: set rtc stop failed.\n");
153 (void)pcf8563_deinit(&gs_handle);
154
155 return 1;
156 }
157
158 /* disable test mode */
159 res = pcf8563_set_test_mode(&gs_handle, PCF8563_BOOL_FALSE);
160 if (res != 0)
161 {
162 pcf8563_interface_debug_print("pcf8563: set test mode failed.\n");
163 (void)pcf8563_deinit(&gs_handle);
164
165 return 1;
166 }
167
168 /* disable power on reset */
170 if (res != 0)
171 {
172 pcf8563_interface_debug_print("pcf8563: set power on reset failed.\n");
173 (void)pcf8563_deinit(&gs_handle);
174
175 return 1;
176 }
177
178 /* disable minute alarm */
180 if (res != 0)
181 {
182 pcf8563_interface_debug_print("pcf8563: set minute alarm enable failed.\n");
183 (void)pcf8563_deinit(&gs_handle);
184
185 return 1;
186 }
187
188 /* disable hour alarm */
190 if (res != 0)
191 {
192 pcf8563_interface_debug_print("pcf8563: set hour alarm enable failed.\n");
193 (void)pcf8563_deinit(&gs_handle);
194
195 return 1;
196 }
197
198 /* disable day alarm */
200 if (res != 0)
201 {
202 pcf8563_interface_debug_print("pcf8563: set day alarm enable failed.\n");
203 (void)pcf8563_deinit(&gs_handle);
204
205 return 1;
206 }
207
208 /* disable week alarm */
210 if (res != 0)
211 {
212 pcf8563_interface_debug_print("pcf8563: set week alarm enable failed.\n");
213 (void)pcf8563_deinit(&gs_handle);
214
215 return 1;
216 }
217
218 /* disable alarm interrupt */
220 if (res != 0)
221 {
222 pcf8563_interface_debug_print("pcf8563: set alarm interrupt failed.\n");
223 (void)pcf8563_deinit(&gs_handle);
224
225 return 1;
226 }
227
228 /* disable clock out */
230 if (res != 0)
231 {
232 pcf8563_interface_debug_print("pcf8563: set clock out enable failed.\n");
233 (void)pcf8563_deinit(&gs_handle);
234
235 return 1;
236 }
237
238 /* set interrupt mode pulse */
240 if (res != 0)
241 {
242 pcf8563_interface_debug_print("pcf8563: set interrupt pin mode failed.\n");
243 (void)pcf8563_deinit(&gs_handle);
244
245 return 1;
246 }
247
248 /* timer freq 1hz */
250 if (res != 0)
251 {
252 pcf8563_interface_debug_print("pcf8563: set timer freq failed.\n");
253 (void)pcf8563_deinit(&gs_handle);
254
255 return 1;
256 }
257
258 /* set 10s */
259 res = pcf8563_set_timer_value(&gs_handle, 10);
260 if (res != 0)
261 {
262 pcf8563_interface_debug_print("pcf8563: set timer value failed.\n");
263 (void)pcf8563_deinit(&gs_handle);
264
265 return 1;
266 }
267
268 /* clear status */
270 if (res != 0)
271 {
272 pcf8563_interface_debug_print("pcf8563: clear status failed.\n");
273 (void)pcf8563_deinit(&gs_handle);
274
275 return 1;
276 }
277
278 /* enable timer interrupt */
280 if (res != 0)
281 {
282 pcf8563_interface_debug_print("pcf8563: set timer interrupt failed.\n");
283 (void)pcf8563_deinit(&gs_handle);
284
285 return 1;
286 }
287
288 /* enable timer */
290 if (res != 0)
291 {
292 pcf8563_interface_debug_print("pcf8563: set timer enable failed.\n");
293 (void)pcf8563_deinit(&gs_handle);
294
295 return 1;
296 }
297
298 /* wait for trigger */
299 gs_flag = 0;
300 for (i = 0; i < 200; i++)
301 {
302 if (gs_flag != 0)
303 {
304 break;
305 }
307 pcf8563_interface_debug_print("pcf8563: %ds.\n", i + 1);
308 }
309
310 /* check flag */
311 if (gs_flag == 0)
312 {
313 pcf8563_interface_debug_print("pcf8563: not found timer event.\n");
314 }
315
316 /* disable timer */
318 if (res != 0)
319 {
320 pcf8563_interface_debug_print("pcf8563: set timer enable failed.\n");
321 (void)pcf8563_deinit(&gs_handle);
322
323 return 1;
324 }
325
326 /* disable timer interrupt */
328 if (res != 0)
329 {
330 pcf8563_interface_debug_print("pcf8563: set timer interrupt failed.\n");
331 (void)pcf8563_deinit(&gs_handle);
332
333 return 1;
334 }
335
336 /* finish timer test */
337 pcf8563_interface_debug_print("pcf8563: finish timer test.\n");
338 (void)pcf8563_deinit(&gs_handle);
339
340 return 0;
341}
driver pcf8563 timer test header file
uint8_t pcf8563_info(pcf8563_info_t *info)
get chip's information
uint8_t pcf8563_set_week_alarm_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable week alarm
uint8_t pcf8563_set_hour_alarm_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable hour alarm
uint8_t pcf8563_set_timer_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable timer enable
uint8_t pcf8563_deinit(pcf8563_handle_t *handle)
close the chip
uint8_t pcf8563_set_timer_interrupt(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable timer interrupt
uint8_t pcf8563_set_test_mode(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable test mode
uint8_t pcf8563_set_timer_freq(pcf8563_handle_t *handle, pcf8563_timer_freq_t freq)
set timer freq
uint8_t pcf8563_set_clock_out_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable clock out enable
uint8_t pcf8563_init(pcf8563_handle_t *handle)
initialize the chip
struct pcf8563_info_s pcf8563_info_t
pcf8563 information structure definition
uint8_t pcf8563_irq_handler(pcf8563_handle_t *handle)
irq handler
uint8_t pcf8563_set_alarm_interrupt(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable alarm interrupt
uint8_t pcf8563_set_day_alarm_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable day alarm
uint8_t pcf8563_set_minute_alarm_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable minute alarm
uint8_t pcf8563_set_rtc_stop(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable rtc stop
struct pcf8563_handle_s pcf8563_handle_t
pcf8563 handle structure definition
uint8_t pcf8563_set_interrupt_mode(pcf8563_handle_t *handle, pcf8563_interrupt_mode_t mode)
set the interrupt mode
uint8_t pcf8563_set_timer_value(pcf8563_handle_t *handle, uint8_t value)
set timer value
uint8_t pcf8563_clear_status(pcf8563_handle_t *handle, pcf8563_interrupt_event_t event)
clear status
uint8_t pcf8563_set_power_on_reset(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable power on reset
@ PCF8563_TIMER_FREQ_1HZ
@ PCF8563_BOOL_TRUE
@ PCF8563_BOOL_FALSE
@ PCF8563_INTERRUPT_MODE_PULSE
@ PCF8563_INTERRUPT_EVENT_TIMER
@ PCF8563_INTERRUPT_EVENT_ALARM
uint8_t pcf8563_interface_iic_init(void)
interface iic bus init
uint8_t pcf8563_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t pcf8563_interface_iic_deinit(void)
interface iic bus deinit
void pcf8563_interface_delay_ms(uint32_t ms)
interface delay ms
void pcf8563_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t pcf8563_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t pcf8563_timer_test(void)
timer test
uint8_t pcf8563_timer_test_irq_handler(void)
timer test irq
uint32_t driver_version
char manufacturer_name[32]