IkawaMitsuhide’s blog

OSづくりにまつわることを発信したい

FiHiveでLチカ 〜外付けのLED〜

HiFiveはSiFive社が製造しているマイコンボードです。マイコンボードにくっついているLEDはサンプルを使えば簡単に光らせることができます。ここでは他のGPIOピンを使ってLEDを光らせてみます。開発はFreedom studioを使っています。

環境

  • OS :Windows10
  • 開発環境:Freedom studio
  • ボード:HiFive 1 Rev B

GPIOに関するAPI

Freedom studioではマイコンの機能を簡単に扱えるAPIが用意されています。GPIOを操作するためのAPI のうち、私が使ったものを紹介します。詳しい内容は以下のサイトを見てください。

https://sifive.github.io/freedom-metal-docs/api.html

struct metal_gpio *metal_gpio_get_device(unsigned int device_num)

参考サイトではGPIO device handleを取得すると書いてありますが、プログラムを見たところGPIOを操作するレジスタのベースアドレスを戻り値のmetal_gpioとして取り出しているようです。

引数のdevice_numを0とすることでGPIOのベースアドレスが取得できます。ちなみに0以外の数字を入れても意味がないようです。(HiFive 1 rev b以外だと違うかも)

__inline__ int metal_gpio_enable_output(struct metal_gpio *gpio, int pin)

metal_gpio_get_deviceを使って取得したmetal_gpioを使ってGPIOピンを出力に設定します。pinの値はピン番号です。ピン番号はボードに書かれているArduinoのピン番号ではなく、HiFive 1 rev bに搭載されたプロセッサのFE310のピン番号になります。ピン番号は以下のサイトから確認できます。

https://sifive.cdn.prismic.io/sifive%2Fa4546ced-0922-4d87-9334-e97c1a9fd9a5_hifive1.b01.schematics.pdf

__inline__ int metal_gpio_set_pit(struct metal_gpio *gpio, int pin, int value)

metal_gpio_get_deviceで取得したmetal_gpioとピン番号pinで指定したGPIOピンの出力を行います。出力値valueが1の時はHigh、0の時はLowとなります。

サンプルプログラム

Freedom studioを立ち上げて、適当なプロジェクトを作ります。プロジェクトのメインとなるソースコードに以下のプログラムを貼り付けます。(ソースコードの貼り付け方がわからなかったので、そのまま書き込んであります。後で修正したいと思います。)

 

#include <studio.h>

#include <metal/gpio.h>

 

int main (void){

struct metal_gpio *gpio;

unsigned long i;

led = metal_gpio_get_device(0);

metal_gpio_enable_output(gpio, 13); //ボード上では19番

while(1){

metal_gpio_set_pin(gpio, 13, 0);

for (i=0; i<500000; i++) ; //一定時間何もしない

 

metal_gpio_set_pin(gpio, 13, 1);

for (i=0; i<500000; i++) ;

}

return 0;

}

 

ボードとLEDの配線は写真の通りです。

f:id:IkawaMitsuhide:20210221134416j:plain

HiFive 1 rev bとLEDの配線の配線

LEDが点滅すれば成功です。

 

終わりに

単純なLチカですが、APIに登場するdevice_numやpinが何の番号なのか分からず苦戦しました。参考になれば幸いです。

今回のプログラムは以下のサイトを参考にしました。

medium.com