初心者のための RL78 入門コース ( 第 3 回 : ポート出力例 2 とポート入力 ) 第 3 回の今回は, 前回作成したプログラムを RL78/G13 のハードウェアを用いて見直しをお こないます 今回の内容 8. コード生成を利用した実際のプログラム作成 ( その 2) P40 9. コー

Similar documents
2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の )

スライド 1

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

1. 新規プロジェクト作成の準備新規プロジェクトのためのフォルダを用意して そこにプロジェクトを作成します [ 新しいフォルダー ] をクリックして希望のフォルダに新しいフォルダを作成します この例では TrST_F401N_BlinkLD2 というフォルダを作成しました TrST_F401N_Bl

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

スライド 1

スライド 1

Microsoft Word - Ladder Tool 使çfl¨ã…žã…‰ã…¥ã‡¢ã…«ã…©ã…•ã…¼ã†ªã†Š_ docx

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

1. 概念 STM32F4 Discovery 基板は Mini USB を接続して デバッグやプログラムの書き込みができるようになっています 通常は CPU の 0x 番地からプログラムを実行します では なぜわざわざこのプロジェクトの雛形を使用して CPU の 0x

Microsoft Word - VisualC++利用法2.doc

C#の基本

2.Picasa3 の実行 デスクトップの をダブルククリック 一番最初の起動の時だけ下記画 面が立ち上がります マイドキュメント マイピクチャ デスクトップのみスキャン にチェックを入れ続行 これはパソコン内部の全画像を検索して Picasa で使用する基本データを作成するものですが 完全スキャン

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

Microsoft PowerPoint - kougi7.ppt

Jan/25/2019 errata_c17m11_10 S1C17 マニュアル正誤表 項目 リセット保持時間 対象マニュアル発行 No. 項目ページ S1C17M10 テクニカルマニュアル システムリセットコントローラ (SRC) 特性 19-3 S1C17M20/M

2015/04/01 改定 オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカ

AN1526 RX開発環境の使用方法(CS+、Renesas Flash Programmer)

PowerPoint プレゼンテーション

次の病院 薬局欄は 氏名 欄に入力された値によって入力すべき値が変わります 太郎の行く病院と花子の行く病院が必ずしも同じではないからです このような違いを 設定 シートで定義しておきましょう 太郎の行く病院のリストを 太郎 花子の行く病院のリストを 花子 として 2 つのリストが定義されています こ

編集する ファイルを開く マイクロデータの設定を行うファイルまたはファイルを開きます 開かれたファイルは編集画面に表示されて ブラウザ表示した時のプレビューも同時に表示されます HTML ファイルの選択 編集する ファイルを開くためにメインメニューから ファイル 開く を選びます ファイル選択ダイア

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

目次 専用アプリケーションをインストールする 1 アカウントを設定する 5 Windows クライアントから利用できる機能の紹介 7 1ファイル フォルダのアップロードとダウンロード 8 2ファイル更新履歴の管理 10 3 操作履歴の確認 12 4アクセスチケットの生成 ( フォルダ / ファイルの

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

スライド 1

Microsoft PowerPoint - RL78G14_動画マニュアル_タイマRD.ppt [互換モード]

PowerPoint プレゼンテーション

産能大式フローチャート作成アドインマニュアル

目次 1. はじめに 準備 機器構成 やさしく名刺ファイリング Pro v.14.0 セットアップと動作確認 やさしく名刺ファイリング Pro v.14.0 セットアップ... 5 Windows Windows 8.

Microsoft Word - 実験4_FPGA実験2_2015

アーカイブ機能インストールマニュアル

スクールCOBOL2002

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

正転時とは反対に回転する これが逆転である 図 2(d) の様に 4 つのスイッチ全てが OFF の場合 DC モータには電流が流れず 停止する ただし 元々 DC モータが回転していた場合は 惰性でしばらく回転を続ける 図 2(e) の様に SW2 と SW4 を ON SW1 と SW3 を O

RW-4040 導入説明書 Windows 7 用 2017 年 7 月 シャープ株式会社

RW-5100 導入説明書 Windows7 用 2017 年 7 月 シャープ株式会社

CubePDF ユーザーズマニュアル

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

インテル(R) Visual Fortran コンパイラ 10.0

ST-LINK/V2-1 への Upgrade V /10/07 ST-LINK/V2-1 USB driver のインストールおよび ST-LINK/V2-1 の Upgrade について説明します ST-LINK/V2-1 USB driver をインストールしてから ST-LIN

PRONETA

<4D F736F F F696E74202D F56504E90DA91B1835C CC834E838A B838B837D836A B2E >

内容 1 はじめに インストールの手順 起動の手順 Enterprise Architect のプロジェクトファイルを開く 内容を参照する プロジェクトブラウザを利用する ダイアグラムを開く 便利な機能.

生存確認調査ツール

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード]

CR-USB 仕様書 株式会社測商技研 JS カード用データ転送用カードリーダー CR-USB 仕様書 取扱説明書 2012 年 07 月 31 日版 株式会社測商技研 1. 概要 本器は当社製自動観測装置で記録した JS カードデータ

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

Imation Encryption Manager Plus Imation Encryption Manager Plus ソフトウェアにより 対応 USB フラッシュドライブにパスワード保護に対応した総合セキュリティーを設定することができます Imation Encryption Manage

目次 第 1 章概要....1 第 2 章インストールの前に... 2 第 3 章 Windows OS でのインストール...2 第 4 章 Windows OS でのアプリケーション設定 TP-LINK USB プリンターコントローラーを起動 / 終了するには

Vista IE7 ブラウザの設定手順

目次 1.CALS システム利用から完了までの流れ 2 2. 納品データの登録 書類の提出 決裁 納品物を作る 5 3. 納品情報の入力 案件基本情報 書類納品情報 写真 図面等の納品情報 電子納品媒体作成 一括

AI1608AYUSB手順V3

Microsoft Word - macマニュアル【 】.doc

目次 初めに必ずお読みください ソフトウェアのインストール ソフトウェアの選択 ソフトウェアのインストール レシーバー用ドライバのインストール WindowsXP のインストール方法 Win

Studuinoライブラリ環境設定Mac編

ランタイム版 Pro 版共通 症例登録システム 2018/12/11 Q & A 目次 1. 起動時のエラー... 2 Q11. " ファイル jsgoe_data3.fmp12 を開くことができません" と表示されます (Windows) 2 Q12. ショートカットから起動できません (Wind

Microsoft Word - Mac版 Eclipseの導入と設定.docx

回路 7 レジスタ ( 同期イネーブル及び非同期リセット付 ) 入力データを保持するのに用いる記憶素子 使用用途として, マイクロプロセッサ内部で演算や実行状態の保持に用いられる Fig4-2 のレジスタは, クロック信号の立ち上がり時かつ 信号が 1 のときに外部からの 1 ビットデータ R をレ

目次 はじめに ツールのインストール ソフトウェアを起動する 画像ファイルの選択... 7 位置の調整... 8 背景色の設定 進捗バーの設定 パスワード設定 ユーザー情報の設定 設定

10_Link3_manual

ファームウェア書き換え説明書 目次 はじめに... 2 書き換え前に... 2 接続図... 2 書き換え手順... 3 (1) ファームウェアファイルの準備... 3 (2) 接続準備... 3 (3) ファームウェア書き換え準備 (4) ファームウェア書き換え準備 (

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

やってみようINFINITY-WingFan 編-

Microsoft Word - プリンター登録_Windows XP Professional.doc

スライド 1

(6) コンボドライブのドライブ文字の変更 コンピュータの管理 ウィンドウの右下側フレームの CD-ROM 0 DVD (E:) と書かれた箱 ( 図 02-2) にマウスのポインタを合わせ, 右ボタンをクリックしてメニューを表示する メニューから ドライブ文字とパスの変更 (C)... を選択する

Studuino ライブラリ環境設定Windows編

目次 No. 内容 メニュー名 ページ番号 事前準備 IEバージョン情報確認 互換表示設定 (IE9 IE0 IEの場合 ) 信頼済みサイトへの登録 (IE0 IEの場合 ) 4 受注データを (IE0 IEの場合 ) 6 5 リストを出力する為の設定 (IE0 IEの場合 ) 7 6 ( その)(

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

すると メインメニューと呼ばれる DC さくらのメインウィンドウ部が表示されます ( 下の画面がスクリーンシ ョットです ) メインメニューは ウィンドウ右上の ボタンを押すと閉じます リスト内のアイテムは ダウンロードのタスクを表します ダウンロード状況を把握できます メニュー項目やボタンの説明は

Microsoft PowerPoint - RL78G1E_スタータキットデモ手順_2012_1119修正版.pptx

【手引き】完了時の手続について

Capture の設定 以下のフォルダを開いてください. C: Program Files OrcadLite Capture 開いたフォルダにある Caputure というファイルをクリックして選択します. Capture を選択した状態で右クリックします.

ブラウザ Internet Explorer 7 の設定について 第3版

1. ST-LINK Utility のダウンロード Windows7 PC にインストールする場合について説明します 1.1. STMicroelectronics のサイト STMicroelectronics のサイトを開きます ここに ST-LINK と入力して検索します ( 右側の虫眼鏡を

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

1. パソコンに接続しているプロテクトキー (HASP) を外します 2.Microsoft Edge などのブラウザから のアドレスのホームページを起動します 3. 最新のプロテク

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴うアクセス方法の説明変更 2018/01/22 Mac 版インストール手順変更に伴う改訂

Windows2000/XPインストール手順

電子納品チェックシステム利用マニュアル

Windowsクライアントユーザーマニュアル_version+1_0_1_

変更履歴 版数変更日変更内容 /11/1 初版設定 /9/1 名称変更

クイック操作シート

A&D社製データロガーを初めてお使いになる方へ

Manager編

POWER EGG2.0 Ver2.8 スタートアップガイド ~Webデータベース 応用編~

DVD Flick の使用方法 那須シニアネット 三宅節雄 まず 使用の前に半角英数字名の作業用フォルダーを作っておきます これから DVD に焼き付ける動画ファイルも半角英数字名に変えておきます 1 デスクトップにある DVD Flick アイコンをダブルクリックして DVD Flick を起動し

セットアップマニュアル

1. LCD LS027B4DH01 について LS027B4DH01 は 400dot x 240dot のグラフィック LCD です 秋月電子通商で購入できます 外形サイズ : 62.8 x x 1.53mm LCD のフレキシブルケーブルの根元の部分はちょっと力を加えただけで表示が

電子13-06 エネメータ専用ソフト SAVER CAST for EneMeter Ver3.00設定方法.ppt

PitStop マル秘テク

目次 ① MX ONE インストール手順 P.3 ②メイン画面の見方 P.7 ③動画保存の方法 P.8 URL 検出でダウンロードする方法 P.8 自動ダウンロード機能 P.8 アドオン機能でダウンロード 録画する方法 P.9 URL 追加機能 P.11 番組機能 P.12 ④ MX ONE レコー

2 / 16 ページ 第 7 講データ処理 ブック ( ファイル ) を開く第 6 講で保存したブック internet.xlsx を開きましょう 1. [Office ボタン ] から [ 開く ] をクリックします 2. [ ファイルの場所 ] がデータを保存している場所になっている

DSP5Dアップグレードガイド

1. はじめに 本書は スプリット演算器 MFS2 用コンフィギュレータソフトウェア の取扱方法 操作手順 注意事項などを説明したものです Windows の操作や用語を理解している方を前提にしています Windows の操作や用語については それぞれのマニュアルを参照してください 1.1. MFS

厚生労働省版ストレスチェック実施プログラムバージョンアップマニュアル (Ver2.2 から Ver.3.2) 目次 1. プログラム概要 バージョンアップ実施手順 要注意 zip ファイル解凍の準備 Windows によって PC が保護されました と

Transcription:

初心者のための RL78 入門コース ( 第 3 回 : ポート出力例 2 とポート入力 ) 第 3 回の今回は, 前回作成したプログラムを RL78/G13 のハードウェアを用いて見直しをお こないます 今回の内容 8. コード生成を利用した実際のプログラム作成 ( その 2) P40 9. コード生成を利用したプログラム作成 ( ポート入力 ) P47 次回 ( 第 4 回 ) は, 以下の内容を予定しています これでポートの基本的な使い方はおしまい になる予定です 10. スイッチ入力とチャタリング対策 P56 11. スイッチ入力のチャタリングとノイズ対策 P61 ここまでで使用したプロジェクトは以下のフォルダに格納されています p. 39

8. コード生成を利用した実際のプログラム作成 ( その 2) 前回作成した, 下のプログラムで,LED チカチカは実現できましたが, 単にポートの設定を組み合わせただけです これで完成ではありません 更にシェイプ アップを行います 実行する前に, RL78_G13_PORT1_2 フォルダをコピーして RL78_G13_PORT1_3 の名前に変更し, これを使用します 8.1 ポート出力データの演算ポートに対して出力したデータ ( ビット データ ) に演算を行います ここで使うのは排他的論理和 (XOR) 演算です この新しいプログラムをビルドしてシミュレータにダウンロードします 下記のプログラムの赤く囲んだ部分がビットに対する XOR 演算部です 以下は参考です ここで, 表示ウィンドウが r_main.c となっているのを逆アセンブル表示に切り替えます ( 上側の 逆アセンブル 1 をクリックします ) p. 40

逆アセンブル表示で確認すると,13 個の命令に展開されています このプログラムでも, 一応正常に動作はしますが, あまりにコード効率が悪すぎます これ は, 最適化をデバッグ優先に設定したためです CC-RL の最適化を 既定の最適化を行う にしておくと, 以下のように 1 命令で済みます このように 1 命令 (3 バイト ) で実現できるのは, ポート 3 は 0xFFF03 番地に配置されていて, そこはショートダイレクト (saddr) 領域と呼ばれる領域だからです saddr 領域は 0xFFE20~0xFFF1F に配置されていて, 基本的には RAM ですが, 一部の内蔵周辺機能の制御レジスタ (SFR) も入っています saddr 領域に配置されていると, 加減算以外に論理演算も可能です つまり,RL78 はポートを制御する機能が強化されていることが分かります このように, 最適化で大きくコード効率が異なります ちょっと (?) 脇道にそれてしまいましたが, ポートに対する演算を行うことで,LED の ON 時間と OFF 時間を同じにできます このようにした理由は, もう一つあります ここまでは, ソフトウェアでの遅延を使ってきました これは, 同じプログラムでも処理系や最適化により遅延時間が異なります 例えば, 既定の最適化を行う の状態で実行させると,1 回のループは以下のように 180ms になってしまいます p. 41

これでは, デバッグ後に最適化レベルを変更するのにはちょっと抵抗があります そこで, ハードウェアにより時間待ちを行うことにします ハードウェアで時間測定を行うと, 処理系や最適化を変更しても影響は受けなくなります LED のドライブで使用している P31 にはタイマ 03(TM03) の入出力端子が割り当てられているので, 後のことを考えて,TM03 をインターバル タイマとして使用することにします インターバル タイマは指定された周期で割り込みを発生させる最も基本的な機能です インターバル タイマを使用するには, 割り込みを使用するのが必須です この段階では割り込みの詳しい話は省きます 単に, 割り込み処理プログラムで実行するとだけ覚えておいてください それでは, コード生成の機能を使ったインターバル タイマの使い方を示します 8.2 インターバル タイマの使い方コード生成で タイマ を選択すると, 右にタイマの 一般設定 を表示します 機能としては全てのチャネルが 使用しない となっています ここで, チャネル 3 の 使用しない の右のをクリックして機能の一覧を表示します そこで インターバル タイマ を選択します これで,TM03 はインターバル タイマで使用されます チャネル 3 を インターバル タイマ に設定したら, チャネル 3 タグをクリックしてチ ャネル 3 の設定画面を開きます p. 42

ディフォルトではインターバル時間は 100μs になっていますので, これを 200ms に変更し ます これ以外の設定はそのままにしておきます ここまでの設定が完了したら, コード生成 (G) をクリックしてコード生成を行います コード生成を行うと, プロジェクト ツリーの ファイル コード生成 の下に生成されたファイルが並びます 下に r_cg_timer.c r_cg_timer_user.c と r_cg_timer.h の 3 つのファイルが生成されています r_cg_timer.c は, タイマの初期設定を行う R_TAU0_Creat 関数,TM03 を起動するための R_TAU0_Channel3_Start 関数及び停止させるための R_TAU0_Channel3_Stop を含んでいます r_cg_timer_user.c には,TM03 の割り込み処理用の r_tau0_channel3_interrupt 関数があります r_tau0_channel3_interrupt 関数は, 以下のように入れ物だけが生成され, 実際の処理はユーザが記述するようになっています ここに, 割り込みで実行させたいプログラムを記述する それでは, プログラムを記述していきましょう p. 43

最初に, 割り込み処理部分を記述します インターバル タイマの割り込み処理では,P31 の出力を反転するだけです 下に示すように, 先ほど main 関数に記述した P31 出力を反転さ せる部分を割り込み処理に記述します 割り込み処理は, これだけです 次は,r_main.c ファイルの変更です ここでは, 大きく 2 つの部分を変更します まずは, R_MAIN_UserInit 関数に以下のように,TM03 を起動する処理を記述します 次に main 関数を変更します 実際には,main 関数では単にインターバル タイマ割り込み を待つだけです 下に示すように,main 関数は,while ループ中に NOP(); を書くだけです ファイルを変更したら, デバッグ (D) - ビルド & デバッグ ツールへダウンロード (B) とクリックして, ビルドとビルド結果をシミュレータにダウンロードします これで, ブレーク ポイントなし ( をクリック ) で実行させてみます p. 44

LED は点滅しますが, リアルタイムでの実行はできないので, 数秒周期で点滅するだけです 時間を含めて確認するには, やはり E1 で実機を動作させる必要があります (E1 で実行するプロジェクトは RL78_G13_PORT1_3_E1 フォルダに入れてあります ) このプロジェクトは, RL78_G13_PORT1_3 の名前で保存して, 終了します 8.3 方形波出力の使い方これまでは, インターバル タイマを使って割り込みで LED を点滅させました ここでは, 更に LED の点滅までハードウェアで処理させてみます プロジェクトを開いたら, コード生成の ポート - ポート 3 を選択し,P31 を 使用しない にします これは,P31 端子を TM03 の出力 (TO03) として使用するために, ポートとしての使用を止 めるためです 次に, タイマを選択して 一般設定 で チャネル 3 を 方形波出力 に変更します p. 45

チャネル 3 タグを開くと, 下のように 100μs となっているので, これを 200ms に変更しま す また, 割り込みは使用しないので, チェックを外します これで設定変更が完了したので, コード生成 (G) をクリックして, コード生成を行いま す デバッグ (D) - ビルド & デバッグ ツールへダウンロード (B) とクリックして, ビ ルドとシミュレータにダウンロードします, これで, ブレーク ポイントなし ( をクリック ) で実行させてみます 割り込み処理よりは若干速く LED は点滅するようになりました この方法では, 初期設定と起動だけでプログラムのオーバヘッドは一切ありません これは,CPU は別の処理にかかりっきりにできるということです p. 46

シミュレータ画面を表示してをクリックして, 実行を停止します その後, 右端のをクリックして, シミュレータを停止し,CS+ に戻ります このプロジェクトは RL78_G13_PORT1_4 の名前で保存して, 終了します 9. コード生成を利用したプログラム作成 ( ポート入力 ) 次は, 入力ポートによる入力プログラムです スイッチは,P50/INTP1 端子に接続してあります 通常は P50/INTP1 端子はハイ (1) で, スイッチを押すとロウ (0) になります このスイッチを使ったポート入力の例を示します 9.1 ポート入力での LED 制御最初に作成するプログラムは, スイッチが押されたら LED を点灯し, スイッチが押されていなければ,LED は消灯するという単純な制御を行うものです このために, ポートの入力と出力の2つの機能を使用します スイッチ LED p. 47

LED チカチカで作った最初のプログラム (RL78_G13_PORT1 ディレクトリ ) を基にしてプ ロジェクトを作成するので, ポート入力 ディレクトリに RL78_G13_PORT1 ディレクトリ をまるごとコピーして RL78_G13_PORT2 と名前を付けておきます RL78_G13_PORT1_1.mtpj ファイルをダブルクリックしてプロジェクトを開きます コード生成でポート 5 を入力に設定します 下に示すように, コード生成( 設計ツール ) - ポート を選択し, ポート 5 を選択します 初期状態では, 使用しない となっているので, 入力 を選択し, 内蔵プルアップ もチェックしておきます ポート 31 が 出力 になっていることを確認します これで, コード生成 (G) をクリックして, コードを生成します コード生成が終わったら,r_main.c ファイルを開きます main 関数に以下のようにプログラムを書きます p. 48

このプログラムでは, スイッチの状態を P50 で読み出し, その値を判定します その値が 0 なら,P31 を 0 にして LED を点灯し,0 でなければ P31 を 1 にして LED を消灯します この処理を while で無限ループしています 入力が完了したら保存します これをビルドして, シミュレータにダウンロードします シミュレータが起動したら, シミュレータ GUI ウィンドウを選択します GUI では, メニュ ーバーの 部品 (P) を選択して部品メニューから ボタン (B) を選択します 次に, 入出力パネル 1 でボタンを配置する場所をドラッグします ここでは, 左下に示すように,LED の下にボタンを作ります 右下に示すように, 作成した ボタンを右クリックしてメニューから プロパティ (R) を選択します p. 49

プロパティが表示されたら, ボタン端子接続 で, ラベル を SW に設定し, 接続端子 は P50/INTP1 を選択します アクティレベル は LOW を選択し, 種 は トグル, CPU リセット時 は インアクティブ にして, OK をプッシュして設定を完了します 本来は, プッシュなのですが,GUI では, 押したままの設定ができないので, 動作が分かり易いトグルに設定しています 設定が完了したら, シミュレータウィンドウでをクリックしてプログラムを実行します 実行を開始すると, シミュレータ GUI ウィンドウは左下の状態です ここで SW をクリックすると右下の状態になります 右下の状態で再度 SW をクリックすると左下の状態になります 確認ができたら, シミュレータウィンドウの右上ののをクリックして実行を停止します をクリックして, シミュレータを終了します CS+ に戻ったら, このプロジェクトは RL78_G13_PORT2_1 の名前で保存して, 終了します p. 50

保存したプロジェクトは, フォルダごとコピーし, RL78_G13_PORT2_2 のフォルダ名にに変更しておきます ポート ( スイッチ ) の状態でプログラムの処理を変えるという処理内容は満足しました なお, 上記のプログラムは個人的には好みではありません このような単純な処理であれば,if 文のような判断分岐処理は必要なく, 演算処理と言うか単にビットでの代入だけでも処理できます ( このプロジェクトは, RL78_G13_PORT2B フォルダに格納しています) 9.2 ポート入力での LED 制御 ( その 2) 上で作成したプログラムは, 単純な処理ですが, 常にポートの状態をチェックしているので, 省エネに反します とは言っても,CPU が 32MHz でフルに動作しても数 ma で,LED の点灯電流と殆ど変わりませんが RL78/G13 は, 複数の消費電力を削減する機能をもっています 動作クロックを低くすることも対策の一つですが, ここではスタンバイ機能 (HALT 機能 ) を使ってみます HALT(); を実行させることで,HALT 状態に入り,CPU は停止します HALT 状態から抜けるときには割り込みを使用します この方法は 9.1 ポート入力での LED 制御 で説明した方法にちょっと手を加えるだけで実現できます それでは, フォルダ RL78_G13_PORT2_2 の RL78_G13_PORT2_1.mtpj をダブルクリックして CS+ を起動します コード生成で ポート 5 を使用しない に設定します 下に示すように, コード生成( 設計ツール ) - ポート を選択し, ポート 5 を選択します 前回 入力 に設定していたものを 使用しないに に設定します(RL78/G13 としては問題ないのですが, コード生成の制限で端子機能は1つにする必要があるので ) p. 51

次に, 割り込み機能の設定を行います コード生成 ( 設計ツール ) - 割り込み を選択 します 下に示すように, 外部割り込み で INTP1 設定 をチェックし, 有効エッジ を 両エッジ に設定します ここまで設定したら, コード生成(G) をクリックして, コードを生成します コード生成された結果を右に示します この一番下の 3つが, 外部割り込み関係のファイルです r_cg_intc.c は,INTP1 の初期設定を行っている R_INTC_Create 関数 ( 他の INTP は禁止している ) と INTP1 の割り込み許可する R_INTC1_Start 関数と禁止する R_INTC1_Stop 関数を含んでいるファイルです r_cg_intc_user.c は, 割り込み処理を行う r_intc1_interrupt 関数の入れ物だけが生成されています この中身を以下に示します 今回は, 入れ物だけで中身は作りません それでは,r_main.c を開いて,main 関数に以下に示すように while ループの最後に HALT(); を追加します main 関数はこれだけです 次は,R_MAIN_UserInit 関数で R_INTC1_Start 関数を呼び出して INTP1 を許可します p. 52

変更が完了したら, ビルドしてシミュレータにダウンロードします これまでのように実行 すると, 同じように動作します 参考 ここで, 割り込みについて若干説明をしておきます RL78 では, 下図に示すように, 割り込み要因 (INTxx) は CPU に対する割り込み要求フラグ (xxif) をセットするために使用されます 割り込み要求フラグ (xxif) は, レジスタとして CPU から書き込んだり読み出したりすることができます xxif 信号は割り込みのマスク信号 (xxmk) でのマスク回路を経由して CPU へ伝えられます 割り込み要求フラグ xxif INTxx SET Q F/F CPU へ (xxif) xxmk 他の割り込み要求がない場合の各条件でのふるまいを以下の表に示します 条件スタンバイ ( ベクタ ) 割り込み備考 xxif xxmk IE 0 x x 保持なし割り込み要求なし 1 1 x 保持なし割り込みはマスク 1 0 0 解除なし割り込み禁止 1 0 1 解除受け付け割り込み処理割り込み許可 (IE=1) の状態で, マスクされていない (xxmk=0) 割り込み要求 (xxif=1) でスタンバイは解除され, ベクタ割り込みが処理 ( 受け付け ) されます すると, 以下のような動作を行います 1 実行中の PC と PSW はスタックにセーブされ 2 受け付けられた割り込み要求はクリアされ (xxif=0) 3 割り込み割り込み禁止 (IE=0) となりそれ以上の割り込み受け付けは禁止 4 受け付けた割り込みに対応するベクタで示される処理へ分岐します ここまでは, 全てハードウェアで処理されます この後, 割り込み処理関数として記述されたプログラムが実行されます CPU は, 割り込み処理を RETI 命令で終了します ( 割り込み処理関数では, 自動的に最後が RETI になります ) p. 53

ここで使用した, コード生成された割り込み処理関数は,2 つの部分から構成されます 1ベクトル定義部下記のように pragma 指令で,r_intc1_interrupt 関数を INTP1 のベクタとして関係付けしています 2 割り込み処理関数部 コード生成されただけでは, 以下のように割り込み処理関数の中身はありません しかし, ビルド結果をシミュレータで逆アセンブル表示すると,r_intc1_interrupt 関数には, RETI 命令が存在します つまり,INTP1(P50/INTP1) 端子の信号の立下りと立ち上がりエッジを検出して, 割り込み要求が発生すると, スタンバイ (HALT 状態 ) が解除され,PC と PSW がセーブされ, 割り込み要求がクリアされて,r_intc1_interrupt 関数が実行されます 関数には何も記述されてないので,RETI 命令だけが実行され,HALT() の次に戻り,while ループを繰り返すします そこで端子の状態をポートとして読み出して LED を制御して再度 HALT 状態に入ります ( このプロジェクトのシミュレータ用は, RL78_G13_PORT2_2 フォルダにあります E1 用は, RL78_G13_PORT2_2_E1 フォルダにあります 前ページの表を眺めると, 割り込み禁止でもスタンバイを解除できます つまり, 同じような動作ができるように思われますが, 少し注意が必要です それは, 割り込み要求フラグ (PIF1) の扱いです 割り込み許可状態で実行させた場合には, 割り込みを受け付けた段階で PIF1 はクリアされますが, 割り込み禁止ではクリアされません この状態で HALT() を実行しても, 直ぐに HALT モードが解除されてしまいます これに対処するには,HALT() を実行するまでに PIF1 をクリアします 割り込み禁止状態での処理プログラムを RL78_G13_PORT2_2B フォルダに作成しておきます 割り込み許可状態のプログラムとの違いは,main 関数だけです main 関数の内容を示します p. 54

違いは 2 箇所だけです while ループの前に割り込みを禁止するための DI(); を追加したこと と,HALT(); の直前に PIF1 = 0; を追加したことです 思い通りの動作をしているかは, 追加した PIF1 = 0; にブレーク ポイントを設定し, ブレーク ポイント付きで実行させることで確認可能です ダウンロード後にをクリックして,1 回実行させると, すぐにブレークします ( この状態が上の図になります ) 再度をクリックすると, 今度は実行状態のままになります この状態は HALT モードで CPU は停止しています ここで, シミュレータ GUI ウィンドウで SW をクリックすると LED が点灯して, ブレークが掛かります このことから,SW の状態が変化するまでは停止していることが分かります このプログラムのプロジェクトは RL78_G13_PORT2_2B フォルダに保存してあります (E1 用は RL78_G13_PORT2_2B_E1 フォルダになります ) 実際の機械式のスイッチには, 切り替わるときに数十 ms 程度接触する部分が機械的に振動することで,ON-OFF が切り替わっていくチャタリングがつきものです 次回は, タイマを用いたチャタリング対策です チャタリング対策をした上で, いくつか SW を使ったプログラムを作っていく予定です 以上 p. 55