Raspberry Pi Picoでプログラミング ⑧ クロックの値の表示
Picoのスペックにクロックは最大133MHzと書かれています。RP2040 Datasheetの「2.15. Clocks」には、分周器を使って、マイコンの周辺モジュール用のクロックが作られている図が掲載されています。
ここでは、それらのクロックの値を表示するプログラムを作ります。
●プログラム名はclock
pico/worksにあるserialフォルダをコピペし、colckという名前で保存します。
ソースのhello_serial.cとCMakeLists.txtが入っています。まず、CMakeLists.txtを修正します。
add_executable(clock
clock.c
)
# Pull in our pico_stdlib which aggregates commonly used features
target_link_libraries(clock pico_stdlib)
# create map/bin/hex/uf2 file etc.
pico_add_extra_outputs(clock)
一つ上のディレクトリにあるCMakeLists.txtを修正します。
cmake_minimum_required(VERSION 3.12)
# Pull in SDK (must be before project)
include(pico_sdk_import.cmake)
project(pico_examples C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(PICO_EXAMPLES_PATH ${PROJECT_SOURCE_DIR})
# Initialize the SDK
pico_sdk_init()
# Add blink example
add_subdirectory(cmake)
add_subdirectory(blink)
add_subdirectory(serial)
add_subdirectory(clock)
一番下の行に1行追加しました。
clockフォルダのhello_serial.cをclock.cにrenameします。そして、次のように中身を入れ替えます。
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/clocks.h"
int main() {
stdio_init_all();
uint f_pll_sys = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_PLL_SYS_CLKSRC_PRIMARY);
uint f_pll_usb = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_PLL_USB_CLKSRC_PRIMARY);
uint f_rosc = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_ROSC_CLKSRC);
uint f_clk_sys = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_SYS);
uint f_clk_peri = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_PERI);
uint f_clk_usb = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_USB);
uint f_clk_adc = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_ADC);
uint f_clk_rtc = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_RTC);
printf("\n-----\n");
printf("pll_sys = %dkHz\n", f_pll_sys);
printf("pll_usb = %dkHz\n", f_pll_usb);
printf("rosc = %dkHz\n", f_rosc);
printf("clk_sys = %dkHz\n", f_clk_sys);
printf("clk_peri = %dkHz\n", f_clk_peri);
printf("clk_usb = %dkHz\n", f_clk_usb);
printf("clk_adc = %dkHz\n", f_clk_adc);
printf("clk_rtc = %dkHz\n", f_clk_rtc);
printf("-----\n");
return 0;
}
実行結果です。システム・クロックは125MHzです。