sudohayato
2017年3月2日 21時00分
お世話になっております。須藤です。
Armadillo-420においてUART3or5のRTS/CTSピンをioctl関数で制御したいです。
下記URLを参考に下部のように制御を試みたところ、
CTSピンに対して設定がされていないようです。
#ioctlは正常終了しています
https://armadillo.atmark-techno.com/forum/armadillo/1908
https://armadillo.atmark-techno.com/forum/armadillo/1354
ちなみに直接レジスタに書き込むと値は更新されているようですが
CTSピンから何も出力されません。
#Armadillo-420ではRTS:in CTS:out という理解です
RTS/CTSピンはどのように制御したらよいでしょうか?
===
int arg;
// CTSピンの状態取得
ioctl(fd, TIOCMGET, &arg);
// CTSピンのセット
arg |= TIOCM_CTS;
ioctl(fd, TIOCMSET, &arg);
// CTSピンのクリア
arg &= ~TIOCM_CTS;
ioctl(fd, TIOCMGET, &arg);
===
以上、よろしくお願いいたします。
at_kojiro.yamada
2017年4月19日 17時21分
> #Armadillo-420ではRTS:in CTS:out という理解です
i.MX257を採用しているArmadillo-420では、
CTS/RTS 信号は一般的な UART の信号と名前が逆なので、
RTS : in, CTS : out ですが、
device driverで RTS/CTS の信号名の違いを吸収しており、
ioctl(TIOCMGET/TIOCMSET)利用の際には
RTS : out, CTS : in として扱います。
> RTS/CTSピンはどのように制御したらよいでしょうか?
と
で制御できないでしょうか?
/dev/ttymxc* を close() すると RTS信号(CTSピン)が High になるので
信号をLowにしておきたい間は、/dev/ttymxc* を open() したままにしてください。
■TIOCMSETで制御できない場合
TIOCMSETで制御できないのであれば、
カーネルコンフィギュレーションで UART5 の HW flow control が有効になっ
ていないのかもしれません。
Armadillo-440上で以下のようにコマンドを実行すると、
UART5 の HW flow control が有効かどうか確かめることができます。
# 以下のログは有効な時のものです。
UART5 の HW flow control を有効にするには
カーネルコンフィギュレーションで以下の項目にチェックを入れます。