USB-001-SERでRTS信号トグル実験

20021/3/2()

 FTDI社のFT8U232AMを使用したUSB-SERIAL変換基板(USB-001-SER)で、D2XXダイレクドライバを用い、RTS信号をトグルする実験をしてみました。
波形にてしめします。約2mSから3mSかかっています。

クリックして拡大
以下にテスト用のソースを示します。ソースがすべて正しいとは限らないかもしれません。
// usb001s1.cpp : USB-001-SERでDXXダイレクトドライバを用いて、RTSなどの信号を制御する例
//

#include "stdafx.h"

#include "Ftd2xx.h"     //FTDI社供給ヘッダファイル

/** USB-001操作関数 **/
int USB_001_opn( void ); /* 使用開始 */
int USB_001_setRTS( int dt ); /* RTS信号制御 1/0 */
int USB_001_setDTR( int dt ); /* DTR信号制御 1/0 */
int USB_001_readCTS( void ); /* CTS信号読み込み 1/0 */
int USB_001_readDSR( void ); /* DSR信号読み込み 1/0 */
int USB_001_close( void );      /* 使用終了 */

FT_HANDLE USB_001_han;  /* D2XX操作用ハンドル変数 */


int USB_001_opn( void ) /* 使用開始 */
{
FT_STATUS st;

        st = FT_Open( 0, &USB_001_han );
        if( st == FT_OK ){
                return 1;
        }else{
                return 0;
        }
}

int USB_001_setRTS( int dt ) /* RTS信号制御 1/0 */
{
FT_STATUS st;

        if( dt == 0 ){
                st = FT_SetRts( USB_001_han );

        }else{
        st = FT_ClrRts( USB_001_han );
        }
        if( st == FT_OK ){
                return 1;
        }else{
                return 0;
        }
}

int USB_001_setDTR( int dt ) /* DTR信号制御 1/0 */
{
FT_STATUS st;

        if( dt == 0 ){
                st = FT_SetDtr( USB_001_han );

        }else{
                st = FT_ClrDtr( USB_001_han );
        }
        if( st == FT_OK ){
                return 1;
        }else{
                return 0;
        }
}

int USB_001_readCTS( void ) /* CTS信号読み込み 1/0 */
{
FT_STATUS st;
DWORD mstat;
        st = FT_GetModemStatus( USB_001_han, &mstat );
        if( mstat & 0x0000010 ){
                return 1;
        }else{
                return 0;
        }
}

int USB_001_readDSR( void ) /* DSR信号読み込み 1/0 */
{
FT_STATUS st;
DWORD rxb, txb, mstat;
        st = FT_GetModemStatus( USB_001_han, &mstat );
        if( mstat & 0x0000020 ){
                return 1;
        }else{
                return 0;
        }
}
int USB_001_close( void )       /* 使用終了 */
{

        return( FT_Close( USB_001_han ) );

}

void USB_test( void )   /* test */
{
char k;
int owari;
int dt;
int i;
int stat;
        owari = 0;
        while(owari == 0){
                if (USB_001_opn() /* 使用開始 */ != 1 ){
                        printf( "open error! \n " );
                        break;
                }
                
                dt = 1;
                for(i=0;i<1000;i++){
                        USB_001_setRTS( i & 1 ); /* RTS信号制御 1/0 */
                }
                owari = 1;
                USB_001_close();        /* 使用終了 */
        }
}

int main(int argc, char* argv[])
{
        printf("--Start--\n");

        USB_test();     /* test */

        printf("--End--\n");
        return 0;
}
メールでのご質問はこちらへどうぞ

HDLのホームページへ