« 超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (11) | メイン | 78Kソフト開発環境(1) 78Kマイコン書き込みプログラムのインストール »

超Low-EndマイコンRS08を使おう - MC9RS08KA2で音を出す (12)


モジュロ・タイマ用にソース・コードを書き直す

 前回決めた方針に従って、モジュロ・タイマを使うプログラムを作成します。

 今まで使ってきたプロジェクトのプログラムを変更するだけでもかまいませんが、 以下の説明では、 RS08C2という別のプロジェクトを作成して使用しています。 プロジェクトの作成に関する詳細は、今回は省略します。

 モジュロ・タイマを使う場合もプログラムの基本的な構成は同じになります。 変更が必要なのは、初期設定関数と時間待ち関数だけです。

#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */


//==============================================================
//  SOPTレジスタの設定
//==============================================================
const byte SOPT_INIT
    = 0b00100010;
//      |||||||+-- RSTPE=0  (PTA2をRESET*として使用しない)
//      ||||||+--- BKGDPE=1 (PTA3をBKGDとして使用する)
//      |||+++---- Reserved
//      ||+------- STOPE=1  (STOP命令を使用可能にする)
//      |+-------- COPT=0   (COPの周期)
//      +--------- COPE=0   (COP機能を使用しない)
//==============================================================


//==============================================================
//  MTIMCLKレジスタの設定
//  MTIMモジュールのクロックとして周波数250kHz、周期4usecの
//  クロックを使用します。
//==============================================================
const byte MTIMCLK_INIT
     = 0b00000100;
//       ||||++++-- PS=0100   (x16 プリスケーラを使用する)
//       ||++------ CLKS=00   (BUSCLKを使用する)
//       ++-------- Reserved
//==============================================================


//==============================================================
//  初期設定
//==============================================================
void initialize(void) {
  // TRIMレジスタを設定する
  ICSTRM_TRIM =
    ((const NV_ICSTRMSTR * __paged)CONVERT_TO_PAGED(0x00003FFA))
    ->Bits.TRIM;
  ICSSC_FTRIM =
    ((const NV_FTRIMSTR * __paged)CONVERT_TO_PAGED(0x00003FFB))
    ->Bits.FTRIM;

  SOPT = SOPT_INIT;    // SOPTレジスタを初期化する
  PTAD_PTAD0   = 0;    // ポートPTA0の初期出力値を設定する
  PTADD_PTADD0 = 1;    // ポートPTA0を出力に設定する
  MTIMCLK      = MTIMCLK_INIT; // MTIMCLKレジスタを初期化する
  MTIMMOD      = 99;   // タイマの周期を100に設定する
  MTIMSC_TSTP  = 0;    // タイマを起動する
}

//==============================================================
//  時間待ち
//==============================================================
void wait_moment(void) {
  // MTIMモジュールによる時間待ち
  while (!MTIMSC_TOF) ; // TOFフラグがセットされるのを待つ
  MTIMSC_TOF = 0;       // TOFフラグをクリアする
}

//==============================================================
//  出力を反転する
//==============================================================
void reverse_port(void) {
  // ポート出力を反転する
  PTAD_PTAD0 = ~PTAD_PTAD0;
}

//==============================================================
//  メイン関数
//==============================================================
void main(void) {

  EnableInterrupts; /* enable interrupts */
  /* include your code here */

  initialize();      //  初期設定
  for(;;) {
    wait_moment();   //  時間待ち
    reverse_port();  //  出力を反転する
  } /* loop forever */
  /* please make sure that you never leave main */
}

 次回は、プログラムの詳細について解説します。

田中範明

カテゴリ:

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/620

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

カテゴリ

会社案内
情報セキュリティおよび個人情報の取り扱いについて

コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。
コメントはそれぞれ投稿した人のものです。

Powered by
Movable Type 4.1