RL78/G1EのUART1の件

お世話になります初心者IKUZOと申します
RL78/G1EのUART1とDMA0/1を使用して32Byteの送信/受信をしたいです、
以前にチョコさんのアドバイスに
2017/11/27 1:29
「>このDMAですがRS485のTXとRXに使用したいと思います
受信はいいのですが,DMAでの送信は要注意です。
最初の送信データはプログラムでTXDnレジスタに書き込むか,
データバッファに全てのデータを設定しておいて,
最初だけはソフトでDMAを起動させる必要があります。」
という内容があったのですが
具体的に教えていただくことは可能でしょうか?
現在コード生成で以下のように設定しておりますが
生成された内容はByte単位の送受信のようになっているように思います

Parents
  • サンプルのr01an2835jj0100_rl78を参考にしまして
    R_UART1_Start時にTXとRXの割込みを禁止にしまして
    1. memset((char *)g_Dmac0,0,32);
    2. R_DMAC0_Start
    3. memcpy((char*) &g_Dmac1 , "01234567890123456789012345678901",32);
    4. R_DMAC1_Start
    5. DMC1 |=0x80;
    ここまで実行しますと、32Byte分の波形が観測できました、送信できているようです
    その後に
    mem_dump((char *)&g_Dmac0, 2);をやりますと
    000FF7DC 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35
    000FF7EC 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31
    Ok.
    のように表示されますので、DMAを使用して転送が出来ているようです
    即ち、RXとTXとDMAの割込みを使用せずに転送が出来ているようです
    ただ問題が一つありまして、これを再度実行しますとおかしな波形が連続的に
    発生いたします、32Byte終了後の処置が出来ていないのではないかと思います。
  • 試行錯誤でなんとか出来ました
    ●初期設定
    R_UART1_Start(RX,TXTXとRXの割込みを禁止)
    R_DMAC0_Start(RX側)
    memcpy((char*) &g_Dmac1 , "01234567890123456789012345678901",32);
    ●送信
    DMAMK1 = 1U;\
    DMAIF1 = 0U;\
    DRA1 = (uint16_t)g_Dmac1;\
    DBC1 = _0020_DMA1_BYTE_COUNT;\
    DEN1 = 1U;\
    DST1 = 1U;\
    DMC1 |=0x80;
    ●受信
    sf.g_Dmac1_txd[0]++;
    DMAMK0 = 1U;
    DMAIF0 = 0U;
    DRA0 = (uint16_t)sf.g_Dmac0_rxd;
    DBC0 = _0020_DMA0_BYTE_COUNT;
    printf("DRA0=%08lX\r",DRA0);
    printf("DBC0=%04X\r",DBC0);
    mem_dump((char *)&sf.g_Dmac0_rxd, 2);
    DEN0 = 1U;//開始
    DST0 = 1U;
    このようにしましたら
    t
    DRA0=FE04F7DC
    DBC0=0020
    Ok.
    t2
    DRA0=FE04F7DC
    DBC0=0020
    000FF7DC 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35
    000FF7EC 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31
    Ok.
    t
    DRA0=FE04F7DC
    DBC0=0020
    Ok.
    t2
    DRA0=FE04F7DC
    DBC0=0020
    000FF7DC 31 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35
    000FF7EC 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31
    Ok.
    という風に正常に表示いたしました、
    これは割込みを使用していないので、他の割込みによるタイミングを
    荒らすことはありません、処理終了後DBC0の値で受信データがあるかどうか
    評価できますので問題ありません。

  • チョコさんのアドバイスのおかげでした、ありがとうございました。
Reply Children
No Data