バスに8バイトの配列を送信するために(すべてのバイトを一度に転送する)マイクロチップからPIC18F452とSPI通信を設定しようとしています。ここに私の配列がどのように見えるかの例です:SPIへの8バイト配列の送信
array 0x0080 byte[8]
array[0] 0x0080 0x01
array[1] 0x0081 0x01
array[2] 0x0082 '\0'
array[3] 0x0083 0x01
array[4] 0x0084 0x01
array[5] 0x0085 0x01
array[6] 0x0086 0x01
array[7] 0x0087 '\0'
値は、入力信号(音声ファイル、クロックなど)から来ると、アレイを満たすためにPORTDbits.RD0上で受信されています。値は常に1または0で、それ以外は何もありません。
まず、私はputcSPI()で一度に一つのバイトを送信することにより開始しています。配列を実行すると、SPIに1バイトを送り、結果は一致します。
/// SEND DATA TO SPI
SPI_INT = 0; // Enable SS
putsSPI(array);
SPI_INT = 1; // Disable SS
delay_ms(); // Delay
しかし、私は(の終わりと考え0が発生したときにフレームの転送が停止される:
そして、Iは次のようputsSPI()を使用して、一度にすべてのバイトを送信しようとしました配列なので、それは正常です)。そして、私のフレームはチャンクに分割されています。アレイは、上記の表示のために
は、例えば、私は、SPIバス上で「1」を有し、その後、次の値が言われていること
に従うフレームからのものである、私は、データを変換すると考えバイナリから16進数(または整数)に変換し、SPIに送信します。 ここではいくつかの変換方法を試しましたが、これまで成功していませんでした。
完全なアレイをバスに直接送信するソリューションはありますか、誰かがこの特定のケースで変換を実行する方法についてのアイディアを持っていますか?
事前に感謝します。
それぞれ2つの値のうちの1つだけを含む8バイトを送信するのはなぜですか?値を単純に1バイトにまとめることができます。 – EOF
全く異なる方法で問題を解決しました。 私が後で使用した解決策を投稿します – Daymov
'putsSPI'がヌルで終了する文字列を期待している場合、明らかに最初のヌル文字までしか文字を送信しません。一度に1バイトずつ送信しないのはなぜですか? @EOFが書いたように、8ビットは1バイトです。受信者に1バイトしか送る必要はありませんか? – Groo