[Armadillo:05342] Re: Armadillo-420におけるDMA転送の設定方法

Myoukan Kiyohito email@hidden
2010年 6月 14日 (月) 18:07:50 JST


明官です

竹之下様、回答ありがとうございます。
DMA転送を有効にすることができました。

しかし、今まで使用していたテストプログラムでのシリアル通信ができなくなりました。
(read関数でエラー(-1)が返ってきます)
DMA転送を使用した場合は、単純にread関数,write関数を用いた通信ができないのでしょ
うか?
参考になるような情報がありましたら、ご教授お願いいたします。

以上、よろしくお願いいたします。

<テストプログラム>
#define SERIAL_PORT "/dev/ttyS2"
#define FALSE 0
#define TRUE 1
volatile int STOP=FALSE;

int main()
{
    char buf[255];                    /* バッファ */
    int fd=0;                           /* ファイルディスクリプタ */
    struct termios oldtio, newtio;    /* シリアル通信設定 */
    speed_t speed;
    int res;

    fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY);   /* デバイスをオープンする */
    tcgetattr(fd,&oldtio); /* 現在のシリアルポートの設定を待避させる*/
    bzero(&newtio, sizeof(newtio)); /* 新しいポートの設定の構造体をクリアする */

    newtio = oldtio;                  /* ポートの設定をコピー */
    newtio.c_cflag = B38400 | CS8 | CLOCAL | CREAD;
             /* ポートの設定をおこなう 詳細はtermios(3)参照 */
    //newtio.c_iflag = IGNPAR | ICRNL;
    newtio.c_iflag = IGNPAR ;
    newtio.c_oflag = 0;
    newtio.c_lflag = ICANON;
    newtio.c_cc[VINTR]    = 0;     /* Ctrl-c */
    newtio.c_cc[VQUIT]    = 0;     /* Ctrl-\ */
    newtio.c_cc[VERASE]   = 0;     /* del */
    newtio.c_cc[VKILL]    = 0;     /* @ */
    newtio.c_cc[VEOF]     = 4;     /* Ctrl-d */
    newtio.c_cc[VTIME]    = 0;     /* キャラクタ間タイマを使わない */
    newtio.c_cc[VMIN]     = 1;     /* 1文字来るまで,読み込みをブロックする */
    newtio.c_cc[VSWTC]    = 0;     /* '\0' */
    newtio.c_cc[VSTART]   = 0;     /* Ctrl-q */
    newtio.c_cc[VSTOP]    = 0;     /* Ctrl-s */
    newtio.c_cc[VSUSP]    = 0;     /* Ctrl-z */
    newtio.c_cc[VEOL]     = 0;     /* '\0' */
    newtio.c_cc[VREPRINT] = 0;     /* Ctrl-r */
    newtio.c_cc[VDISCARD] = 0;     /* Ctrl-u */
    newtio.c_cc[VWERASE]  = 0;     /* Ctrl-w */
    newtio.c_cc[VLNEXT]   = 0;     /* Ctrl-v */
    newtio.c_cc[VEOL2]    = 0;     /* '\0' */

    tcflush(fd, TCIFLUSH);
    tcsetattr(fd,TCSANOW,&newtio);

    while (STOP==FALSE) {     /* 終了条件が満たされるまでループ */
       res = read(fd,buf,255);
       write(fd,buf,res);
       buf[res]=0;             /* printf で使うため,文字列の終端をセットする */
       printf(":%s:%d\n", buf, res);
       if (buf[0]=='z') STOP=TRUE;
    }
    /* ポートの設定をプログラム開始時のものに戻す */
    sleep(1);
    tcsetattr(fd,TCSANOW,&oldtio);
    close(fd);
    return 0;
}


> -----Original Message-----
> From: email@hidden
> [mailto:email@hidden] On Behalf Of Takenoshita
Koyo
> Sent: Monday, June 14, 2010 3:30 PM
> To: Armadillo series general discussion list
> Subject: [Armadillo:05340] Re: Armadillo-420におけるDMA転送の設定方法
>
> 竹之下です。
>
> arch/arm/mach-mx25/serial.h
> の、
> UART{n}_DMA_ENABLE
> を"1"に定義するとDMAを使うようになります。({n}はUARTコントローラの番号)
>
> シリアルインターフェース2(/dev/ttymxc2)
> の場合は、
> UART3_DMA_ENABLE
> を"1"にしてください。
>
> --
> Koyo Takenoshita
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo




armadillo メーリングリストの案内