LoginSignup
2
0

高速 Lチカ 対決 その二

Posted at

はじめに

前回、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(GPIO_WriteBit方式)
    data_9687_4.37.png

  • ↓CH32V203(レジスタ方式)
    data_6208_10.29.png

  • ↓RP2040(LED点かない)
    data_38200_pico-X.png

  • ↓RP2040(gpio_put 10回)
    data_172000_pico_1.png

まとめ

さすがCH32V203のRISC-Vプロセッサは高速ですね。

RP2040のノーウエイトは、周波数こそ30MHz超えの超高速ですが、LEDを光らせるだけの電圧が足りません。ここはLチカ対決の場であるので、LEDが光らないのでは、論外という結果。
gpio_putを10繰り返すとLEDは点き、周波数も10MHzと十分速い。
(5回では点きませんでした)

なぜ電圧が足りていないのか、原因や対策をご存の方がいらしたら、ぜひ教えてください。

おしまい

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0