stm32f0: stm32f1: alarm: implement functionality to enable and disable the alarm with a time-out for resetting the host
parent
40ba5323f3
commit
0542810d22
@ -1,29 +1,56 @@ |
|||||||
#include <libopencm3/cm3/nvic.h> |
#include <libopencm3/cm3/nvic.h> |
||||||
#include <libopencm3/stm32/exti.h> |
#include <libopencm3/stm32/exti.h> |
||||||
|
#include <libopencm3/stm32/gpio.h> |
||||||
#include <libopencm3/stm32/rtc.h> |
#include <libopencm3/stm32/rtc.h> |
||||||
|
|
||||||
|
#include <rtc.h> |
||||||
|
|
||||||
|
static int reset = 0; |
||||||
|
|
||||||
void rtc_alarm_isr(void) |
void rtc_alarm_isr(void) |
||||||
{ |
{ |
||||||
exti_reset_request(EXTI17); |
|
||||||
|
|
||||||
if (rtc_check_flag(RTC_ALR)) { |
if (rtc_check_flag(RTC_ALR)) { |
||||||
rtc_clear_flag(RTC_ALR); |
rtc_clear_flag(RTC_ALR); |
||||||
|
|
||||||
rtc_set_alarm_time(rtc_get_counter_val() + 10); |
rtc_disable_alarm(); |
||||||
|
exti_reset_request(EXTI17); |
||||||
|
|
||||||
EXTI_IMR |= EXTI17; |
if (!reset) { |
||||||
exti_set_trigger(EXTI17, EXTI_TRIGGER_RISING); |
reset = 1; |
||||||
|
gpio_set(GPIOA, GPIO1); |
||||||
|
|
||||||
|
rtc_set_alarm_time(rtc_get_counter_val() + 5); |
||||||
|
rtc_enable_alarm(); |
||||||
|
} else { |
||||||
|
reset = 0; |
||||||
|
gpio_set(GPIOA, GPIO1); |
||||||
|
alarm_disable(); |
||||||
|
} |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
int alarm_init(void) |
int alarm_enable(uint32_t timeout) |
||||||
{ |
{ |
||||||
rtc_enable_alarm(); |
rtc_enable_alarm(); |
||||||
rtc_set_alarm_time(rtc_get_counter_val() + 10); |
rtc_set_alarm_time(rtc_get_counter_val() + timeout); |
||||||
|
|
||||||
nvic_enable_irq(NVIC_RTC_ALARM_IRQ); |
exti_enable_request(EXTI17); |
||||||
EXTI_IMR |= EXTI17; |
|
||||||
exti_set_trigger(EXTI17, EXTI_TRIGGER_RISING); |
exti_set_trigger(EXTI17, EXTI_TRIGGER_RISING); |
||||||
|
|
||||||
|
nvic_enable_irq(NVIC_RTC_ALARM_IRQ); |
||||||
|
nvic_set_priority(NVIC_RTC_ALARM_IRQ, 1); |
||||||
|
|
||||||
|
rtc_interrupt_enable(RTC_ALR); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
int alarm_disable(void) |
||||||
|
{ |
||||||
|
exti_disable_request(EXTI17); |
||||||
|
nvic_disable_irq(NVIC_RTC_ALARM_IRQ); |
||||||
|
rtc_interrupt_disable(RTC_ALR); |
||||||
|
rtc_disable_alarm(); |
||||||
|
|
||||||
return 0; |
return 0; |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue