はじめに
HiFive Rev.Bを入手したのでまずはPlatformIOでLチカする。
プロジェクトの作成
次のコマンドを実行し、PlatformIOのプロジェクトを作成する。
$ platformio init --board hifive1-revb
無印とはブートアドレスが異なるので、ボードもhifive1-revb
を使用する。
Lチカのコード
基本的なコードはここのblinker01を参考にしている。
レジスタアクセス
レジスタにアクセスするためにマクロを作成しておく。
utils.S
を次の内容で作成
.global dummy dummy: ret .global put32 put32: sw x11,(x10) ret
led.c
を次の内容で作成する。
void put32(unsigned int, unsigned int); void dummy (unsigned int); #define GPIOBASE 0x10012000 #define GPIO_OUTPUT_EN (GPIOBASE+0x08) #define GPIO_PORT (GPIOBASE+0x0c) #define GPIO_OUT_XOR (GPIOBASE+0x40) #define LED_RED (1<<22) #define LED_BLUE (1<<21) #define LED_GREEN (1<<19) #define LED_RGB (LED_RED|LED_GREEN|LED_BLUE) int main(int argc, char *argv[]) { unsigned int rx; put32(GPIO_OUTPUT_EN, LED_RGB); put32(GPIO_OUT_XOR, LED_RGB); put32(GPIO_PORT, LED_RGB); while (1) { put32(GPIO_PORT, LED_RGB); for (rx = 0; rx < 2000000; rx++) dummy(rx); put32(GPIO_PORT, 0); for (rx = 0; rx < 2000000; rx++) dummy(rx); } return 0; }
標準のライブラリやヘッダは使っていないので、リンカスクリプトとスタートアップを書けば、 ベアメタルでもこのまま動くはず。
ビルド
次のコマンドでビルド
$ platformio run
これは次のように短く書ける
$ pio run
書き込み
次のコマンドで書き込み
$ platformio run --target upload
次のように短く書ける
$ pio run -t upload