お世話になります。
現在、R8C/32GでUART2を使用しています。
エミュレータはE8a、開発環境はHEWで、問題なくデバッグできております。
今回、新たにUART0を追加で使用してみることになりました。
この場合、E8aでのデバッグは可能なのでしょうか?
よろしくお願い致します。
大丈夫だと思いますけど、、。2年ほど前にR8C32HでスイッチとポテンショとUART0からデータをもらってLEDとリレーを駆動し、一部の状態をUART0で送信するソフトウエアを作成したことがあります。設計とコーディングは簡単だったのでデバッグ作業はほとんどしませんでした。よって、UART0がらみのバグ発見がE8a+HEWで問題なくできるかは自信がありません。nojiさんはR8C32GのUART0とE8aで何か心配事があるのでしょうか?私には逆にそのあたりが気になります。
余談ですが、上記ソフトウエアの仕様に関してはボロボロで、お客様も実際に使わないと妥当性が分からないと言われ、弊社でも解釈の誤りがあり、頻繁にE8a+FDTBasicからのフラッシュへの書き込みを実行しました。その場でコードを直して、帰社してから設計書と仕様書を直す禁手オンパレードです。
kijoさん
早速のご回答ありがとうございます。経験された方のご意見が伺えて安心致しました。
>nojiさんはR8C32GのUART0とE8aで何か心配事があるのでしょうか?私には逆にそのあたりが気になります。
実は私は組み込み初心者でして、上記のものを前任者から引き継いで機能を追加しようとしております。
前任者の作成したIOポート表のPort1_4(TXD0)、Port1_5(RXD0)の部分に「PC接続用」との記述があり(この資料は完成形ではない可能性があるのですが)
そういえばエミュレータはどのピンを使用しているのだろう、まさかUART0なのでは?と的外れな方向に考えが走り
不安になって質問させていただいた次第です。
まずはとにかくやってみたいと思います。ありがとうございます。
nojiさんこんにちはNAKAといいます。
E8aのインターフェースは、MODEとRESETの専用端子なので、UARTは使えると思います。
P.S.
先日、温特が良くピンコンパチだったのでR8C23→R8C34Wに更新しましたがUART1が無くなり
UART2になってました。UART0とUART2なんてなんか変!
何故なんだろぉ~?????。
NAKAさん
ご回答ありがとうございます。
>E8aのインターフェースは、MODEとRESETの専用端子なので、UARTは使えると思います。
「E8aエミュレータ ユーザーズマニュアル別冊(接続時の注意事項) R8Cファミリ / R8C/3xシリーズ」を読み直しました。
E8aはMODEとRESET端子を使用しているのですね。いやはや、お恥ずかしい限りです。ありがとうございます。
私もUARTの番号付けにはかなり面食らいました。丸1日くらいはもやもやしていました。
今でも気になりますが、考えないようにしています。何か理由があるのであれば知りたいですよね。
チョコです。
NAKAさん。
それは,搭載されている機能の違いを数字で表しているからです。
同じ機能のUARTなら,NAKAさんの疑問はその通りなのですが,
機能が異なるUARTなので,UART0という機能とUART2という
機能の異なるUARTが搭載されているので,こんな表現になって
います。
チョコさん
いつもお世話になりますNAKAです。
つまらない疑問にお答えいただいて恐縮!!です。
確かに、UART2はUART0にはないIIC等の特殊機能などが追加されているのは理解しました。
では、同じ機能で複数チャンネルあった場合は、UART0-0とかになってしまうのだろうか?
と疑問に思ってしまうへそ曲がりなNAKAでした........笑)
UART1は調歩同期のみと機能が若干ちがうんですね!! へぇ~ 初めて知りました!
NAKAさん。正解ですよ。RL78G13は20,21ですから、........笑)。
今でも、UARTを用いたモニタープログラムやライターソフトが良く使われてます。秋月のAKI-H8/3664BP(SDIP)ボードはDSUB9ピンコネクタもついているのでエミュレータを購入しなくても非常にお手軽に遊べます。どうしても、人間は最初に覚えた手法を使いたくなります。勝手な予想ですが、「PC接続用」はそのような類ではないでしょうか?しかし、R8C/32のようにピン数に余裕の無いマイコンはエミュレータ必須です。わたくしも、カフェルネでR8C/M12Aを知り、また、裏技もお教えいただき、趣味の世界ではE8aさまさまでやってます。
こんにちはNAKAといいます。
ここR8CのフォーラムなのでRL78の話をしてはいけないかもしれませんが、僕も今年になって遅ればせながらRL78G14デビューしちゃいました。ちょいちょいとUARTのデバイスドライバー関数を作ってやろうと思いましたが、ローエンドの割にレジスタ設定がめちゃくちゃめんどくさいですね!!だってTXとRXの設定をそれぞれ分けてしなくちゃいけないし、ユニットやらチャンネルやら混乱しそうな分別があるし.....涙)
R8CはもちろんSH,M32R、RXやV850だって初期設定なんて数個のレジスタを設定すればいいだけなのに.......汗)
例えばV850E2-FG4-Lなんかだったら
URTE2CTL0 = 0x80
URTE2CTL2 = 0x0187; //ボーレート設定
URTE2CTL1 = 0x0103; //フォーマット設定
URTE2CTL0 = 0xE0; //動作設定
ICLMA2IT = 0x0003; //UARTE2=LMA2送信割込み許可
ICLMA2IR = 0x0003; //UARTE2=LMA2受信割込み許可
ICLMA2IS = 0x0003; //UARTE2=LMA2エラー割込み許可
こんな程度ですむのに
※でも端子のフィルタ機能がデフォルトでONされていてOFFにしないと受信できないという罠!がありますけど
RL78は.......................カットペーストするのも疲れるほどいっぱい設定が必要ですね!!
結局、電源入れてからUARTで送受信できるまで、丸一日かかちゃいました...........アホ?!
RL78は1週間程度しか触ってない、ど素人ですので今度本家RL78フォーラムでいろいろ教えてくださいね!!!
> RL78G13は20,21ですから、........笑)。
KIJOさん,それは,数字のルールがちょっと違います。
RL78のSAUの番号はハード的なものと,使い方での番号が
入り混じっていて,一筋縄ではいきません。
ハードからは,ユニット番号+チャネル番号(TAUはこれで
統一されています)で扱うべきです。
ところが,SAUでは,2チャネルをまとめて使用するUARTの
番号に合わせているので,余分な変換が必要になっています。
しかも,設定するときのレジスタの名称の番号はハードの番号
になるので対応を考慮するのが面倒です。
(なお,コード生成では,使い方での番号だけになります。)
NAKAさん。RL78の初期設定では,コード生成を活用してみて
ください。最初は細かなレジスタ設定は気にしないでいいです。
単純にコード生成すると,API関数まで生成されるので,私は
コード生成は初期設定だけにして,実際の制御部分はすべて
作成するようにしています。
なお,CS+のコード生成は,簡単に初期設定だけにできます。
(サンプルプログラム等の"RL78/G10でのCS+の注意事項"
の「(5)コード コード 生成の 生成の 便利な 便利な 設定」
を参考にしてください。)
japan.renesasrulz.com/.../213.aspx
RL78の方でお待ちしています。
チョコさんありがとうございます。
NAKAです。
どうも、ある程度レジスタの内容を理解しておかないと、何かあった時にお手上げになるような気がして落ち着かないのでついついハードマニュアルを見てゴリゴリやっちゃう性分です。ツールに助けてもらうとツールに使われているような気がして。考え方が古いんですね!
愚痴を聞いてください!
低消費電力なアプリで、せっかくRL78の環境整備したのに、上の方針転換(当初はRL78から上位のPCにデータを渡し、PCで解析する方針でしたが、マイコン側で解析することになった)のため、RL78⇒RX111になってしまいました。
なので、RL78は1週間触っただけの、ど素人のままです............涙!
同じような考えみなさんの参考になれば、下記にNAKAの初期設定を載せてみました。取りあえず通信できました。
記
/*************************************************************************
//関数名: fn_Init_SCI1(void)
//動作 : シリアル通信の初期化
//引数 :
//作成 : NAKA 15.01.22
//備考 : SCI1 ユニットm=0 チャンネルn=2TX n=3RX
// ***********************************************************************/
void fn_Init_SCI1(void)
{
SAU0EN = 1; //入力ククロックの供給 ※これをしないと制御レジスタの書き込み無視される P675
SPS0 = 0x0022; // 動作クロックをfCLK=20MHz/4 = 5MHzに分周
//送信側設定(TXD1 Unit:0,ch:2)
SMR02 = 0x0022; //UARTモード クロックck00を選択 送信
SCR02 = 0x8097; //送信のみ NONパリ 1stop 8bit ERR割り込みマスク
SDR02 = 0x8000; //ボーレート設定 BRR = (((fCLK/4)/(BR×2))-1)×2
//例)BR=38400bps ((5MHz/(38400×2))-1)×2≒0x80 ⇒ 0x8000
// BR=115200bps:0x2900
//SOL0 = 0x00; //シリアル出力レベル(0:反転しない)
//SO0 = 0x0F0F; //クロック"1" データ"1"
SOE0L.2 = 1; //チャンネル2は送信なので出力許可を行う
//PMC = 0xFC; //ポートモードコントロール デジタル設定 P697 必要なのか? マニュアルには無さそう?
PM0.0 = 0; //P00(TXD1)を出力に設定
P0.0 = 1; //TXD1端子有効化
//受信側設定(RXD1 Unit:0,ch:3)
SMR03 = 0x0122; //UARTモード クロックck00を選択 受信
SCR03 = 0x4097; //受信のみ NONパリ 1stop 8bit ERR割り込みマスク
SDR03 = 0x8000; //ボーレート設定 BRR = (((fCLK/4)/(BR×2))-1)×2
//例)BR=38400bps ((5MHz/(38400×2))-1)×2 = 0x80 ⇒ 0x8000
NFEN0.2 = 1; //ノイズフィルタON_RXD1の時はSNFEN10ビットを"1" P696
PM0.1 = 1; //P01(RXD1)を入力に設定
//割り込み設定するぞ!
STPR01 = 1; //プライオリティ設定 00:MAX(レベル0)~11:MIN(レベル3)
STPR11 = 0; //01:レベル1
STMK1 = 0; //送信_割り込みマスクレジスタ 0:割り込み処理許可
SRPR01 = 1; //プライオリティ設定 00:MAX(レベル0)~11:MIN(レベル3)
SRPR11 = 0; //01:レベル1
SRMK1 = 0; //受信_割り込みマスクレジスタ 0:割り込み処理許可
//送受信の許可
SS0 = 0x000C; //SS02(送信)、SS03(受信)を許可
//SS0L =0x0C; //上段のバイト指示例
}