|
![]() Loading
|
特電HALでUSB通信を行う特電HALでUSBを使う特電HALでUSBを使う方法を説明します。特電HALおよびRXduinoライブラリにはUSBファンクションで実現したCDC(いわゆるUSB- UARTのこと)が組み込まれているので、RXマイコンとホストPCをつなげばTeraTermなどを通じて簡単に通信を行うことができます。 特電HALはUSBを仮想UARTを実現しているので、COMポートをオープンする要領でUSBが使えるようになります。 USBを使えるようにするには、プログラム中で、 sci_init(SCI_USB0,38400); というコードを実行します。38400は速度ですが、USBの場合は何を設定しても構いません。実際には毎秒数百キロバイトでます。 ここで sci_init(SCI_SCI0P2x,38400); にすると、RXマイコンのSCI0のTxD,RxDを使って、レガシーなUARTを通じて通信が行われます。SCI0P2xというのは、RXマイコンのSCI0はP20,P21番端子と共有されているのでこのような命名をしました。 つまり、RXマイコンからみて、USB仮想COMポートでも、SCIを使ったレガシーなUARTでも、プログラム上は同じコードが使われます sci_init(SCI_SCI_AUTO,38400); とすると、システムの起動時にUSBとSCI0とSCI1のうち、一番先に何らかのデータを送ってきたCOMポートが開かれるようになります。 ポートがオープンされると、TeraTermなどから開けるようになります。 これでUSBを使う準備ができました。 ところで、組み込みマイコンの中で動くC言語での改行コードと、Windows上でTeraTermなどを使って通信する際の改行コードは異なります。これが異なると改行が反映されなかったり、2回改行されたりします。 そこで、 sci_convert_crlf(CRLF_CRLF,CRLF_CRLF); // \nを\r\nに変換 とやって、ライブラリの中で改行コードを自動的に変換できるようにします。 あとは、RXのプログラムの中からホストPCに文字列を送信したいならば、 sci_puts("hogehoge"); とやります。 ホストPCからRXマイコンに文字を送ったら、マイコンの内蔵RAMの中のバッファに格納されます。そのたまったデータ量(バイト数)を調べるには、 sci_rxcount() 関数を呼び出します。この関数が0でない値を返したならば、何か受信データがあります。 その場合は、 char c = sci_getc(); // 1文字受信 とやって、1文字受信します。 USBまたはSCIのポートを開いて、エコーバックするプログラムの例を次に示します。 sci_init(SCI_AUTO,38400); // 自動的にCOMポートを判別してオープンする sci_convert_crlf(CRLF_CRLF,CRLF_CRLF); // \nを\r\nに変換 sci_puts("Hello I'm RX62N\n"); while(1) { if(sci_rxcount()) { // 何か受信した文字があるか調べる char c = sci_getc(); // 1文字受信 sci_putc(c); // エコーバック } } こんな簡単なコードで、RXマイコンとホストPCとの間で通信ができるようになります。 手軽に試してみたい場合は、Webコンパイラを使ってみてください。 上のURLからWebコンパイラを開いて、「シリアル通信(HAL版)」のサンプルコードをクリックし、「コンパイル実行」ボタンを押してみてください。ターゲットボードを「RX-MEGA」にしておけば、Interface誌付録の基板単体でも動きますので、すぐに試せます。 MOTファイルが生成されてサーバから送られてくるので、これをRXマイコンに書き込めば、すぐにUSB通信のプログラムが試せます。 Webコンパイラは、シリアル番号の入力などは必要ないので、気軽に試してみてください。 |
|
|