RXマイコンのCAN通信のWORDデータについて

はじめまして、ODAと申します。
RL78マイコンをCS+ for CA,CXを使ってプログラムを作成してきましたが、今回、初めて
RXマイコンをCS+ for CCを使ってプログラム作成にチャレンジして、つまずいております。
CAN通信において、RL78ではBYTEデータでもWORDデータでも簡単に処理できましたが、

RL78の送信データの事例
TMDF00L = 0x01;  //BYTEデータ
TMDF00H = 0x23;  //BYTEデータ
TMDF10 = 0x4567; //WORDデータ
TMDF20 = 0x89AB; //WORDデータ

RXにおけるWORDデータの処理方法がわかりません。
事例として、動作確認済みのBYTEデータの送信プログラムを記載します。

CAN0.MCTL[0].BYTE = 0x00;    // 送信準備
CAN0.MB[0].ID.BIT.SID = 0x777;
CAN0.MB[0].DLC = 8;
CAN0.MB[0].DATA[0] = 0x01;  //BYTEデータ
CAN0.MB[0].DATA[1] = 0x23;
CAN0.MB[0].DATA[2] = 0x45;
CAN0.MB[0].DATA[3] = 0x67;
CAN0.MB[0].DATA[4] = 0x89;
CAN0.MB[0].DATA[5] = 0xAB;
CAN0.MB[0].DATA[6] = 0xCD;
CAN0.MB[0].DATA[7] = 0xEF;
CAN0.MCTL[0].BYTE = 0x80;    // 送信リクエスト
// 送信完了待ち
while (CAN0.MCTL[0].BIT.TX.SENTDATA != 1){};

ユーザーズマニュアルのメールボックスの説明に
「DATA0~DATA3、あるいはDATA4~DATA7を32ビット単位で一度にアクセスすることはできません。
DATA0~DATA1、DATA2~DATA5、DATA6~DATA7の3回、または、DATA0~DATA1、DATA2~DATA3、
DATA4~DATA5、DATA6~DATA7の4回に分けてアクセスしてください。」
と記入されていますので、WORDデータの処理も可能と考えますが、具体的なアクセス方法(プログラム)
を教えて頂きたく、よろしく、お願い致します。

勝手に下記の内容で、チャレンジしましたが、エラーとはなりませんが、正確なデータは送信できませんでした。
CAN0.MB[0].DATA[01] = 0x0123;  //WORDデータ

Parents
  • odawaraさん、こんにちは。NoMaYです。

    > RXのユーザーズマニュアルのメールボックスの説明につきましては、疑問が残りますが、

    この疑問が残る点なのですが、こういうことではないだろうか、と私は思います。

    ● ユーザーズマニュアルは C言語+iodefine.h(の構造体) でプログラムを作る人に向けてだけ書かれたものではなくて、iodefine.h(の構造体)を使わない人やアセンブラ言語を使う人(今は全てアセンブラというのはレアケースと思いますのでアセンブラ言語を併用する場合)も対象としている為、iodefine.h(の構造体)では簡単/素朴には出来ないことでも、マイコンのハードウェア上そういうことも出来ます、ということで記載されたものではないでしょうか。

    ● ですが、普段から C言語+iodefine.h(の構造体) でプログラムを作っている人からすれば、(無意識の前提として C言語+iodefine.h(の構造体) ありきで→)「それは出来ないのでは?ん?出来るのか?どうやって?」という戸惑いに繋がった、ということではないでしょうか。

    ● もっとも、ユーザーズマニュアルで注意を喚起したかったのは、iodefine.h(の構造体)を使わない人やアセンブラ言語を併用する場合、きっとその人がついやってしまいがちな以下のアクセスはマイコンのハードウェア上出来ないですよ、ということですよね。

    「DATA0~DATA3、あるいはDATA4~DATA7を32ビット単位で一度にアクセスすることはできません。」

Reply
  • odawaraさん、こんにちは。NoMaYです。

    > RXのユーザーズマニュアルのメールボックスの説明につきましては、疑問が残りますが、

    この疑問が残る点なのですが、こういうことではないだろうか、と私は思います。

    ● ユーザーズマニュアルは C言語+iodefine.h(の構造体) でプログラムを作る人に向けてだけ書かれたものではなくて、iodefine.h(の構造体)を使わない人やアセンブラ言語を使う人(今は全てアセンブラというのはレアケースと思いますのでアセンブラ言語を併用する場合)も対象としている為、iodefine.h(の構造体)では簡単/素朴には出来ないことでも、マイコンのハードウェア上そういうことも出来ます、ということで記載されたものではないでしょうか。

    ● ですが、普段から C言語+iodefine.h(の構造体) でプログラムを作っている人からすれば、(無意識の前提として C言語+iodefine.h(の構造体) ありきで→)「それは出来ないのでは?ん?出来るのか?どうやって?」という戸惑いに繋がった、ということではないでしょうか。

    ● もっとも、ユーザーズマニュアルで注意を喚起したかったのは、iodefine.h(の構造体)を使わない人やアセンブラ言語を併用する場合、きっとその人がついやってしまいがちな以下のアクセスはマイコンのハードウェア上出来ないですよ、ということですよね。

    「DATA0~DATA3、あるいはDATA4~DATA7を32ビット単位で一度にアクセスすることはできません。」

Children
No Data