4番目のビデオでは、I2CおよびSPIバスをプログラムする方法について説明します。これらは、同じバス上の外部コンポーネントと通信するために必要です。
この構成は、SPIコンポーネントをクリックしたときにポップアップ表示されるGUIに入力されます。この演習の目的は、L6474構成レジスタを読み取ることです。アドレスは0x18、デフォルト値は0x2E88です。この値を取得するには、バイナリ値bx0011 1000 = 0x38を含むGetParamコマンドを送信する必要があります。プロトコルでは、2バイトのデータを受信するために、GatParamコマンドの後に2つのNOP関数を送信する必要があります。
コードを書く前に、ピン配置を設定する必要があります。Arduinoのルールに従うと、SPIピンはポート0、ピン0、1、2、3です。L6474もリセットする必要があり、ピンはポート0のピン5にあります。
PSOCによって生成されたSPI APIを使用すると、プログラムは再びシンプルになります。デバイスをリセットすると、SPIブロックが開始されます。関数setUpDefaultValuesL6474が呼び出され、アドレス0x18にコマンドGetParamが送信され、その後に2つのNOP関数が続きます。SPIM_SendCommandPacketはバッファ {0x38, 0x00, 0x00} で呼び出され、関数SPIM_spiUartPutArrayによって転送される配列に格納されます。送信されたバイト数は受信されたバイト数と等しいため、受信バッファ サイズがこの数になると、すべてのデータを受信したことがわかります。このデータは抽出され、バッファがクリアされます。
Arduinoシールドの大きな利点は、すべてのピンに簡単にアクセスできることです。ロジック アナライザーは交換パケットをスニッフィングし、デバッグ フェーズで多くの時間を節約できます。以下に示すように、0x38が送信され、それぞれ0x2Eと0x88の2つのパケットが受信されました。.SPIバスは期待どおりに動作し、PSOCはモーター ドライバーL6474と通信しました。