RL78G13 シリアルアレイユニットの使い方

はじめまして、よろしくお願いします。

RL78G13(R5F100GG-48pin)を使用しています。

シリアルアレイユニットを使用して2チャンネル(CSI00,01)のマスターシリアル通信を行いたいのですが、

1チャンネル(CSI00)しか動作しません。

シリアルアレイユニット設定は下記ですが、他に設定がいるのでしょうか。

PIORレジスタは"00h"設定です。

SS0Lのbit0,1は個別に動作させたいチャンネル時に設定、

設定後にSIO00 or 01に転送データをセットしています。

CSI00は問題なく動作するのですが、CSI01は動作せずSCLKの出力端子P75/SCK01はシリアル設定を行っても"L"のままです。

P73/SO01は"H"になります。

シリアル設定の前のポート設定は下記にしています。

P7 = 00111000B 

PM7 = 00111000B

 

;====================================================================
;    SAU(CSI00 & CSI01) initialize
;====================================================================
SINISAU:
    SET1    CSIMK00            ; mask CSI00 interrupt
    SET1    CSIMK01            ; mask CSI01 interrupt
;
    SET1    SAU0EN            ; enable serial clock
    NOP
    NOP
    NOP
    NOP
    MOV    SPS0L,    #00000000B    ; Serial clock select register
    MOV    ST0L,      #00000011B    ; stop channel 0(CSI00) and 1(CSI01)
;
; ******************* CSI00設定 for Source-DRIVE ***************************
    MOVW    AX,    #0000000000100000B        ; set channel0 mode
    MOVW    SMR00,    AX                ;
;
    MOVW    AX,    #1000000000000111B        ;
    MOVW    SCR00,    AX                ;
;
    MOVW    AX,    #0011111000000000B        ; baud rate setting
    MOVW    SDR00,    AX            ;
;
; ******************* CSI01設定 for Gate-DRIVE ***************************
    MOVW    AX,    #1000000000100000B        ; set channel1 mode
    MOVW    SMR01,    AX                ;
;
    MOVW    AX,    #1000000000000111B        ;
    MOVW    SCR01,    AX                ;
;
    MOVW    AX,    #0011111000000000B        ; baud rate setting
    MOVW    SDR01,    AX            ;
;---------------------------------------------------------------------------
;******************* CSI00 & CSI01設定 共通 ***************************
    MOVW    AX,    #0000111100001111B    ;
    MOVW    SO0,    AX            ;
;
    SET1    SOE0L.0                ; CSI00 output enable
    SET1    SOE0L.1                ; CSI01 output enable
;
    CLR1    PM1.0                ; set SCK00 to output
    CLR1    PM1.2                ; set SO00 to output
    SET1    PM1.1                ; set SI00 to input
;
    CLR1    PM7.5                ; set SCK01 to output
    CLR1    PM7.3                ; set SO01 to output
    SET1    PM7.4                ; set SI01 to input
;
    CLR1    CSIIF00                ; clear CSI00 request flag
    CLR1    CSIIF01                ; clear CSI01 request flag
;
    CLR1    CSIMK00                ; enable CSI00 interrupt
    CLR1    CSIMK01                ; enable CSI01 interrupt
;
    RET

Parents
  • チョコです。
    実際に使われたプロジェクトのファイルをアップできないでしょうか。
    提示されているプログラムは,そのままではエラーが発生してビルドできないはずです。
    これまでも,投稿用に使ったものが実際のプログラムと違ったケースを見かけました。
    差があると,役に立つようなコメントはできません。
  • チョコさん

    コメントありがとうこざいます。

    昨日、ごそごさといじっていて原因がわかりました。

    下記のレジスタ設定を修正したところ、正常にCSI01ユニットからの出力が確認できました。

                                                   誤                                                       正

    SO0レジスタ : 0000111100001111B  →    0000101100001011B

    R5F100GGがユニット0チャンネル2を使えないので関係ないだろうと設定していたのですが、

    この設定が悪さをしていました。

    ありがとうございました。

Reply
  • チョコさん

    コメントありがとうこざいます。

    昨日、ごそごさといじっていて原因がわかりました。

    下記のレジスタ設定を修正したところ、正常にCSI01ユニットからの出力が確認できました。

                                                   誤                                                       正

    SO0レジスタ : 0000111100001111B  →    0000101100001011B

    R5F100GGがユニット0チャンネル2を使えないので関係ないだろうと設定していたのですが、

    この設定が悪さをしていました。

    ありがとうございました。

Children
  • チョコです。
    うまく動いてよかったですね。
    マニュアルには,「30-64ピン製品のSO1レジスタのビット15-10, 7-2, 80-128ピン製品のSO1レジスタのビット
    15-12, 7-4には,必ず0を設定してください。」とあるので,ビット11とビット3も0の方がいいかもしれません。