こんばんわ、天池です。
3069で4行LCDをバスドライブしようとして失敗している最中です。
めげたらMLにご相談に上がるかもしれません(^^;
> ルネサスの統一ヘッダーをご覧になれば判りますが、統一ヘッダーの中身は
> 構造体、共用体のオンパレードです。
どうもYellowSoftのコンパイラとの関係なのか分かりませんが、私はうまくこの
ヘッダファイルが使えないでいます。
例えば次で定義される2bitの領域CCLRに11を書きたいときは、
----------
union { /* TCR0 */
unsigned char BYTE; /* Byte Access */
struct { /* Bit Access */
unsigned char CMIEB:1; /* CMIEB */
unsigned char CMIEA:1; /* CMIEA */
unsigned char OVIE :1; /* OVIE */
unsigned char CCLR :2; /* CCLR */
unsigned char CKS :3; /* CKS */
} BIT; /* */
} TCR0;
----------
TCR0.BIT.CCLR = 3;
----------
で良いんだと思うんですが・・・どうも上手く書けていないようなので結局自作
のヘッダファイルを使っています。
====== 話は戻しまして =====
> (1) _ei();の中味は、SCI0.SCR.BIT.RIE=1;のことですね?
_ei();の中身は<sysio.h>を見れば分かりますが、CCRの最上位ビットを0にして
いるだけです。つまり全割り込み有効ですね。
しかし、これを有効にしても各個機能の割り込みを有効にしないと割り込みは発
生しませんので、混同しないように。
使う時には<sysio.h>をインクルードしてください。
> (2) #asm nop の意味は
CPUのPDFを見ると書いてありますが、「BRRを書いたあとは1bit時間以上待て」
と書いてるので単純にnop命令で1クロック分待っています。
「#asm [...]」はインラインアセンブラです。
# Cで書くだけで1ビット時間くらい経っていそうですが・・・(^^;
> (3) 割り込みを有効にする場所とタイミングは・・・
(1)のようにCCR最上位に0を書かない限りはシステム全体の割り込みは有効になっ
ていませんので、とりあえず
1. SCRでクロック原などの設定をする。
2. SMRの設定をする。
3. BRRの設定をする。(1ビット時間待つ)
4. SCRのRE(受信有効),RIE(受信割り込み有効)を1にする。
(送信もするならTE等も有効に)
...
そのほかの割り込み処理等の初期設定を全て終わらせた後、_ei();を実行する。
(ちなみに割り込み無効は_di();です)
> (4) メインルーチンでは、何か他の処理を(記述)していて、
> 受信したとき、割り込みルーチンが処理されると考えれば
> よろしいのですね。
そうです。食事をしているときに電話が来るのと同じですね。
電話し終わったら食事に戻ります。
# ラーメンが伸びたりしているとがっかりです。
===== 補足です =====
ちなみに3064のRXI0のベクタ番号は53のようです。
また、RIEを有効にすると受信エラー割り込み(REI0:52)も入ってくるようになる
ので、そちらも受けるようにしてエラーを解除します。
interrupt void ERI0_Interrupt {
SSR0 &= ~(0x38); // ORER FER PERのクリアで受け流し
}
# 丸入り数字は化ける可能性があるので使わない方が良いですよ。
-----
たんぱぁ@ShootingStarLAB(天池岳雄)
mail: tanpa@xxxxxxxxx
URL: http://www.ss-lab.com/