DWINタッチスクリーンとS32Kマイクロコントローラ間のシリアル通信リンク機能を開発しています。タッチスクリーンがデータを送信し、マイクロコントローラがデータを受信して判定する際に、判定のためにデータの9ビット目を抽出し、それに応じて異なるCANデータを送信したいと考えています。しかし、データの抽出がうまくいきません。経験豊富な開発者の方々からのご助言をいただければ幸いです。
こんにちは、 @ffdsg さん。
DWINのタッチスクリーンの経験はありませんが、ざっと調べたところ、フレーム構造はフレーム終了時に「\n」マーカーを使わず、最初の2つのヘッダー(5AとA5)を送り、その後にフレームの長さ(06)を送信しているようです。
ですので、おそらくUARTコールバックを編集して、3バイト目で受信を止めることができるでしょう。例えば:
void LPUART1_RX_ISR(void *driverState, uart_event_t event, void *userData)
{
(void)driverState;
(void)userData;
if (event == UART_EVENT_RX_FULL)
{
bufferIdx++;
if (bufferIdx >= 3) {
uint8_t frameLen = buffer[2]; /* number of bytes after length byte */
uint8_t totalLen = 3 + frameLen; /* header(2) + length(1) + payload */
if (bufferIdx >= totalLen) {
/* Full frame received */
memcpy(rxdata, buffer, totalLen);
keyNum = rxdata[8]; /* 9th byte*/
memset(buffer, 0, sizeof(buffer));
bufferIdx = 0;
trigger = 1;
LPUART_DRV_ReceiveData(INST_LPUART1, buffer, 1);
return;
}
}
LPUART_DRV_SetRxBuffer(INST_LPUART1, &buffer[bufferIdx], 1U);
}
}
これにより、常に9バイト目を読み取ることができるようになります。
また、ルーチン内で以下の行をコメントアウトしています。
//if (keyNum==0X01) {
つまり、9バイト目が何を言ってもCANメッセージは常に同じです。
残念ながら、DWINのタッチスクリーンはサードパーティ製デバイスであり、当社のサポート範囲外であり、当ハードウェアのルーチンは提供していません。これらの変更は、ご自身のシステム環境で実装およびテストする必要があります。
よろしくお願いします、
ジュリアン