はじめに
前回、ArudinoボードでノーウエイトのLチカの周波数を測定した。今回はその続きで、次のボードで対決する。
ボード(chip)
対決に使用したボード(chip)は、次の2つ。
-
CH32V203 HSI144MHz(PlatformIO環境)
-
RP2040 (Raspberry pi pico) 133MHz(pico-sdk環境)
Lチカプログラム
対決に使用したプログラムは、次のとおり。
CH32V203(PlatformIO環境)
GPIO_WriteBit方式
#include "debug.h"
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
GPIO_Toggle_INIT();
while(1)
{
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);
}
}
レジスタ方式
while(1)
{
GPIOA->OUTDR = GPIOA->OUTDR | GPIO_Pin_0;
GPIOA->OUTDR = GPIOA->OUTDR & ~GPIO_Pin_0;
}
RP2040 (Raspberry pi pico)(pico-sdk環境)
#include "pico/stdlib.h"
const uint LED_PIN = 6; //GP6
int main() {
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true) {
gpio_put(LED_PIN, 1);
// sleep_us(1);
gpio_put(LED_PIN, 0);
// sleep_us(1);
}
}
↑このコードは、実効電圧が低いためか、LEDが点かない。
しかし、1μ秒とかウエイトを入れると、極端に周波数が落ちるため、gpio_putを10繰り返すことでLEDを点灯させた。
while (true) {
gpio_put(LED_PIN, 1);
gpio_put(LED_PIN, 1);
gpio_put(LED_PIN, 1);
gpio_put(LED_PIN, 1);
gpio_put(LED_PIN, 1);
gpio_put(LED_PIN, 1);
gpio_put(LED_PIN, 1);
gpio_put(LED_PIN, 1);
gpio_put(LED_PIN, 1);
gpio_put(LED_PIN, 1);
gpio_put(LED_PIN, 0);
gpio_put(LED_PIN, 0);
gpio_put(LED_PIN, 0);
gpio_put(LED_PIN, 0);
gpio_put(LED_PIN, 0);
gpio_put(LED_PIN, 0);
gpio_put(LED_PIN, 0);
gpio_put(LED_PIN, 0);
gpio_put(LED_PIN, 0);
gpio_put(LED_PIN, 0);
gpio_put(LED_PIN, 0);
}
結果
# | ボード | Lチカ周波数 | 備考 |
---|---|---|---|
1 | CH32V203 | 4.36MHz | GPIO_WriteBit方式 |
1 | CH32V203 | 10.29MHz | レジスタ方式 |
2 | RP2040 | 31.25MHz | ただし、LED点かない |
2 | RP2040 | 10.42MHz | gpio_put 10回 |
まとめ
さすがCH32V203のRISC-Vプロセッサは高速ですね。
RP2040のノーウエイトは、周波数こそ30MHz超えの超高速ですが、LEDを光らせるだけの電圧が足りません。ここはLチカ対決の場であるので、LEDが光らないのでは、論外という結果。
gpio_putを10繰り返すとLEDは点き、周波数も10MHzと十分速い。
(5回では点きませんでした)
なぜ電圧が足りていないのか、原因や対策をご存の方がいらしたら、ぜひ教えてください。
おしまい