PSoC 4 デバイスでファームウェアから UART の Tx と Rx ピンを制御する - KBA224950 - Community Translated (JA)
- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
Community Translated by MoTa_728816 Version: **
質問:
PSoC® 4 デバイスで実行時にファームウェアから UART の Rx と Tx ピンを制御するのにはどうしたら良いでしょうか?
回答:
このナレッジベースドキュメントでは、ファームウェアから SCB_UART Tx と Rx ピンの機能を変更する方法を学びます。ユースケースではファームウェアからピンを制御する理由について記載します。ソリューションではファームウェアからピンを制御する手順を示します。コード例では推奨される API の使用方法を実装しています。
ファームウェアから UART Tx と Rx ピンを制御するユースケース:
1. UART の Rx ピンは電気的ノイズに影響を受けやすい場合があります、そのため Rx ピンの内部プルアップ抵抗を有効にするとこの問題を解決できます。
2. 半二重と全二重モードを切り替えている間、 SCB UART に使用されていない Tx と Rx ピンを GPIO として設定しファームウェアからの制御が可能です。
ファームウェアでのソリューション:
通常、ピンはファームウェアからでもハードウェアからでも制御可能です。デフォルトでは UART のピンは SCB ハードウェアブロックから制御されます;そのため、ファームウェアからの制御を有効にする場合には UART のピンを SCB ブロックから切断する必要があります。
Tx/Rx ピンを UART SCB から切断してファームウェアによる制御を有効にするためには以下の手順に従ってください:
1. Tx/Rx ピンに該当するレジスタの HSIOM_PORT_SELx ビットに 'ビット 0' を書き込みます。
2. Tx/Rx ピンのドライブモードをファームウェアを使用して設定します。
詳細については、Architecture Technical Reference Manual (TRM) の I/O System (HSIOM) をご参照ください。
以下のコード抜粋は Tx/Rx ピンと UART SCB 間のハードウェア接続を解除してファームウェアによる制御を有効にする手順を実装するのにご使用いただけます。
抜粋コード ユースケース 1: ファームウェアから Rx ピンを制御する
例えば、UART_Tx ピン、UART_Rx ピンがそれぞれ P0.1 と P0.0 だった場合。
// SCB_UART のデフォルトコンフィグレーション設定を保存する変数
uint32 temp;
// SCB_UART 用の HSIOM コンフィグレーションを保存する
temp = CY_GET_REG32 (CYREG_HSIOM_PORT_SEL0);
// UART_Rx ピンをファームウェアから制御するように設定する
CY_SET_REG32 (CYREG_HSIOM_PORT_SEL0, CY_GET_REG32 (CYREG_HSIOM_PORT_SEL0) & 0xFFFFFFF0);
// UART Rx ピンのドライブモードを設定する
UART_pin_SetDriveMode(UART_pin_DM_RES_UP);
// ここにアプリケーションコードを記述する
// UART のデフォルト機能に戻す (例) Rx ピンは SCB ブロックに接続されている
CY_SET_REG32 (CYREG_HSIOM_PORT_SEL0, temp);
抜粋コード ユースケース 2: ファームウェアから Rx ピンを制御する
例えば、UART_Tx ピン、UART_Rx ピンがそれぞれ P0.1 と P0.0 だった場合。
// SCB_UART のデフォルトコンフィグレーション設定を保存する変数
uint32 temp;
// SCB_UART の HSIOM デュプレックスコンフィグレーションを保存する
temp = CY_GET_REG32 (CYREG_HSIOM_PORT_SEL0);
// UART Tx オンリーモード
// UART_Rx ピンをファームウェアから制御されるように設定する
CY_SET_REG32 (CYREG_HSIOM_PORT_SEL0, CY_GET_REG32 (CYREG_HSIOM_PORT_SEL0) & 0xFFFFFFF0);
// UART Rx ピンのドライブモードを設定する
UART_pin_SetDriveMode(UART_pin_DM_RES_UP);
// UART Tx オンリーモードオペレーション用コードをここに記述する
// デフォルトの全二重の UART 機能をロードする (例) Rx ピンは SCB ブロックに接続されている
CY_SET_REG32 (CYREG_HSIOM_PORT_SEL0, temp);
// UART Rx オンリーモード
// UART_Tx ピンをファームウェアから制御されるように設定する
CY_SET_REG32 (CYREG_HSIOM_PORT_SEL0, CY_GET_REG32 (CYREG_HSIOM_PORT_SEL0) & 0xFFFFFF0F);
// UART Tx ピンのドライブモードを設定する
UART_pin_SetDriveMode(UART_pin_DM_RES_UP);
// UART Rx オンリーモードオペレーション用コードをここに記述する
// デフォルトの全二重の UART 機能をロードする (例) Tx ピンは SCB ブロックに接続されている
CY_SET_REG32 (CYREG_HSIOM_PORT_SEL0, temp);