只今のアクセス件数:


(別室)SH−2(SH7125F/SH7144F)で遊ぼう

 ※このページは個人的な趣味によって書かれており、著者は全ての内容について、いかなる責任も負いません。
  参考にされる場合は、自己責任でお願いします。

 このページは、ルネサンステクノロジー社のSH−2を使った簡単なプログラムを紹介しています。
 内容はPICと関係ありません。




 ●重要なお知らせ●

  1.Windows10の対応

    FDTが、最新バージョン(FDT V.4.09 Release 03)以降よりWindows10に対応するようになりました。
    十分な検証をしているわけではありませんが、私のWindows10パソコンでは、HEWで開発し、FDTでSH2に書き込むという
    一連の操作が問題なく行えました。
    FDTを使うときは、入力クロックの設定を装着している水晶の周波数に合わせてください(デフォルト値では書き込みできません)。

  2.ADM3202のコンデンサの接続について

    このHPのADM3202を使った回路図では、ADM3202の2ピンにつながっている0.1μFのコンデンサをGndにつないで
    実験していますが(図a)、ADM3202のデータシートでは、このコンデンサはVccにつなぐようになっています(図b)。
    実験では、このようなつなぎ方でもICのチャージポンプは正常に動作していますが、データシートでは(図b)のように記述され
    ているので、データシートの通りに(図b)のようにしたほうがいいと思います。

 





 ●SH−2について

     ルネサステクノロジ社は、日立製作所、及び三菱電機によって2003年4月1日に設立されました。
    SH−2は、 ルネサステクノロジー の32ビットのCPUで、趣味で一般的に使われる8〜16ビット系のPIC、AVR、H8、HC08、
    78K、Z80、、、等より本格的なものです。
    SH(SuperH)シリーズには、SH−1〜4があり、SH−3〜4は汎用OS(Windows系OS等)を動かすこともできますが、
    最低でも、周辺機器としてRomを外部に接続する必要があり、使い方が少し難しくなります。
     秋月電子 では、SH7125/SH7144Fや、SH7125ボードが販売されていて、SH−2は入手しやすくなりました。
    他にも、例えば、 (株)アルファプロジェクト 等から、安価なCPUボードが販売されていて、
     マルツパーツ館 で購入する事ができます。
    秋月電子で取り扱っているSH−2のうち、SH7144Fについては、雑誌の付録を使った例を、 「(別室)おまけのページ」 でも
    紹介しています。

    このページでは、SH7144F、SH7125を使った事例を紹介しています。

    ※注意!! 電源電圧が、SH7125は5VSH7144Fは3.3Vです。

    ※SH−2の取り扱い(参考)
      ●秋月電子
        SH7125F(CPU単体)      900円
        SH7125F(マイコンボード)   1500円  ※コネクタなし
        SH7125F(マイコンボード)   1800円
        SH7125F(ベースボード)    4800円
        SH7144F(CPU単体)     1800円
        SH7144F(マイコンボード)   2700円  ※12MHz水晶付き
        SH7144F(マイコンボード)   2650円  ※12.5MHz水晶付き
        SH7144F(ベースボード)    5600円
      ●(株)アルファプロジェクト
        SH7125CPUボード       2800円(税込2940円) 

SHシリーズ  ※ルネサステクノロジ社の資料より抜粋

 ●SH−2の開発環境について

 
   1.ルネサステクノロジー社の提供する開発環境 

   (1)HEW:High-performance Embedded Workshop(SuperHコンパイラパッケージ)

     ・無償評価版がルネサステクノロジーのHPより無償でダウンロードできます
      (評価版は、インストール後60日後からは、開発できるアプリケーションサイズに256Kバイトの制限ができますが、
      SH7125/SH7144Fは、フラッシュを最大256Kバイトしか積んでいないので実質は関係ありません)

   (2)FDT:Flash Development Toolkit(書き込みツール)

     ・無償評価版がルネサステクノロジーのHPより無償でダウンロードできます
      (製品版と比較して制限はありませんが、サポートは一切受けられません)

   (3)マニュアル

     ・日本語のマニュアルが、ルネサステクノロジーのHPより無償でダウンロードできます



   2.Gnuツール(Gccクロス開発環境) 

   (1)Gnuツール(Gccクロス開発環境)

     ・多くのCPUの開発で一般的に使われている、C言語系のフリーの開発ツールで、 「(別室)H8で遊ぼう」 のページでも
      紹介しています
      基本的にはUNIX系のツールなのですが、Cygwin ※「(別室)Cygwinのページ」を参照 を使う事で、Windowsパソコン
      上でも使用する事ができます
      このツールについては、説明しているサイトが多いので、設定については、他の多くのサイトを参照すればいいと思います。
      基本的には、ソースで提供されているツールなので、Cygwin上で環境の構築が必要になるのですが、例えば、
       「インターフェース誌」の2006年7月号 では、バイナリーイメージもダウンロードできるので、このファイルを解凍して、
      そのままCygwinのフォルダーにコピーして(「sh-tools」のフォルダーごと「/usr/local」 にコピーする)使用する事もできます
      ※詳細は、 ※「(別室)Cygwinのページ」「Gnuのクロス開発環境(gcc)について」を参照。



   3.他社、ベンダーの提供する開発環境(一部を抜粋) 

   (1)FlashWriter EX for SH7125

     ・(株)アルファプロジェクトが提供する、アルファプロジェクトのSH7125専用の書き込みツール
       ※http://www.apnet.co.jp/tiny/index.html から無償でダウンロードできます


   (2)KPIT GNU Tools (gcc)

     ・KPIT Cummins Infosystems Ltd が提供する無償のgcc開発ツール
       ※http://www.kpitgnutools.com/index-ja.php から無償でダウンロードできます




SH7125を使ってみる


SH7125Fは、ROM128Kバイト、RAM8Kバイトを積んだ32ビットの高性能なRISCプロセッサです。
動作スピードも50MHzと高速で、周辺モジュールも充実しています。

「SH7125」の写真 とにかく小さいので半田付けは大変です(つま楊枝の頭との比較) 

ダイセンの変換基板は品質がいいのですが、穴を広げないとピンソケットがはいりません

秋月電子の64ピン変換基板は安価で、SH7125のハンダ付けに自信がある人には最適です

秋月電子のSH7125Fマイコンボードは、小型で使い勝手がよいのですが、
28ピンソケットは手に入らなかったので、40ピンソケットを切断して使用しています

 

「SH7125」のピン配置図  ※SH7125/SH7124ハードマニュアルより抜粋

 ●SH7125について


  1.クロック発信器について

   ・CPU・キャッシュ用内部クロック(Iφ)、周辺モジュール用内部クロック(Pφ)、内部バス用クロック(Bφ)、MTU2クロック(MPφ)
    を独立して生成できます。

   ・クロック発信器(10〜12.5MHz)から、PLL回路(8倍の逓倍機能)、1/2〜1/8分周器を通して、各クロックを生成します。 

   ・クロックの上限は、Iφ=50MHz、Pφ・Bφ・MPφ=40MHzです。
 
   ・各モジュールの動作クロック
 
       Iφ  ;CPU、UBC、ROM、RAM
       Bφ ;バスクロック
       Pφ ;POE,SCI,A/D、CMT,WDT
       MPφ ;MTU2
 

「SH7125」のクロック発信器  ※SH7125/SH7124ハードマニュアルより抜粋


  2.MCU動作モードについて

   ・下記のモードがあります。電源投入時は、パワーオンリセットが必須です。
    動作中にモードを変更してはいけません。また、下図の組み合わせ以外を指定してはいけません。
    なお、モード3では、全てのポートを使用できます。
 
    ※通常は、「ブートモード」でプログラムの書き換え、「シングルチップモード」でプログラムの実行を
     すればいいと思います。
   

「SH7125」のMCU動作モード  ※SH7125/SH7124ハードマニュアルより抜粋 


  3.フラッシュメモリーの書き換え回数について

   ・全ての特性を保障する書き換え回数は100回(実験で使うレベルなら数100回らしい)なので、むやみなプログラムの
    書き換えは、行わないほうが無難です。
    PICやAVRのように、数万回〜数十万回もプログラムの書き換えは出来ません。
    これはSH−2に限った事ではなく、他のCPU(V850、ARM、H8、R8C、、)でも、多くのものは、書き換え保障回数は
    100回程度です。  



 ●実験ボード・タイプ1A(SH7125F)   ※秋月電子のマイコンボードを使用

 
   秋月電子で市販されている「SH7125Fマイコンボード」を使って、簡単な実験ボードを作ってみました。
   0.5mmのQFPパッケージのハンダ付けに自信がない人は、このボードの使用がお勧めです。
   (私の場合、ハンダ付けの失敗で、沢山のSH2マイコンを壊してしまいました。)

   このマイコンボードは、SH7125Fと12.5MHz水晶程度しか付いていないので、使用する為には、
   最低でも、シリアル通信でプログラムを書き込むための、RS232レベルコンバータ(ADM3202等)、リセット回路、
   モード切替スイッチ等の追加回路が必要です。 
   なお、秋月電子では、全てがセットされた「SH7125Fベースボードキット」も販売されているので、
   手間をかけたくない人は、そちらを購入したらいいと思います。

写真(表面/裏面)

回路図(ほとんど説明書の通りだ)
黄色で塗られた箇所は、秋月電子のマイコンボードにはじめから装着されています

FDTで書き込む時の注意 

          ※ここで紹介しているプログラムは、「メインクロックの逓倍比」が4「周辺クロックの逓倍比」が2
          (12.5MHz水晶を使用した時の上限)で作成されています。
          これ以外の指定をしてプログラムを書き込んだ場合、プログラムが正常に動作しない可能性があります。

秋月電子「SH7125Fマイコンボード」のピン配置 ※秋月電子の説明書より一部抜粋



  1.HEWによる開発(SH7125F)

  (1)ルーレットにしてみる1(SH7125F)

 
     簡単なプログラムを作ってみました。

     サンプル@は、任意の間隔でLEDの点燈が回転するだけです。
     サンプルAは、CMTモジュールを使ってタイマーを作ったもので、ほぼ1秒間隔でLEDの点燈が回転します。
     サンプルBは、CMTモジュールから割り込みをかけているもので、ほぼ1秒間隔でLEDの点燈が回転します。

     ※但し、割り込みを行う(サンプルB)ためには、HEWが自動的に作成する「intprg.c」及び、「resetprg.c」にも下記の修正が必要です。
       intprg.c; CMT0の割り込み発生時にシステムがコールするINT_CMT0_CMI0関数に、ユーザーが作成した関数を定義します
              ※サンプルの379〜383行目付近
       resetprg.c;初期値は、割り込みを発生させる最小の割り込みレベルが'F'を超える ※Fは最大値なので、割り込みは発生しない
              なので、プログラム中の'INTC'で指定するレベルまで下げます  ※例えば、最小値の0まで下げれば、1以上の割り込みが
              有効になります ※サンプルの22行目付近  

intprg.c、resetprg.c の修正イメージ(サンプルBを使用する場合のみ修正が必要です)

写真

回路図(パラレルポートに、8個のLEDをつないだだけです)

5002020.c

サンプル@ (SH7125F HEW用  C言語プログラム)



5002021.c

サンプルA (SH7125F HEW用  CMTタイマー仕様 C言語プログラム)



5002022.c

サンプルB (SH7125F HEW用  割り込み仕様 C言語プログラム)

intprg.c

サンプルB (SH7125F HEW用  割り込み仕様 C言語プログラム)

resetprg.c

サンプルB (SH7125F HEW用  割り込み仕様 C言語プログラム)




  (2)UARTを使ってみる(SH7125F)

 
     SH7125に内蔵されているSCIモジュールを使って、ハイパーターミナルにつないでみました。
     モード3で電源を入れると、メッセージを出力して、キーボードから入力された文字をターミナルに返します。
     パソコンとの接続は、プログラムの書き込みに使っているADM3202(31番,32番ピンのTXD1,RXD1)をそのまま共通で使用しています。
     通信速度は、一般的な9600BPSにしてありますが、もっと高速にする場合は、プログラム中のBRRの値を変えるだけです。
  
     サンプル@は、ハイパーターミナルからの文字入力を待って、出力するだけです。
     サンプルAは、受信割り込みを使用したバージョンです。
     但し、上記のルーレット同様、割り込みを行うバージョン(サンプルA)は、HEWが自動的に作成するファイル「intprg.c」、
     「resetprg.c」に下記の修正が必要です。

      intprg.c; SCI1の受信割り込み発生時にシステムがコールするINT_SCI1_RXI1関数に、ユーザーが作成した関数を定義する
            ※サンプルの453〜454行目付近
      resetprg.c;初期値は、割り込みを発生させる最小の割り込みレベルが'F'を超える ※Fは最大値なので、割り込みは発生しない
            なので、プログラム中の'INTC'で指定するレベルまで下げます  ※例えば、最小値の0まで下げれば、1以上の割り込みが
            有効になります ※サンプルの22行目付近  

写真(上記と全く同じ ※プログラム書き込み用の端子を、そのまま共通に使用しました)

ハイパーターミナルの画面イメージ

ハイパワーターミナルの設定(PICのページと同じにしてあります)

回路図(上記と全く同じ ※プログラム書き込み用の端子を、そのまま共通に使用しました)

5002030.c

サンプル@ (SH7125F HEW用  C言語プログラム)



main.c

サンプルA (SH7125F HEW用  割り込み仕様 C言語プログラム)

intprg.c

サンプルA (SH7125F HEW用  割り込み仕様 C言語プログラム)

resetprg.c

サンプルA (SH7125F HEW用  割り込み仕様 C言語プログラム)




  (3)A/Dコンバータを使ってみる(SH7125F)

 
     SH7125に内蔵されているA/Dコンバータを使ってみました。
     モード3で電源を入れると、ハイパーターミナルにメッセージを出力して、AN0の電圧をmVで表示します。

     パソコンとの接続は、上記同様、プログラムの書き込みに使っているADM3202をそのまま共通で使用しました。
     接続条件等も、上記と同じです。
     入力電圧は0〜5Vの範囲で、かつ電源電圧以下(電源をつないでいない時に入力に電圧をかけてはいけない)
     にしないと、SHマイコンが壊れるので、注意が必要です。
  

写真(実験で、AN0に測定電圧を入力してみました)

ハイパーターミナルの画面イメージ

ハイパワーターミナルの設定(PICのページと同じにしてあります)

回路図(AN0に測定する電圧を与えただけです。他は上記と全く同じです)

5002040.c

プログラムソースサンプル(SH7125F HEW用  C言語プログラム)




  (4)PWMでランプの明るさを制御してみる(SH7125F)

    準備中




  2.Gnuツール(Gccクロス開発環境)による開発(SH7125F)

  (1)ルーレットにしてみる1(SH7125F)

       HEWで作ったルーレットと同じものをGccでも作ってみました。Gnuツールは、最も一般的に使われている開発ツールだと思います。
     このツールの詳細は、解説しているサイトが多いので割愛しますが、SH用をダウンロードし、インストールしておく必要があります。
     Makefileを用意してあるので、コンパイルは、Cygwin上で「Make」と打つだけです。
     ※詳細は、 ※「(別室)Cygwinのページ」「Gnuのクロス開発環境(gcc)について」を参照
     コンパイルが正常に終了するとmotファイルが作成されるので、このファイルをFDT等でSH7125マイコンに書き込めばよいです。
     
     サンプル@は、任意の間隔でLEDの点燈が回転するだけです。
     サンプルAは、同じ機能のものを、CMTモジュールを使って作ってみたものです。
     サンプルBは、同じ機能のものを、CMTモジュールから割り込みをかけて動かしているものです。
     但し、割り込みを行う(サンプルB)は、「startup1.s」が他のバージョンとは異なるので注意が必要です。

      注)割り込みを行う(サンプルB)場合に「startup1.s」に必要な修正点(詳細はソースを参照)
        ・ベクターテーブルに、割り込み関数を定義します
          => CMT0の場合なら、0x2E0にCMT0割り込み関数(_int_cmi0)の定義を追記します
        ・割り込みが発生するシステムのレベルを下げる(デフォルト値では'F'[最大値]なので、割り込みが発生しない)
          => SRレジスタをロード、割り込みレベルを修正し、SRレジスタを更新するアセンブラの記述を追記します


写真(上記、HEWで使ったものを、そのまま使用しています)

回路図(上記、HEWで使ったものを、そのまま使用しています)

コンパイルイメージ ※makeと打つだけです

main.c

サンプル@ プログラムソースサンプル(SH7125F Gcc用  C言語プログラム)

work.lzh

サンプル@ 上記プログラムを含むフォルダー全て(SH7125F Cygwin/Gcc用  フォルダー全て)

main.c

サンプルA (SH7125F Cygwin/Gcc用 CMTタイマー仕様 C言語プログラム)

work.lzh

サンプルA 上記プログラムを含むフォルダー全て(SH7125F Cygwin/Gcc用 CMTタイマー仕様  フォルダー全て)

main.c

サンプルB (SH7125F Cygwin/Gcc用   割り込み仕様 C言語プログラム)

startup1.s

サンプルB (SH7125F Cygwin/Gcc用   割り込み仕様 startup1.sファイル)

work.lzh

サンプルB 上記プログラムを含むフォルダー全て(SH7125F Cygwin/Gcc用   割り込み仕様  フォルダー全て)






  (2)UARTを使ってみる(SH7125F)

       上記、HEWで作ったものと同じものをGccでも作ってみました。
     電源を入れると、メッセージを出力して、キーボードから入力された文字をターミナルに返します。
  
     サンプル@は、文字入力を待って、出力するだけです。
     サンプルAは、受信割り込みバージョンです。
     ルーレット同様、割り込みを行う(サンプルA)は、「startup1.s」が他のバージョンとは異なるので注意が必要です。

写真(上記、HEWバージョンと全く同じ)

ハイパーターミナルの画面イメージ(上記、HEWバージョンと全く同じ)

ハイパワーターミナルの設定(上記、HEWと全く同じ)

回路図(上記、HEWバージョンと全く同じ)

main.c

サンプル@(SH7125F Cygwin/Gcc用 C言語プログラム)

work.lzh

サンプル@ 上記プログラムを含むフォルダー全て(SH7125F Cygwin/Gcc用 フォルダー全て)



main.c

サンプルA(SH7125F Cygwin/Gcc用 C言語プログラム)

startup1.s

サンプルA(SH7125F Cygwin/Gcc用 「startup1.s」ファイル)

work.lzh

サンプルA 上記プログラムを含むフォルダー全て(SH7125F Cygwin/Gcc用 フォルダー全て)



  (3)A/Dコンバータを使ってみる(SH7125F)

       上記、HEWで作ったものと同じものをGccでも作ってみました。
     電源を入れると、ハイパーターミナルにメッセージを出力して、AN0の電圧をmVで表示します。
     入力電圧は0〜5Vの範囲で、かつ電源電圧以下(電源をつないでいない時に入力に電圧をかけてはいけない)
     にしないと、SHマイコンが壊れるので、注意が必要です。
  

写真(上記、HEWバージョンと全く同じ)

ハイパーターミナルの画面イメージ

ハイパワーターミナルの設定(上記、HEWバージョンと全く同じ)

回路図(上記、HEWバージョンと全く同じ)

main.c

(SH7125F Cygwin/Gcc用 C言語プログラム)

work.lzh

上記プログラムを含むフォルダー全て(SH7125F Cygwin/Gcc用 フォルダー全て)



  (4)多重割り込みをしてみる(SH7125F)

     ルーレットアダプタと、パソコンをつないで電子サイコロにしてみました(上記のサンプルと全く同じ接続)。
     多重割り込みをするためのサンプルですが、SH2を使うと、多重割り込みや、マルチプロセスは簡単に作成できます。
     このサンプルは、スタートすると1秒後にCMT0割り込みが発生してLEDが高速回転を開始し(人間の目には全てが点燈して見える)、
     ハイパーターミナルから文字を入力すると、CMT0割り込みの中から、SCI1割り込みが発生します。
     もしも入力された文字が's'なら、CMT0割り込みを抜けて、選択されたLEDが点燈し、's'以外なら、エコーバックのみを
     おこなうというものです。
     1秒ほどLEDが点燈すると、再度、CMT0割り込みが発生するという動作を繰り返します。

     SH2は、割り込みレベルを個々に設定できるので、CMT0割り込みから、SCI1割り込みを発生させるには、
     SCI1割り込みのレベルのほうを高く定義しておく必要があります。

写真(上記、ルーレットをそのまま使用しました)

ハイパーターミナルのイメージ

サンプルの割り込みのイメージ(割り込みレベルが高い処理ほど、優先され実行されます)

ハイパワーターミナルの設定(上記と全く同じです)

回路図(上記、UART、ルーレットをそのまま使用しました)

main.c

サンプルプログラム(SH7125F Cygwin/Gcc用   割り込み仕様 C言語プログラム)

startup1.s

サンプルプログラム (SH7125F Cygwin/Gcc用   割り込み仕様 startup1.sファイル)

work.lzh

サンプルプログラム 上記プログラムを含むフォルダー全て(SH7125F Cygwin/Gcc用   割り込み仕様  フォルダー全て)




  (5)マルチプロセス処理をしてみる(SH7125F)

     上記「(4)多重割り込みをしてみる」のプログラムを、マルチプロセス処理に書き換えてみました。
     独立した3つのプロセスが同時に動くもので、回路等は、上記と全く同じです。
     2つのプロセス(CMT0割り込み、CMT1割り込み)で、2点のLEDが独立して動き、ハイパーターミナルから文字入力があった
     場合は、SCI1割り込みでエコーバックを行います。
     割り込みが同時に発生した場合(多重割り込み)は、割り込みレベルは、CMT0<CMT1<SCI1にしてあります。

写真(上記、ルーレットをそのまま使用しました)

ハイパーターミナルのイメージ

処理のイメージ

ハイパワーターミナルの設定(上記と全く同じ)

回路図(上記、UART、ルーレットをそのまま使用しました)

main.c

サンプルプログラム(SH7125F Cygwin/Gcc用  C言語プログラム)

startup1.s

サンプルプログラム (SH7125F Cygwin/Gcc用 startup1.sファイル)

work.lzh

サンプルプログラム 上記プログラムを含むフォルダー全て(SH7125F Cygwin/Gcc用 フォルダー全て)




  (6)

 




  3.Gnuツール(Gccクロス開発環境)によるアセンブラでの開発(SH7125F)

  (0)Gccアセンブラを使ってみる(SH7125F)

       Gnuツールには、アセンブラ(ASコマンド)があるのですが、最も簡単な方法として、
      @Gccコマンドの'-S'オプションで、C言語(拡張子.c)のプログラムソースをアセンブラのソース(拡張子.s)に変換する。
      AGccコマンドにアセンブラのプログラム(拡張子.s)を入力すると、プログラムをアセンブルする。
      という方法で、MODファイルを作成し、SHマイコンで使用する事もできます。
      
      ●Gccコマンドのオプションの例(shマイコンの場合)

       @C言語プログラムから、アセンブラのソースを出力する(拡張子.s が作成される)

          sh−elf−gcc −S −c −m2 (プログラム名).c

           但し、−S:アセンブラを出力  −c:リンクはしない(リンカで行う) −m2:SH2固有の機能を指定する

アセンブラのソースを出力する例(Cygwin)

main.c

変換前のC言語プログラム

main.s

変換後のアセンブラプログラム


       Aプログラムをアセンブルする

          sh−elf−gcc −c −m2 (プログラム名).s

           但し、−c:リンクはしない(リンカで行う) −m2:SH2固有の機能を指定する

アセンブラのプログラムから、MODファイルを作成する例(Cygwin)

work.lzh

上記のサンプル(フォルダ全て)

 

  (1)ルーレットにしてみる1(SH7125F)

       上記、Gnuツール(C言語バージョン)のルーレットを、アセンブラにして、書き直しただけのプログラムです。
     回路等は、全てC言語バージョンで紹介したものと同じものを使用しました。
     SHのアセンブラは、コマンドが固定長で、LONG(32ビット)や、WORD(16ビット)の値を、引数の形式では書けない
     (データ形式で与える)ので、アセンブラで開発するのは大変な労力です。
     特に、LONG、WORD、Byteのデータを同時に扱ってしまうと、データアドレスの位置や内容を、詳細に意識する
     必要があります。

     このサンプルは、一般的なASコマンドでアセンブルしましたが、Gccコマンドを使っても問題はありません。

写真(上記、HEWで使ったものを、そのまま使用しています)

コンパイルイメージ ※makeと打つだけです

main.s

サンプル@ プログラムソースサンプル(SH7125F Gcc用  アセンブラプログラム)

work.lzh

サンプル@ 上記プログラムを含むフォルダー全て(SH7125F Cygwin/Gcc(AS)用  フォルダー全て)

 

  (2)

 

 

  4.知識ベースを作ってみる(SH7125F)

       SH7125で、簡単な知識ベースを作ってみました。

       ※この記事の詳細は、 「(別室)動く作品のページ」 にあります。



 ●実験ボード・タイプ2A(SH7125)

 

写真

    工事中





SH7144Fを使ってみる


SH7144Fは、ROM256Kバイト、RAM8Kバイトを積んだ32ビットの高性能なRISCプロセッサです。
動作スピードも50MHzと高速で、周辺モジュールも充実しています。
また、このCPUは、I/Oが豊富で、外部メモリーの増設(ROM/RAM)も容易にできます。

「SH7144」の写真   ※小型のSH7125に比べて大型で迫力があります

秋月電子のSH7144マイコンボードは、小型で安価で使いやすい
また、このCPUは、プログラムの書き換えが標準で10000回も可能であるようです
性能的にも、さすがに32ビットのCPUであるので、16ビット系のH8や、他の実験したCPUに比べて、圧倒的に優れています

簡単な実験なら、 「(別室)おまけのページ」 でも取り上げた「Interface」2006年6月号付録でも可能です
但し、このボードは現在では既に入手困難ですし、秋月電子のSH7144マイコンボードは安いので、
本格的に使用するなら、価格は秋月電子のボードとそれほど変わりません

「SH7144」のピン配置図  ※SH7144/SH7145ハードマニュアルより抜粋

 ●SH7144Fについて


  1.クロック発信器について

   ・システムクロック(φ)、周辺クロック(Pφ)から内部クロック(φ/2〜φ/8192、Pφ/2〜Pφ/1024)を生成します。

   ・クロック発振器は、発振器、PLL 回路、プリスケーラで構成されます。 

   ・クロックの上限は、φ=50MHz、Pφ=40MHzです。
 
   ・各モジュールの動作クロック
 
       φ  ;CPU、UBC、DTC、BSC、DMAC、WDT、AUD、ROM、RAM
       Pφ ;MTU、POE、SCI、I2C、A/D、CMT、H-UDI
 

「SH7144」のクロック発信器  ※SH7144/SH7145ハードマニュアルより抜粋


  2.MCU動作モードについて

   ・SH7144Fには、4 種類の動作モードと4 種類のクロックモードがあります。電源投入時は、パワーオンリセットが必須です。
    動作中にモードを変更してはいけません。また、下図の組み合わせ以外を指定してはいけません。
    プログラムの書き込みは、ブートモードでおこないます。 
   
    通常は、シングルチップモード(モード3)で使用し、プログラムはブートモードで書き込めばいいと思います。
 

動作モードの選択  ※SH7144/SH7145ハードマニュアルより抜粋
   

クロックモードの選択  ※SH7144/SH7145ハードマニュアルより抜粋





 ●実験ボード・タイプ1A(SH7144F)       ※秋月電子のマイコンボードを使用

 
   秋月電子で市販されている「SH7144Fマイコンボード」を使って、簡単な実験ボードを作ってみました。
   上記で紹介したSH7125Fでは、メモリーやI/O等が足りない人は、こちらのボードがお勧めです。
   また、SH7144Fは、必要ならメモリーの増設が簡単です。

写真   表面/表面(ボードを抜いたイメージ)/裏面

回路図   ※注意)SH7144Fの電源電圧は3.3Vです

秋月電子「SH7144Fマイコンボード」のピン配置 ※秋月電子の説明書より一部抜粋

クロックモードについて
ここで作成したサンプルは、全てクロックモード3(MD3、及びMD2ピンを'1'の状態)で作成されています。
※この指定をした場合、12.5MHzの水晶を使用した場合の上限スピード(φ:50MHz、Pφ:25MHz)になる。
これ以外の指定をした場合、プログラムが正常に動作しない可能性があります。

なお、特に指定がない場合、プログラムの実行は動作モード3(FWP、MD1、MD0ピンを全て'1'の状態)
プログラムの書き込みはブートモード(FWP、MD1を'0'、MD0ピンを'1'の状態)でテストしています。



  1.HEWによる開発(SH7144F)

  (1)ルーレットにしてみる1(SH7144F)

 
     簡単なプログラムを作ってみました。
 
     サンプル@は、任意の間隔でLEDの点燈が回転するだけです。
     サンプルAは、CMTモジュールを使ってタイマーを作ったもので、ほぼ1秒間隔でLEDの点燈が回転します。
     サンプルBは、CMTモジュールから割り込みをかけているもので、ほぼ1秒間隔でLEDの点燈が回転します。

     ※但し、割り込みを行う(サンプルB)ためには、HEWが自動的に作成する「intprg.c」及び、「resetprg.c」にも下記の修正が必要です。
       intprg.c; CMT0の割り込み発生時にシステムがコールするINT_CMT0_CMI0関数に、ユーザーが作成した関数を定義する
       resetprg.c;初期値は、割り込みを発生させる最小の割り込みレベルが'F'を超える ※Fは最大値なので、割り込みは発生しない
              なので、プログラム中の'INTC'で指定するレベルまで下げる  ※例えば、最小値の0まで下げれば、
              1以上の割り込みが有効になります


intprg.c、resetprg.c の修正イメージ  ※サンプルBを使用する場合のみ修正が必要

写真

回路図(パラレルポートDに、8個のLEDをつないだだけです)

26002020.c

サンプル@ (SH7144F HEW用  C言語プログラム)


26002021.c

サンプルA (SH7144F HEW用  C言語プログラム)


6002022.c

サンプルB (SH7144F HEW用  割り込み仕様 C言語プログラム)

intprg.c

サンプルB (SH7144F HEW用  割り込み仕様 C言語プログラム)

resetprg.c

サンプルB (SH7144F HEW用  割り込み仕様 C言語プログラム)





  (2)UARTを使ってみる(SH7144F)

 
     SH7144Fに内蔵されているSCIモジュールを使って、ハイパーターミナルにつないでみました。
     モード3で電源を入れると、メッセージを出力して、キーボードから入力された文字をターミナルに返します。
     パソコンとの接続は、プログラムの書き込みに使っているADM3202(TXD1,RXD1)をそのまま共通で使用しています。
     通信速度は、一般的な9600BPSにしてありますが、もっと高速にするなら、プログラム中のBRRの値を変えるだけです。
  
     サンプル@は、ハイパーターミナルからの文字入力を待って、出力するだけです。
     サンプルAは、受信割り込みを使用したバージョンです。
     但し、上記のルーレット同様、割り込みを行うバージョン(サンプルA)は、HEWが自動的に作成するファイル「intprg.c」、
     「resetprg.c」に下記の修正が必要です。

      intprg.c; SCI1の受信割り込み発生時にシステムがコールするINT_SCI1_RXI1関数に、ユーザーが作成した関数を定義する
      resetprg.c;初期値は、割り込みを発生させる最小の割り込みレベルが'F'を超える ※Fは最大値なので、割り込みは発生しない
            なので、プログラム中の'INTC'で指定するレベルまで下げる  ※例えば、最小値の0まで下げれば、1以上の割り込みが
            有効になります


intprg.c、resetprg.c の修正イメージ  ※サンプルAを使用する場合のみ修正が必要

写真(上記と全く同じ ※プログラム書き込み用の端子を、そのまま共通に使用しています)

ハイパーターミナルの画面イメージ

ハイパワーターミナルの設定(PICのページと同じにしてあります)

回路図(上記と全く同じ ※プログラム書き込み用の端子を、そのまま共通に使用しています)

6002030.c

サンプル@ (SH7144F HEW用  C言語プログラム)



main.c

サンプルA (SH7144F HEW用  割り込み仕様 C言語プログラム)

intprg.c

サンプルA (SH7144F HEW用  割り込み仕様 C言語プログラム)

resetprg.c

サンプルA (SH7144F HEW用  割り込み仕様 C言語プログラム)







  (3)A/Dコンバータを使ってみる(SH7144F)

 
     SH7144に内蔵されているA/Dコンバータを使ってみました。
     シングルチップモード(モード3)で電源を入れると、ハイパーターミナルにメッセージを出力して、AN0の電圧をmVで表示します。

     パソコンとの接続は、上記同様、プログラムの書き込みに使っているADM3202をそのまま共通で使用しています。
     接続条件等も、上記、UARTを使ったサンプルと同じです。
     入力電圧は0〜3.3Vの範囲で、かつ電源電圧以下(電源をつないでいない時に入力に電圧をかけてはいけない)
     にしないと、SH2マイコンが壊れるので、注意が必要です。
  

写真(実験で、AN0に測定電圧を入力してみました)

ハイパーターミナルの画面イメージ

回路図(実験なので、何の過電圧保護回路もつけていないので、入力電圧には充分な注意が必要です)

6002040.c

プログラムソースサンプル(SH7144F HEW用  C言語プログラム) 




  (4)PWMによるランプやモーターの制御(SH7144F)

 

    ただいま、準備中









  (5)I2CによるEEPのアクセス(SH7144F)

 

    ただいま、準備中







  2.Gccによる開発(SH7144F)

  (1)ルーレットにしてみる1(SH7144F)

       HEWで作ったルーレットと同じものをGccでも作ってみました。Makefile等は、インターフェース誌のものをそのまま使用しました。
     コンパイルは、Cygwin上で「Make」と打つだけです。
     ※詳細は、 ※「(別室)Cygwinのページ」「Gnuのクロス開発環境(gcc)について」を参照
     コンパイルが正常に終了するとmotファイルが作成されるので、このファイルをFDT等でSH7144マイコンに書き込みます。
     
     サンプル@は、任意の間隔でLEDの点燈が回転するだけです。
     サンプルAは、同じ機能のものを、CMTモジュールを使って作ってみたものです。
     サンプルBは、同じ機能のものを、CMTモジュールから割り込みをかけて動かしているものです。
     但し、割り込みを行う(サンプルB)は、「startup1.s」が他のバージョンとは異なるので注意が必要です。

      注)割り込みを行う(サンプルB)場合に「startup1.s」に必要な修正点(詳細はソースを参照)
        ・ベクターテーブルに、割り込み関数を定義します
          => CMT0の場合なら、0x240にCMT0割り込み関数(_int_cmi0)の定義を追記します
        ・割り込みが発生するシステムのレベルを下げる(デフォルト値では'F'[最大値]なので、割り込みが発生しない)
          => SRレジスタをロード、割り込みレベルを修正し、SRレジスタを更新するアセンブラの記述を追記します

写真(上記、HEWで使ったものを、そのまま使用しています)

回路図(上記、HEWで使ったものを、そのまま使用しています)

コンパイルイメージ ※makeと打つだけです

main.c

サンプル@ プログラムソースサンプル(SH7144F Gcc用  C言語プログラム)

work.lzh

サンプル@ 上記プログラムを含むフォルダー全て(SH7144F Cygwin/Gcc用  フォルダー全て)

main.c

サンプルA (SH7144F Cygwin/Gcc用 CMTタイマー仕様 C言語プログラム)

work.lzh

サンプルA 上記プログラムを含むフォルダー全て(SH7144F Cygwin/Gcc用 CMTタイマー仕様  フォルダー全て)

main.c

サンプルB (SH7144F Cygwin/Gcc用   割り込み仕様 C言語プログラム)

startup1.s

サンプルB (SH7144F Cygwin/Gcc用   割り込み仕様 startup1.sファイル)

work.lzh

サンプルB 上記プログラムを含むフォルダー全て(SH7144F Cygwin/Gcc用   割り込み仕様  フォルダー全て)



  (2)UARTを使ってみる(SH7144F)

       上記、HEWで作ったものと同じものをGccでも作ってみました。
     電源を入れると、メッセージを出力して、キーボードから入力された文字をターミナルに返します。
  
     サンプル@は、文字入力を待って、出力するだけです。
     サンプルAは、受信割り込みバージョンです。
     割り込みを行う(サンプルA)は、「startup1.s」が他のバージョンとは異なるので注意が必要です。

写真(上記、HEWバージョンと全く同じ)

ハイパーターミナルの画面イメージ(上記、HEWバージョンと全く同じ)

ハイパワーターミナルの設定(上記、HEWと全く同じ)

回路図(上記、HEWバージョンと全く同じ)

main.c

サンプル@(SH7144F Cygwin/Gcc用 C言語プログラム)

work.lzh

サンプル@ 上記プログラムを含むフォルダー全て(SH7144F Cygwin/Gcc用 フォルダー全て)



main.c

サンプルA(SH7144F Cygwin/Gcc用 C言語プログラム)

startup1.s

サンプルA(SH7144F Cygwin/Gcc用 「startup1.s」ファイル)

work.lzh

サンプルA 上記プログラムを含むフォルダー全て(SH7144F Cygwin/Gcc用 フォルダー全て)




  (3)A/Dコンバータを使ってみる(SH7144F)

       上記、HEWで作ったものと同じものをGccでも作ってみました。
     電源を入れると、ハイパーターミナルにメッセージを出力して、AN0の電圧をmVで表示します。
     入力電圧は0〜3.3Vの範囲で、かつ電源電圧以下(電源をつないでいない時に入力に電圧をかけてはいけない)
     にしないと、SHマイコンが壊れるので、注意が必要です。
  

写真(上記、HEWバージョンと全く同じ)

ハイパーターミナルの画面イメージ

回路図(実験なので、何の過電圧保護回路もつけていないので、入力電圧には充分な注意が必要です)

main.c

(SH7144F Cygwin/Gcc用 C言語プログラム)

work.lzh

上記プログラムを含むフォルダー全て(SH7144F Cygwin/Gcc用 フォルダー全て)

 




  (4)PWMによるランプやモーターの制御(SH7144F)

 

    ただいま、準備中






  (5)I2CによるEEPのアクセス(SH7144F)

 

    ただいま、準備中





  3.アセンブラによる開発(SH7144F)

  (1)ルーレットにしてみる1(SH7144F)

 

    工事中




  4.知識ベースを作ってみる(SH7144F)

       SH7144で、簡単な知識ベースを作ってみました。

       ※この記事の詳細は、 「(別室)動く作品のページ」 にあります。




  5.リアルタイムOS(μITRON)による開発(SH7144F)


   (1)TOPPERS/JSPを使ってみる(SH7144F)

    TOPPERS/JSPは、μITRON4.0に準拠したリアルタイムOSです。
    詳細は、 (別室)リアルタイムOS(μITRON系)で遊ぼう のページで説明しており、ここでは、簡単なサンプルプログラムの
    事例のみを取り上げています。

 

    a)ルーレットにしてみる@(SH7144F)

       MonamiのPizzaFactory3(評価版が Monamiのサイト より無償でダウンロードできる)を使って、TOPPERS/JSPを
      使った簡単なサンプルを作ってみました。 
      このサンプルは、2つのタスクを使って、2点のLEDが回転するだけです。

      選択したTOPPERS/JSPのプロジェクトタイプ「PizzaFactory JSP Kernel(sh2/cq7144)」は、インターフェース誌の基板に
      準拠していて、12MHzの水晶を使用する(秋月電子では12MHzの水晶を付けたボードも市販されている)ようになっていますが、
      実験では、12.5MHzの水晶で動かしても、UART通信では、この程度の通信速度の差はギリギリ許容範囲に収まるのか、
      通信の精度に問題は発生せず(私の環境でしかテストしていませんが)、タイマーに高精度を求めなければ、このまま使っても
      問題はおこりませんでした。
      なお、UARTの通信速度は38400BPSで、プロセッサの動作モードはモード2(モード3では動作しません)、書き込みは
      ブートモード(BSCのBR1により設定)なので注意が必要です。

PizzaFactory3の画面イメージ

PizzaFactory3.1を使った場合のプロジェクト作成イメージ
インターフェース誌面には、PizzaFactory3の説明しかありませんが、PizzaFactory3.1を使っても、操作はあまり変わりません。
プロジェクトの作成をすれば、あとは該当プログラムを修正して保存するだけで、その都度、自動的にビルドが開始され、
MOTファイルまで作成されるので、プログラムの開発では特別な操作は不要です。

まず、TOPPERS/JSPを導入するとついてくる開発用のテンプレート「sample1」をそのまま動かしてみました
実験では、12.5MHzの水晶でも、そのままUARTでの通信が可能でした
ハイパーターミナルを使用したが、通信速度は、38400BPSです

写真(上記、ルーレットと全く同じです)

回路図(上記、ルーレットと全く同じです)

ルーレットLEDの動き方
OSがタスクを切り替えるスピードは速いので、2つのLEDが同時に動いているように見えます

プログラムソース一覧
TOPPERS/JSPを導入するとついてくる開発用のテンプレート「sample1」のsample1.cのみ修正しています
ヘッダーファイルはHEWのヘッダーファイルをコピーして、そのまま使用しています

sample1.c

SH7144F PizzaFactory3用 C言語プログラム  ※sample1.cを修正します
本来は、ハードウエア依存部はソースを分けて書くべきです

iodefine.h

SH7144F PizzaFactory3用 C言語ヘッダー   ※iodefine.hを追加登録します  
HEWのヘッダーファイルをそのまま使用しています


 

    b)ルーレットにしてみる@(SH7144F)

       MonamiのPizzaFactory3を使わなかった場合のTOPPERS/JSPのサンプルも作ってみました。
       PizzaFactory3は使いやすいツールですが、基本操作は、こちらの方が簡単ですし、移植やカスタマイズも容易です。             
 

    工事中





 ●実験ボード・タイプ2A(SH7144F)       ※タイプ1Aのメモリー増設バージョン














第二章 SH−2(SH7125F/SH7144F)を使った電子工作


    工事中














PICのページへ戻る

ボタンを押すと、PICのページに飛びます。

メニューに戻る

ボタンを押すと、メニューのページに飛びます。