RX62NのUSB機能を使用してRX62NをCDCデバイスにするプログラムです。基本となる部分はルネサスエレクトロニクスのサンプルプログラムを利用しました。
関数化してあるので簡単に使用することができます。
e2 studioのエクスポートしたプロジェクト
サンプルプログラム
関数化してあるので簡単に使用することができます。
e2 studioのエクスポートしたプロジェクト
サンプルプログラム
- #include <stdio.h>
- #include <stdlib.h>
- #include <machine.h>
- #include "iodefine.h"
- #include ".\USBStack\usb_hal.h"
- #include ".\USBStack\CDC\usb_cdc.h"
- void _INIT_IOLIB( void ); //プロトタイプ宣言
- int main(void)
- {
- int data;
- unsigned char c,buf[256];;
- SYSTEM.SCKCR.BIT.ICK = 0x00; //システムクロック x16 96MHz
- SYSTEM.SCKCR.BIT.PCK = 0x01; //周辺クロック x4 48MHz
- SYSTEM.SCKCR.BIT.BCK = 0x01; //外部バスクロック x4 48MHz
- /*Initialise the USB CDC Class*/
- USBCDC_Init();
- setpsw_i(); //割込み許可 clrpsw_i()割込み禁止
- _INIT_IOLIB(); // printf(),scanf()の初期化
- while(false == USBCDC_IsConnected()); //USB接続待ち
- c = charget(); //ホストから1文字入力
- printf("RX62N USB cdc test program.\n");
- while(1)
- {
- c = charget(); //ホストから1文字入力
- charput(c); //ホストに1文字出力
- printf("Input string:");
- scanf("%s",buf);
- printf("string: %s\n",buf);
- }
- }
RX210のタイマMTU0を使用してをMTIOC0A端子(PORT3-BIT4)から一定周波数の矩形波を出力するプログラムのサンプルです。
- #include "iodefine.h"
- #include <machine.h>
- #define PCLK 125 // 周辺機器のクロック設定 125kHz
- /*
- タイマの設定
- */
- void initMTU0cmt(void)
- {
- SYSTEM.PRCR.WORD = 0x0A502;
- MSTP(MTU0) = 0; //MTU0 モジュールスタンバイ解除
- SYSTEM.PRCR.WORD = 0x0A500;
- /* 端子の設定 */
- PORT3.PODR.BIT.B4 = 0; // P34 MTIOC0A 出力初期値
- PORT3.PDR.BIT.B4 = 1; // P34 出力設定
- PORT3.PMR.BIT.B4 = 0; // P34ポートとして使用
- MPC.PWPR.BIT.B0WI = 0; // PFSWE書き込み可
- MPC.PWPR.BIT.PFSWE = 1; // PFSレジスタへの書き込み可
- MPC.P34PFS.BIT.PSEL = 1; // P34をMTIOC0Aとして使用
- MPC.PWPR.BIT.PFSWE = 0; // PFSレジスタへの書き込み禁止
- PORT3.PMR.BIT.B4 = 1; // P34周辺機器として使用
- /* MTUタイマの設定 */
- cycle = PCLK * 1000UL / 1000UL / 2UL;
- MTU.TSTR.BIT.CST0 = 0x00; //MTUカウント停止
- MTU0.TCR.BIT.TPSC = 0x00; // CLK PCLK/1 でカウント
- MTU0.TCR.BIT.CCLR = 0x02; //TCNT0はTGRBのコンペアマッチでクリア
- MTU0.TMDR.BIT.MD = 0x00; //タイマーノーマルモード
- // 出力波形の設定
- MTU0.TIORH.BIT.IOA = 0x03; // MTIOC0A初期出力はLow出力コンペアマッチでトグル出力
- // MTU0.TIORH.BIT.IOA = 0x00; // MTIOC0A 出力禁止
- MTU0.TIORH.BIT.IOB = 0x00; // MTIOC0B 出力禁止
- MTU0.TGRA = 0; //出力ON-OFFのタイミング
- MTU0.TGRB = 0; //周波数の設定
- MTU0.TCNT = 0; //カウンタクリア
- MTU.TSTR.BIT.CST0 = 0x00; //タイマ停止
- }
- /*
- 波形の出力
- 引数 周波数
- */
- void setFrequency(int Frequency)
- {
- int sycle;
- if(Frequency == 0) {
- MTU.TSTR.BIT.CST0 = 0x00; //タイマストップ
- } else {
- sycle = PCLK * 1000UL / Frequency / 2UL;
- //MTU0.TCNT = 0; //カウンタクリア
- MTU0.TGRB = sycle;
- MTU.TSTR.BIT.CST0 = 0x01; //タイマスタート
- }
- }
- void main(void)
- {
- unsigned int n=0;
- /* クロックは速いほうが正確な周波数になる */
- //change_oscillation_PLL(); // クロックソースPLL
- initMTU0cmt();
- setFrequency(1000); // 1kHz出力
- while(1) {
- /* ハードウェアで波形出力するのでプログラムでは何もしなくてもよい */
- }
- }
開発環境はe2 studioでルネサスエレクトロニクス製のCコンパイラを使用しています。やはりprintf()が使えると開発に便利なのでprintf()を動作させる方法を調べてみました。
printf()ないでmalloc()を使用しているらしくヒープ領域が必要です。プロジェクト生成のウィザードでヒープ領域を設定します。どのくらい必要かは調べていません。

次に示すコードlowsrc.cを追加します。このファイルの最後に1文字分の入出力を行う関数charput(),charget()にコードを追加します。lowsrc.cはHEW開発環境では自動的に生成されるらしいです?。
main()関数かreset_program.c()内でlowsrc.cファイル内の入出力初期化用の関数_INIT_IOLIB()を呼び出します。
lowsrc.c
printf()ないでmalloc()を使用しているらしくヒープ領域が必要です。プロジェクト生成のウィザードでヒープ領域を設定します。どのくらい必要かは調べていません。

次に示すコードlowsrc.cを追加します。このファイルの最後に1文字分の入出力を行う関数charput(),charget()にコードを追加します。lowsrc.cはHEW開発環境では自動的に生成されるらしいです?。
main()関数かreset_program.c()内でlowsrc.cファイル内の入出力初期化用の関数_INIT_IOLIB()を呼び出します。
- void _INIT_IOLIB( void );
- main()
- {
- _INIT_IOLIB();
- .
- .
- printf("Hello world!\n");
- .
- .
- }
lowsrc.c
マイコンはarduinoをよく使用します。本体を使いまわせば良いのですが、何かの機器に組み込む場合、1台あたりの値段が結構かかります。AVRマイコン自身は安価なので、なるべく安く組み込めるように考えてみました。
書き込み器とマイコンを分け、マイコン部分を少ない部品で作ることとしました。
マイコン部回路

これだけシンプルになりました。水晶振動子を使用していないのでクロックは内臓の8MHzとなります。また、電源電圧は2.7V~5Vの間で自由に使えます。
書き込み器回路図

マイコン部をシンプルにしたために書き込み器に細かい回路が来ています。書き込み器は使いまわしがきくので問題ないでしょう。ピン配置はaitendoで取り扱っているUSB-TTL変換キットと同じにしました。このキットでも書き込みできると思います。
使用時の写真

ブートローダーの設定
ATmega168 ATmegaBOOT_168_pro_8MHz.hex arduinoをインストールしたフォルダの中にあります。
ヒューズビット EXTENDED:0xF8 HIGHT:0xFD LOW:0xE2 LOCKBIT:0xCF
ATmega328 ATmegaBOOT_168_atmega328_pro_8MHz.hex arduinoをインストールしたフォルダの中にあります。
ヒューズビット EXTENDED:0xFD HIGHT:0xDA LOW:0xE2 LOCKBIT:0xCF
IDEでの設定
IDE上ではArduino Pro or Pro Miniを選びます。

参考サイト
Arduinoのヒューズ設定
あちゃんでいいの
書き込み器とマイコンを分け、マイコン部分を少ない部品で作ることとしました。
マイコン部回路

これだけシンプルになりました。水晶振動子を使用していないのでクロックは内臓の8MHzとなります。また、電源電圧は2.7V~5Vの間で自由に使えます。
書き込み器回路図

マイコン部をシンプルにしたために書き込み器に細かい回路が来ています。書き込み器は使いまわしがきくので問題ないでしょう。ピン配置はaitendoで取り扱っているUSB-TTL変換キットと同じにしました。このキットでも書き込みできると思います。
使用時の写真

ブートローダーの設定
ATmega168 ATmegaBOOT_168_pro_8MHz.hex arduinoをインストールしたフォルダの中にあります。
ヒューズビット EXTENDED:0xF8 HIGHT:0xFD LOW:0xE2 LOCKBIT:0xCF
ATmega328 ATmegaBOOT_168_atmega328_pro_8MHz.hex arduinoをインストールしたフォルダの中にあります。
ヒューズビット EXTENDED:0xFD HIGHT:0xDA LOW:0xE2 LOCKBIT:0xCF
IDEでの設定
IDE上ではArduino Pro or Pro Miniを選びます。

参考サイト
Arduinoのヒューズ設定
あちゃんでいいの