Renesas Community
Search Community
User
Join or sign in
Site
Search Community
User
Renesas Engineering Community
FAQ
HELP
More
Cancel
Forums & Groups
English Community
中文社区(Chinese Community)
More
Cancel
かふぇルネ
forums-groups
Microcontrollers and Microprocessors
RX MCU
More
Cancel
RX MCU
Forum
RX621マイコンでのSCI通信について
Home
Forum
Tags
More
Cancel
New
Replies
39 replies
Subscribers
457 subscribers
Views
51186 views
Users
0 members are here
void
char
InitSci2
unsigned
SCI2.SSR.BIT.RDRF
sendData
int
key
dmy
Options
Share
More
Cancel
Related
RX621マイコンでのSCI通信について
_moto
over 10 years ago
お世話になります _motoです。
以前、シリアル通信についての質問をさせて頂きました。
SCIポートの作成もして、SCI通信をしようとしているのですが、思うように動作しません。
環境
・windows7
・RX621マイコン
・開発環境 HEW
・シリアル通信 テラターム
・通信 PC⇒RS232C⇒マイコンのSCIポート
動作
PCで数値を入力する
↓
その数値に応じた値を8bitLEDに表示
例)数値5 ⇒ LLLL\,LHLH
以下に、作成したプログラムを添付します
#include \”iodefine.h\”
#include <machine.h>
void InitSci2();
void sendData(char key);
void main(void){
int RData\,RDatax;
clrpsw_i();
//割り込みマスク変更禁止
InitSci2();
//SCI2の初期化
PORTA.DDR.BYTE = 0xFF;
//出力ポート
while(1){
if(SCI2.SSR.BIT.RDRF){
//受信できたらフラグが立つ
SCI2.SSR.BIT.RDRF = 0;
//受信フラグを解除
RData = SCI2.RDR;
//受信データをRDataに格納
sendData(RData);
//受信データをそのまま送信
RDatax = RData & 0x0F;
//受信データのマスク
PORTA.DR.BYTE = RDatax;
//マスクをかけたデータをLEDに表示
}
}
}
void InitSci2(void){
unsigned int dmy;
//初期設定
IOPORT.PFFSCI.BIT.SCI2S = 0;
//SCI2の使用設定
SCI2.SCR.BYTE = 0;
//シリアルコントロールレジスタ(SCIの送信/受信動作設定)
SCI2.SMR.BYTE = 0;
//シリアルモードレジスタ(SCIの通信フォーマットの設定)
SCI2.BRR = 80;
//9600bps
for(dmy = 280;dmy > 0;dmy--);
//Wait 1bit transfer time 時間稼ぎ
//動作開始設定
SCI2.SCR.BYTE = 0x70;
SCI2.SSR.BYTE &= 0x80;
}
void sendData(char key){
while(!SCI2.SSR.BIT.TDRE);
//送信完了まで待機
SCI2.TDR = key;
//送信データの格納
SCI2.SSR.BIT.TDRE = 0;
//送信フラグを立てる
}
小さな間違いでも構いませんので、ぜひご指導のほどよろしくお願い致します。
Parents
Higetaka
over 10 years ago
RX62NでのSCIサンプルを添付しました。
テキストを貼付けると長くなるので、PDFにしてあります。
部分的にテキストコピーできると思います。
サンプルはInterface誌の付録ボードで動作確認したものです。
通信エラー処理は入っていません。
SCI1を使用しているので、SCI2に置き換えてみて下さい。
RX621でも、ボードのクロックにあわせて変更するだけで動作すると思います。
ハードが正常なら、ソフトでてっとりばやく動かすポイントは
1) まずはエラーを無視する。
2) SSR(ステータスレジスタ)に書き込まない。
だと思います。
SSRレジスタのTDRE\,RDRFビットは、ハードウェアマニュアルを見ると、「注2 書く場合'1'として下さい」という理解に苦しむ注が書いてあります。そのため、0を書き込む場合はどうするの?という疑問が湧いてきます。
SCIの章を読んでいると、TDRE\,RDRFはTDR\,RDRを書いたり読んだりする事で更新されるだけのような書き方となっています。しかし、エラービットORER\,FER\,PERはクリアしろとなっており、ちょっとややこしいです。ORER\,FER\,PERを更新する場合はTDRE\,RDRFに影響を与えないように、ビット単位でクリアした方が良いかもしれません。
私が参考にしたのは、ルネサスのアプリケーションノート
「RX62N、M16C/62P SCI移行ガイド」
です。(ルネサスのサイトから入手できます)
このドキュメントのM16Cの所は無視して、RX62Nのところだけ参考にすれば良いと思います。(特に初期化部分)
なお、このドキュメントでは、SSRのTDRE\,RDRFビットを使わずに、割り込みコントローラのIRビットを使って、同様の処理を実現しています。
添付のソース(PDF)では、USE_IRシンボルを定義するとIRを使用し、未定義だと、TDRE\,RDRFを使用します。
ちなみに、RX63系ではTDRE\,RDRFビットが廃止されており、IRを使うと、ポーリング動作が実現できると思います。
(先ほどのドキュメントでは、ポーリングではなく、割り込みを推奨すると書いてありましたが...)
9mEHjQfhZecbYRu3_A0452.pdf
Cancel
Up
0
Down
Reply
Cancel
Reply
Higetaka
over 10 years ago
RX62NでのSCIサンプルを添付しました。
テキストを貼付けると長くなるので、PDFにしてあります。
部分的にテキストコピーできると思います。
サンプルはInterface誌の付録ボードで動作確認したものです。
通信エラー処理は入っていません。
SCI1を使用しているので、SCI2に置き換えてみて下さい。
RX621でも、ボードのクロックにあわせて変更するだけで動作すると思います。
ハードが正常なら、ソフトでてっとりばやく動かすポイントは
1) まずはエラーを無視する。
2) SSR(ステータスレジスタ)に書き込まない。
だと思います。
SSRレジスタのTDRE\,RDRFビットは、ハードウェアマニュアルを見ると、「注2 書く場合'1'として下さい」という理解に苦しむ注が書いてあります。そのため、0を書き込む場合はどうするの?という疑問が湧いてきます。
SCIの章を読んでいると、TDRE\,RDRFはTDR\,RDRを書いたり読んだりする事で更新されるだけのような書き方となっています。しかし、エラービットORER\,FER\,PERはクリアしろとなっており、ちょっとややこしいです。ORER\,FER\,PERを更新する場合はTDRE\,RDRFに影響を与えないように、ビット単位でクリアした方が良いかもしれません。
私が参考にしたのは、ルネサスのアプリケーションノート
「RX62N、M16C/62P SCI移行ガイド」
です。(ルネサスのサイトから入手できます)
このドキュメントのM16Cの所は無視して、RX62Nのところだけ参考にすれば良いと思います。(特に初期化部分)
なお、このドキュメントでは、SSRのTDRE\,RDRFビットを使わずに、割り込みコントローラのIRビットを使って、同様の処理を実現しています。
添付のソース(PDF)では、USE_IRシンボルを定義するとIRを使用し、未定義だと、TDRE\,RDRFを使用します。
ちなみに、RX63系ではTDRE\,RDRFビットが廃止されており、IRを使うと、ポーリング動作が実現できると思います。
(先ほどのドキュメントでは、ポーリングではなく、割り込みを推奨すると書いてありましたが...)
9mEHjQfhZecbYRu3_A0452.pdf
Cancel
Up
0
Down
Reply
Cancel
Children
No Data