[Armadillo:05343] Re: Armadillo-420におけるDMA転送の設定方法
Takenoshita Koyo
email@hidden
2010年 6月 14日 (月) 18:13:35 JST
竹之下です。
内容詳しく見れていませんが、取り合えずの確認だけでも。
Armadilloと対向の機器はどのように接続されていますでしょうか?
高速通信になると、RS232Cトランシーバがついてこれない可能性があります。
※もとから動いていたソースとボーレート変えていないのであれば
別の問題ですが。
Myoukan Kiyohito さんは書きました:
> 明官です
>
> 竹之下様、回答ありがとうございます。
> 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 mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>
--
Koyo Takenoshita
armadillo メーリングリストの案内