2016-07-25 09:04:22 +02:00
|
|
|
#include <rtc.h>
|
2016-07-06 11:28:51 +02:00
|
|
|
#include <mpu.h>
|
|
|
|
|
2016-07-14 21:10:51 +02:00
|
|
|
#include <stddef.h>
|
|
|
|
|
2016-07-06 11:28:51 +02:00
|
|
|
static void (*rtc_callback)(void) = NULL;
|
|
|
|
|
2016-07-25 09:04:22 +02:00
|
|
|
//---
|
|
|
|
// Callback API.
|
|
|
|
//---
|
|
|
|
|
2016-07-06 11:28:51 +02:00
|
|
|
/*
|
2016-07-25 09:04:22 +02:00
|
|
|
rtc_setCallback()
|
2016-07-06 11:28:51 +02:00
|
|
|
Sets the callback function for the real-time clock interrupt. If
|
|
|
|
frequency is non-NULL, the clock frequency is set to the given value.
|
|
|
|
*/
|
2016-07-25 22:38:47 +02:00
|
|
|
void rtc_setCallback(void (*callback)(void), enum RTCFrequency frequency)
|
2016-07-06 11:28:51 +02:00
|
|
|
{
|
|
|
|
rtc_callback = callback;
|
2016-07-25 09:04:22 +02:00
|
|
|
if(frequency < 1 || frequency > 7) return;
|
2016-07-06 11:28:51 +02:00
|
|
|
|
|
|
|
if(isSH3())
|
2016-07-25 09:04:22 +02:00
|
|
|
rtc_setFrequency_7705(frequency);
|
2016-07-06 11:28:51 +02:00
|
|
|
else
|
2016-07-25 09:04:22 +02:00
|
|
|
rtc_setFrequency_7305(frequency);
|
2016-07-06 11:28:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2016-07-25 09:04:22 +02:00
|
|
|
rtc_getCallback()
|
2016-07-06 11:28:51 +02:00
|
|
|
Returns the callback function. If frequency is non-NULL, it is set to
|
|
|
|
the current frequency value.
|
|
|
|
*/
|
2016-07-25 22:38:47 +02:00
|
|
|
void (*rtc_getCallback(enum RTCFrequency *frequency))(void)
|
2016-07-06 11:28:51 +02:00
|
|
|
{
|
|
|
|
if(!frequency) return rtc_callback;
|
|
|
|
|
|
|
|
if(isSH3())
|
2016-07-25 09:04:22 +02:00
|
|
|
*frequency = rtc_getFrequency_7705();
|
2016-07-06 11:28:51 +02:00
|
|
|
else
|
2016-07-25 09:04:22 +02:00
|
|
|
*frequency = rtc_getFrequency_7305();
|
2016-07-06 11:28:51 +02:00
|
|
|
|
|
|
|
return rtc_callback;
|
|
|
|
}
|
2016-07-25 09:04:22 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
// Interrupt management.
|
|
|
|
//---
|
|
|
|
|
|
|
|
/*
|
|
|
|
rtc_interrupt()
|
|
|
|
Handles an RTC interrupt by calling the callback.
|
|
|
|
*/
|
|
|
|
void rtc_interrupt(void)
|
|
|
|
{
|
|
|
|
if(rtc_callback) (*rtc_callback)();
|
|
|
|
|
|
|
|
if(isSH3())
|
|
|
|
rtc_interrupt_7705();
|
|
|
|
else
|
|
|
|
rtc_interrupt_7305();
|
|
|
|
}
|