移植時のメモ

作成日:2011/07/25
最終更新日:2020/07/05

移植時のメモ

作成日:2011/07/25
最終更新日:2020/07/05

概要

CQ_V850へのkozos移植時のメモをまとめます。

V850で 組込みOS自作入門 1st ステップ 開発環境構築

Interface 2007年 5月号付属のCPU基板へ「12ステップで作る組込みOS自作入門」の内容を移植したいと思います。

さしあたって、まずは開発環境の構築から行います。 binutilsとgccは「12ステップで作る組込みOS自作入門」のVersionを使用することにします。 configureオプションについてはInterface 2007年 12月号の特集記事を参考にします。

/usr/local/v850e-elf 以下に開発環境を構築したいので「--prefix」オプションを指定します。 「--target」オプションはv850e-elfオプションを指定すれば良いようです。

binutils

コマンド1. binutilsの構築
% tar xvzf binutils-2.19.1.tar.gz
% cd binutils-2.19.1
% mkdir obj-v850e
% cd obj-v850e
% ../configure --target=v850e-elf --prefix=/usr/local/v850e-elf --disable-nls
% gmake
% su
# gmake install

gcc

コマンド2. gccの構築
% tar xvzf gcc-3.4.6.tar.gz
% cd gcc-3.4.6
% mkdir obj-v850e
% cd obj-v850e
% setenv SHELL /usr/local/bin/bash
% ../configure --target=v850e-elf --prefix=/usr/local/v850e-elf --disable-nls \
  --disable-threads --disable-shared --enable-languages=c
% gmake
% su
# setenv SHELL /usr/local/bin/bash
# gmake install

sp850es

arms22さんがUNIX環境に移植されたsp850esを利用しようと考えていたのですが、ソースコードがリンク切れになっていました。別の手を考えねば...

2011.7.26 追記

arms22さんがDownloadできるように対応してくださいました。 コンパイルがFreeBSD上で通る所までは確認できました。 arms22さんありがとうございます。

V850で 組込みOS自作入門 1st ステップ 移植方針

V850のアセンブリ言語やインタフェースの仕様について調査していました。

とにかく早く動かしたいので、シリアルドライバの汎用性は後回しにしようと考えています。 まずは、USB-SerialとなっているUARTA0固定で書くことにします。

ここで問題となるのは以下の2点です。 正確にはこの2点の合わせ技が問題となります。

  • PCのUSBポート接続することで基板の電源が入る
  • PCに接続しないとシリアルポートが見えない

上記の後者の問題点によってターミナルエミュレータをシリアルポートに向けるより先に基板が通電します。 そのため、ターミナルエミュレータで接続する前に文字列が流れてしまいます。 そうなると動作確認ができなくなってしまいます。

動作確認さえできれば良いので文字列の出力部をwhile文で回し続けることで対応しようと考えています。

V850で 組込みOS自作入門 1st ステップ 移植中

体調不良でしばらくお休みしていました。 また、V850に移植するに当たりWebサイトにまとめようとHTMLを書いたり していました。 実装を進める上で判明したことがあるので忘れないうちに列挙します。

CLOCK

ターゲットとしているCQ_V850は5MHzのセラロックが実装されています。 PLLを有効にすることで4逓倍し、20MHzで動作することができます。

はじめ、PLLを有効にせずとも20MHzで動作していると勘違いしていました。 そのため、シリアルポートのボーレートを9600bpsで設定しているつもりが、 2400bpsとなっており、しばらく悩んでいました。

シリアルポート

CQ_V850はシリアルポートを3つ持てます。 そのうち1つはUSB-Serial変換ICによってCON4経由でPCと通信できます。

それ以外のポートを使用するにはRS232CドライバICでレベル変換したり、 前述のUSB-Serial変換ICを使用するなどの方法が必要となります。

私は、ほかのポートの動作確認をするために部品箱にあったADM3202ANを 使用しました。これは、秋月電子通商で以前購入したRS232CドライバICです。 回路はブレッドボード上に現状構築し、試しています。

連続してシリアルポートから出力し続けると時々データが化けます。 フロー制御をしていないことが原因ではないかと考えてはいます。

定期的なリセット

現在、この現象を確認しています。 なんとなく、ウォッチドッグタイマが走っている気がしています。

V850で 組込みOS自作入門 4th ステップ 移植中

12ステップ本の4thステップではシリアル受信の実装を行います。 CPUのデータシートを見ていて吃驚。 送信済みフラグが格納されるレジスタはあるのに、受信済みフラグが格納されるレジスタがないのです。 一般に公開されている情報がない以上、現状ある機能で実現するしかありません。

現状、最有力候補の実装方法としては「シリアル受信割り込みを使って受信済みフラグを立てる」でしょう。 Interface 2007年 5月号の特集記事でもこのように実装しているように見えます。割り込みに部分的に対応 をすることになるので12thステップのコードを一部先に実装することになりそうです。

また、これを機会にシリアルドライバの中身を整理します。具体的にはマジックナンバーとしてベタ書きしている箇所をマクロに置き換えようと考えています。

本日中のコードの公開は無理そうです。月2回の更新を目標としていましたが、早速潰えるとは...。無念。

V850で 組込みOS自作入門 4th,5th ステップ

4thステップ、5thステップの移植記事を公開しました。 5thステップは特に手を加えること無く動作しました。

また、シリアルドライバをマジックナンバーを使用しない形に書き換えるとともに、レジスタ定義ファイルに全てのレジスタの定義を行いました。