struct dac_module dac_instance;
struct rtc_module rtc_instance;
static uint16_t dac_data[DATA_LENGTH];
voiddac_callback(uint8_t channel){UNUSED(channel);transfer_is_done =true;}
structdac_config config_dac;
dac_get_config_defaults(&config_dac);
#if (SAML21)dac_instance.start_on_event[DAC_CHANNEL_0] =true;#elsedac_instance.start_on_event =true;#endif
dac_init(&dac_instance, DAC, &config_dac);
structdac_events events =#if (SAML21){ .on_event_chan0_start_conversion =true};#else{ .on_event_start_conversion =true};#endif
dac_enable_events(&dac_instance, &events);
structdac_chan_config config_dac_chan;
dac_chan_get_config_defaults(&config_dac_chan);
dac_chan_set_config(&dac_instance, DAC_CHANNEL_0,&config_dac_chan);
dac_chan_enable(&dac_instance, DAC_CHANNEL_0);
dac_enable(&dac_instance);
structrtc_count_events rtc_event;
structrtc_count_config config_rtc_count;
rtc_count_get_config_defaults(&config_rtc_count);
config_rtc_count.prescaler = RTC_COUNT_PRESCALER_DIV_1;config_rtc_count.mode = RTC_COUNT_MODE_16BIT;#ifdef FEATURE_RTC_CONTINUOUSLY_UPDATEDconfig_rtc_count.continuously_update =true;#endif
rtc_count_init(&rtc_instance, RTC, &config_rtc_count);
rtc_event.generate_event_on_overflow =true;
rtc_count_enable_events(&rtc_instance, &rtc_event);
rtc_count_enable(&rtc_instance);
structevents_config event_config;
events_get_config_defaults(&event_config);
event_config.generator = EVSYS_ID_GEN_RTC_OVF;event_config.edge_detect = EVENTS_EDGE_DETECT_RISING;event_config.path = EVENTS_PATH_ASYNCHRONOUS;event_config.clock_source = GCLK_GENERATOR_0;
events_allocate(&event_dac, &event_config);
#if (SAML21)events_attach_user(&event_dac, EVSYS_ID_USER_DAC_START_0);#elseevents_attach_user(&event_dac, EVSYS_ID_USER_DAC_START);#endif
dac_register_callback(&dac_instance, DAC_CHANNEL_0,dac_callback,DAC_CALLBACK_TRANSFER_COMPLETE);
dac_chan_enable_callback(&dac_instance, DAC_CHANNEL_0,DAC_CALLBACK_TRANSFER_COMPLETE);