SAM L21 Xplained Pro Bの超低電力クロックOSCULP32KでカウントモードでRTCを設定しようとしていますが、ASFを使用しています。それをテストするために、私はクイックスタートのRTCカウントポーリングの例に従っていました。この例では、RTCカウントを一定の期間と比較することによって2000mごとにLED0をトグルします。Atmel SAM L21 Xplained Pro ULPOSC32KでRTCを設定する - 周波数エラー
この例では、RTC_CLOCK_SOURCEはRTC_CLOCK_SELECTION_ULP1Kを使用しています。 RTC_CLOCK_SELECTION_ULP32Kに変更すると、LEDは2000ミリ秒ごとに1回ではなく、2000回ごとに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の中で、私は設定して、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*/
}
}
私は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でのみ設定されているようです。誰もがULP32kが正しい計数率を維持してRTCを構成する方法を知ってい
/* 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
:
しかしhttp://www.atmel.com/Images/Atmel-42111-SAM-RTC-Count-Driver-RTC-Count_ApplicationNote_AT03249.pdfのような他の人にそれがようGLCK 2定義しますか?エド・キングの提案に
メインクロックの周波数は何ですか? RTCは、通常、32768Hzのクロック/クリスタルで駆動されます。 –
私が理解する限り、メインクロックソースは4Mhzでプリスケーリングされた内部16Mオシレータとして設定され、RTCクロックソースは内部ULP32Kオシレータである必要があります。それらは2つの別々のクロックソースですが、メインクロックがクロッククロックフリークエンシーに干渉するかどうかわかりません。 –
GCLKジェネレータ2(RTC)の設定をコードに追加してください。あなたのRTCがどのようにクロックされているのかははっきりしていません。 –