SAM L21 Xplained Pro B의 초 저전력 클럭 OSCULP32K, ASF ASF를 사용하여 RTC를 카운트 모드로 구성하려고합니다. 이를 테스트하기 위해 빠른 시작 RTC 카운트 폴링 예제를 따랐습니다.이 예제에서는 RTC 카운트를 주어진 기간과 비교하여 2000m마다 LED0를 토글합니다.Atmel SAM L21 Xplained Pro ULPOSC32K에서 RTC 구성 - 주파수 오류
이 예제에서 RTC_CLOCK_SOURCE는 RTC_CLOCK_SELECTION_ULP1K를 사용합니다. RTC_CLOCK_SELECTION_ULP32K로 변경하면 LED가 2000ms마다 한 번이 아닌 2000ms마다 24 번 전환됩니다.
나는 conf_rtc.h에서 다음과 같은 구성을 가지고
# define RTC_CLOCK_SOURCE RTC_CLOCK_SELECTION_ULP32K
다음, conf_clocks.h에서 나는 4MHz의에서 주요 CPU 클럭을 구성.
/* SYSTEM_CLOCK_SOURCE_OSC16M configuration - Internal 16MHz oscillator */
# define CONF_CLOCK_OSC16M_FREQ_SEL SYSTEM_OSC16M_4M
# define CONF_CLOCK_OSC16M_ON_DEMAND true
# define CONF_CLOCK_OSC16M_RUN_IN_STANDBY false
/* Configure GCLK generator 0 (Main Clock) */
# define CONF_CLOCK_GCLK_0_ENABLE true
# define CONF_CLOCK_GCLK_0_RUN_IN_STANDBY false
# define CONF_CLOCK_GCLK_0_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_OSC16M
# define CONF_CLOCK_GCLK_0_PRESCALER 1
# define CONF_CLOCK_GCLK_0_OUTPUT_ENABLE false
그리고 main.c에있는
, I 구성하고 다음과 같이 RTC를 초기화 :/* RTC configuration*/
void configure_rtc_count(void);
struct rtc_module rtc_instance;
// [initiate rtc]
void configure_rtc_count(void)
{
//! [set_conf]
struct rtc_count_config config_rtc_count;
//! [set_conf]
//! [get_default]
rtc_count_get_config_defaults(&config_rtc_count);
//! [get_default]
//! [set_config]
config_rtc_count.prescaler = RTC_COUNT_PRESCALER_DIV_1;
config_rtc_count.mode = RTC_COUNT_MODE_16BIT;
#ifdef FEATURE_RTC_CONTINUOUSLY_UPDATED
config_rtc_count.continuously_update = true;
#endif
config_rtc_count.compare_values[0] = 1000;
//! [set_config]
//! [init_rtc]
rtc_count_init(&rtc_instance, RTC, &config_rtc_count);
//! [init_rtc]
//! [enable]
rtc_count_enable(&rtc_instance);
//! [enable]
}
// [initiate rtc]
/* End RTC configuration*/
하나가 초기화있어, 주 (무효)의 코드 읽기 :
int main (void)
{
system_init();
configure_rtc_count();
/*test RTC - toggle LED0 each 2000 ms*/
rtc_count_set_period(&rtc_instance, 2000);
for (;;)
{
/*test RTC - if count match, toggle LED0 each 2000 ms*/
if (rtc_count_is_compare_match(&rtc_instance, RTC_COUNT_COMPARE_0))
{
/* Do something on RTC count match here */
port_pin_toggle_output_level(LED_0_PIN);
rtc_count_clear_compare_match(&rtc_instance, RTC_COUNT_COMPARE_0);
}
/*end test RTC*/
}
}
I을 config_rtc_count.compare_values [0] = 1000의 의미가 무엇인지에 대한 설명을 찾을 수 없습니다. 나는 그것을 32000으로 바꿨지 만, LED가 깜박 거리지 않고, 1000보다 낮 으면 같은 토글 레이트를 유지한다. 이것은 무엇을 의미 하는가?
http://www.atmel.com/Images/Atmel-42471-SAM-L21-ADC-Sampling-using-Low-Power-Features_ApplicationNote_AT12705.pdf과 같은 예제에서는 RTC가 conf_rtc.h에서 #define RTC_CLOCK_SOURCE로만 구성되는 것 같습니다.
이/* Configure GCLK generator 2 (RTC) */
# define CONF_CLOCK_GCLK_2_ENABLE true
# define CONF_CLOCK_GCLK_2_RUN_IN_STANDBY false
# define CONF_CLOCK_GCLK_2_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_OSC32K
# define CONF_CLOCK_GCLK_2_PRESCALER 32
# define CONF_CLOCK_GCLK_2_OUTPUT_ENABLE false
사람이 ULP32k 올바른 카운트 속도를 유지와 RTC를 구성하는 방법을 알고 있나요 :
그러나 http://www.atmel.com/Images/Atmel-42111-SAM-RTC-Count-Driver-RTC-Count_ApplicationNote_AT03249.pdf 같은 다른 사람이 같은 GLCK 2를 정의? 에드 왕의 제안을
메인 시계의 주파수가 무의미한가요? RTC는 대개 32768Hz 클록/크리스탈에서 구동됩니다. –
내가 이해하는 한, 메인 클럭 소스는 4Mhz에서 프리 스케일 된 내부 16M 오실레이터로 구성되며, RTC 클록 소스는 내부 ULP32K 오실레이터이어야한다. 그들은 두 개의 분리 된 클럭 소스이지만, 메인 클럭이 rtc 클럭 frecuency와 간섭하는지 모르겠습니다 ... –
코드에 GCLK 제너레이터 2 (RTC)의 구성을 추가하십시오. RTC가 클럭되는 시간은 명확하지 않습니다. –