[Armadillo:05439] Re: DMA転送を有効にした場合のシリアル通信プログラムについて
nakai
email@hidden
2010年 7月 15日 (木) 12:20:06 JST
nakaiです。
実機で確認できていないのですが、、
> 確認したところ、read関数でエラー(-1)が返ってくることがわかりました。
-1で返ってきたときのerrnoは何に設定されているのでしょうか?
また、open時にエラーチェックされていないためわかりかねますが、
ある程度文字列が表示されてから、
readがエラーとなるのでしょうか?
それとも、1発目のreadでエラーになりますか?
DMA有効時のシリアル転送には、まだバグがある可能性があります。
(2010/07/13 9:38), Myoukan Kiyohito wrote:
> 明官と申します。
>
> C言語のプログラムはある程度かけますが、
> Linux,Armadilloに関しては初心者です。
>
> Armadillo420でDMA転送を有効にしてシリアル通信のテストを行ったところ
> うまく動作しませんでした。
> 確認したところ、read関数でエラー(-1)が返ってくることがわかりました。
>
> DMA転送を使用した場合は、単純にread関数で受信することはできないのでしょうか?
> 参考になる情報がありましたら、ご教授お願いいたします。
>
> <テスト>
> ・接続は、PCとArmadillo420をシリアルクロスで接続。
> ・PCから送信した文字をArmadillo420で受信し表示するプログラムを使用。
> ・シリアルインターフェース2を使用。
> ・転送速度は38400bps。
> ・DMA転送の設定は、linux2.6.x/arch/arm/mach-mx25/serial.h の
> UART3_DMA_ENABLE=1
> とすることで、有効にしました。
>
> <テストプログラム>
> #include<stdio.h>
> #include<sys/types.h>
> #include<sys/stat.h>
> #include<fcntl.h>
> #include<termios.h>
>
> #define SERIAL_PORT "/dev/ttymxc2"
> #define FALSE 0
> #define TRUE 1
> volatile int STOP=FALSE;
>
> int main()
> {
> char buf[255]; /* バッファ */
> int fd=0; /* ファイルディスクリプタ */
> struct termios oldtio, newtio; /* シリアル通信設定 */
> 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;
> newtio.c_iflag = IGNPAR ;
> newtio.c_oflag = 0;
> newtio.c_lflag = ICANON;
>
> tcflush(fd, TCIFLUSH);
> tcsetattr(fd,TCSANOW,&newtio);
>
> while (STOP==FALSE) { /* 終了条件が満たされるまでループ */
> if((res = read(fd,buf,255)) == -1){
> printf("read error\n");
> continue;
> }
> 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;
> }
>
> 以上、よろしくお願いいたします。
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>
armadillo メーリングリストの案内