PSoC/PSoCのUSBモジュールの使用
このページの目次
USBUARTユーザーモジュールの試用
ここでは、CypressのUSBUARTユーザーモジュールを使用したプログラミングについて、実験しながら使用し、とりあえずUSBUARTを使用し、printf互換関数でPCにデバッグログ出力をできるようにしていきたいと思います。
USBUARTモジュールのPlace
-
USBUARTモジュールを選択、配置(Place)する
-
PSoC Designerで、Vide→Device Editorを選択し、Config→Selectionを選択する
これで、ユーザーモジュール選択の画面になります。
-
ProtocolsグループのUSBUARTをダブルクリックする
初期状態では、「USBUART_1」になっていると思います。ここでは、名称変更で「USBUART」にします。これで、USBUARTが選択されます(まだ、配置はされていません)。
-
Selected User Modulesの
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (selectitem.gif)
-
USBUARTの設定を行う
-
Config→Interconnectを選択する
-
Selected User ModulesのUSBUARTモジュールを選択する
-
パラメータを入力する
#ref(UserModuleParams.gif)
こちらに入力します。とりあえずVendorID等は暫定的にCypressのものを設定してみました。このまま入力していただければとりあえず正しく動作しますが、お好きなID/Stringで問題ありません。
-
APIの生成を行う
Config→Generate Applicationを選択すると、ユーザーモジュールにアクセスする為のAPI群が生成されます。
main関数にテスト用処理を実装する
-
main関数へのテスト処理の導入
main.cが自動生成されていますので、このファイル内のmain()関数に、USBUARTモジュールのヘルプのサンプルコードをコピーしてテストしてみます。
Sample Codeの項目を見てみてコピーペーストします。
USBUARTモジュールの名称によって、API関数プリフィックスが変化します。
ユーザーモジュール名がUSBUARTの時 : USBUART_Start()
ユーザーモジュール名がUSBUART_1の時 : USBUART_1_Start()
-
Compileする
F7キーを押すと、コンパイルできます。エラーが出たら、コピーミスがないか、確認してください。
-
マイコンを書き換える
MiniProgとPSoCボードの端子を接続し、Program→Program Partを選択します。すると、PSoC Programmerというツールが起動します。
「Program」ボタンがグレー表示で押せない場合は、正常にCompile/ビルドが生成されていない可能性がありますので、一度そちらを確認して下さい。
正常なら「Program」をクリックすると、30秒程度で完了します。
実際にPCと接続してテストを行う為の準備
-
PCに接続する
書き換えたら、一度MiniProgをはずし、PSoCマイコンボードのUSBポートとPCのUSBポートとを接続します。すると、新しいハードの追加ウィンドウが出てきます。
-
infファイルの設定
今回生成したPSoCのプロジェクトフォルダには、libというフォルダが自動的に生成されています。この中に、Windowsにデバイスとして登録させる為のinfファイルが生成されていますので、libディレクトリを指定します。しばらくすると、デバイスの登録が完了します。
-
登録されたCOM番号を確認する
PCにCOMポートとして登録されたとしても、それがCOMの何番になっているのかがわからないと通信できまんので確認します。
-
スタートボタンから、コントロールパネルを起動する
-
システムを選択し、ハードウェア→デバイスマネージャーを選択する。
-
ポート(COM と LPT)の中を見て、COMの何番か確認する
ここまで完了したら、実際に通信ソフトを起動して通信してみましょう。
実際にPCと接続してテストを行う
TeraTerm または、ハイパーターミナル(Windowsの標準アクセサリ)を起動する
通信が開始したら、キーボードの任意のキーを押してみてください。文字が表示されると思います。
ここまでのまとめ
ここまでで、エコーバックの処理が動作している事が確認できました。
地味な動作ですが、表示されているデータは、キーボードから入力されたものが一旦PSoCマイコンに転送され、PSoCマイコンから改めて打ち返されてきたデータです。
UARTでの文字列の出力方法
-
ここでは、USBUARTのユーザーモジュール名を「USBUART」として設定したとして説明します。もし違う名称でモジュールを宣言した場合には、API関数のプリフィックスを変更して下さい。
USBUARTの初期化
以下のようにしてUARTを初期化します。USBUART_Init()がTRUEになれば初期化完了です。
M8C_EnableGInt;
USBUART_Start(USBUART_5V_OPERATION);
while(!USBUART_Init());
文字列の出力
以下のようにして文字列を出力します。以下は、文字列がROM内(const)の場合です。
while (!USBUART_bTxIsReady()); // UART出力可能になるまで待つ
USBUART_CWrite("Hello,world\n\r",13); // 文字列出力
文字列がRAM内の場合には、以下のようにして出力します。
char str[] = "Hello,world\n\r";
while (!USBUART_bTxIsReady()); // UART出力可能になるまで待つ
USBUART_Write(str,13); // 文字列出力
16進数値の出力
変数の値を出力した意場合などは、以下のようにします。
int i = 0x32;
while (!USBUART_bTxIsReady()); // UART出力可能になるまで待つ
USBUART_PutSHexInt(i); // 変数iの値を出力する
ここで指定する値は、ポインタではありませんので、constであるかどうかを気にする必要はありません。
-
USBUART API関数で文字列送出関数を呼び出す場合には、毎回USBUART_bTxIsReady()をして送出可能になっているかどうか確認しましょう。
USBUARTの応用
USBUARTをデバッグに役立てるため、printf関数のサブセットを作成し、デバッグに生かしていきたいと思います。
USBUART用printfの作成
アクセスカウント(累計) : - アクセスカウント(本日) : - アクセスカウント(昨日) : -
最終更新:2014年01月31日 23:48