1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
| #include <asf.h>
struct usart_module usart_instance_edison;
void rtc_match_callback(void);
void configure_rtc_callbacks(void);
void configure_rtc_calendar(void);
//! [rtc_module_instance]
struct rtc_module rtc_instance;
//! [rtc_module_instance]
//! [alarm_struct]
struct rtc_calendar_alarm_time alarm;
//! [alarm_struct]
//! [callback]
void rtc_match_callback(void)
{
/* Do something on RTC alarm match here */
port_pin_toggle_output_level(LED_0_PIN);
/* Set new alarm in 5 seconds */
//! [alarm_mask]
alarm.mask = RTC_CALENDAR_ALARM_MASK_SEC;
//! [alarm_mask]
//! [set_alarm]
alarm.time.second += 5;
alarm.time.second = alarm.time.second % 60;
rtc_calendar_set_alarm(&rtc_instance, &alarm, RTC_CALENDAR_ALARM_0);
//! [set_alarm]
}
//! [callback]
//! [setup_callback]
void configure_rtc_callbacks(void)
{
//! [reg_callback]
rtc_calendar_register_callback(
&rtc_instance, rtc_match_callback, RTC_CALENDAR_CALLBACK_ALARM_0);
//! [reg_callback]
//! [en_callback]
rtc_calendar_enable_callback(&rtc_instance, RTC_CALENDAR_CALLBACK_ALARM_0);
//! [en_callback]
}
//! [setup_callback]
//! [initialize_rtc]
void configure_rtc_calendar(void)
{
/* Initialize RTC in calendar mode. */
//! [init_conf]
struct rtc_calendar_config config_rtc_calendar;
rtc_calendar_get_config_defaults(&config_rtc_calendar);
//! [init_conf]
//! [time_struct]
alarm.time.year = 2013;
alarm.time.month = 1;
alarm.time.day = 1;
alarm.time.hour = 0;
alarm.time.minute = 0;
alarm.time.second = 4;
//! [time_struct]
//! [set_config]
config_rtc_calendar.clock_24h = true;
config_rtc_calendar.alarm[0].time = alarm.time;
config_rtc_calendar.alarm[0].mask = RTC_CALENDAR_ALARM_MASK_YEAR;
//! [set_config]
//! [init_rtc]
rtc_calendar_init(&rtc_instance, RTC, &config_rtc_calendar);
//! [init_rtc]
//! [enable]
rtc_calendar_enable(&rtc_instance);
//! [enable]
}
//! [initialize_rtc]
void configure_usart_edison(void) //UART Edison DEBUG
{
struct usart_config config_usart_edison;
struct port_config config_port_pin;
usart_get_config_defaults(&config_usart_edison);
port_get_config_defaults(&config_port_pin);
config_port_pin.direction = PORT_PIN_DIR_OUTPUT;
port_pin_set_config(PIN_PA02, &config_port_pin);
config_usart_edison.baudrate = 19200; //115200
config_usart_edison.mux_setting = USART_RX_1_TX_0_XCK_1; //RX PA05 et TX PA04 si on utilise SERCOM0 ou bien PA09 et PA08 USART_RX_0_TX_2_XCK_3
config_usart_edison.pinmux_pad0 = PINMUX_PB16C_SERCOM5_PAD0;
config_usart_edison.pinmux_pad1 = PINMUX_PB17C_SERCOM5_PAD1;
config_usart_edison.pinmux_pad2 = PINMUX_UNUSED;
config_usart_edison.pinmux_pad3 = PINMUX_UNUSED;
config_usart_edison.character_size= USART_CHARACTER_SIZE_8BIT;
config_usart_edison.stopbits = USART_STOPBITS_1;
while (usart_init(&usart_instance_edison, SERCOM5, &config_usart_edison) != STATUS_OK); //usart_init(&usart_instance_debug, SERCOM5, &usart_instance_debug)
stdio_serial_init(&usart_instance_edison, SERCOM5, &config_usart_edison); // Redirect output to uart
usart_enable(&usart_instance_edison);
printf("Usart init\r\n");
}
int main(void)
{
//! [run_initialize_rtc]
//! [system_init]
system_init();
delay_init();
configure_usart_edison();
//! [system_init]
//! [time]
struct rtc_calendar_time time;
rtc_calendar_get_time_defaults(&time);
time.year = 2017;
time.month = 12;
time.day = 13;
time.hour = 10;
time.minute = 38;
time.second = 35;
configure_rtc_calendar();
configure_rtc_callbacks();
rtc_calendar_set_time(&rtc_instance, &time);
//! [set_time]
//! [run_initialize_rtc]
//! [while]
//! [main_loop]
while (true) {
rtc_calendar_get_time(&rtc_instance, &time);
printf("%02d/%02d/%4d | %02d:%02d:%02d\r\n", time.day, time.month, time.year, time.hour, time.minute, time.second);
delay_s(1);
//! [main_loop]
/* Infinite loop */
}
//! [while]
} |
Partager