2016-04-19 29 views
0

LPC1769を使用してSPIを使用して特定のデータをFPGAに送信する必要があります。しかし、私はこれにどのように接近すべきかをよく理解していません。私は現在、hardfaultハンドラで終わるこのコードを持っています。私はCMSISを使うことが許されていないので、私は自分自身でレジスタを定義しなければならなかった。LPC1769のSPI周辺機器

void sendData(uint8_t *buf, uint32_t Length) { 
    uint32_t i; 
    for (i = 0; i < Length; i++) { 
     while (S0SPSR != (1 << 7)) { 
      S0SPDR = *buf; 
      gpio0WritePin(15, 1); 
      gpio0WritePin(15, 0); 
      buf++; 
     } 
    } 
return; 
} 

と私の主な機能:

uint8_t TX[16]; 
int main(void) { 
    SpiInit(); 
    TX[0] = 0x48; 
    TX[1] = 0x65; 
    TX[2] = 0x6c; 
    TX[3] = 0x6c; 
    TX[4] = 0x6f; 
    while (1) { 
     SPI_Begin(); 
     sendData((uint8_t*)TX, 5); 
     SPI_End(); 
    } 
} 
+0

この問題はどこにでも、特にここには表示されていないコードで問題になる可能性があります。あなたはそれをデバッグする必要があります。フォルトステータスレジスタを調べ、それを追跡します。 –

+0

ポインタをbufから標準配列に変更すると、もはやハードフォールトハンドラには終わりません – Arrrow

答えて

1

あなたは間違いなく、現代のマイクロコントローラ上のこの種のようなSPIバスにビットバンギングデータを移動する必要はありません。

何らかの理由でCMSISを使用できない場合は、how CMSIS does SPI communicationをご覧ください。これを開くか、またはそれより良い方法で印刷してください。LPC176x/5x User Manualの "Chapter 17:LPC176x/5x SPI"を参考にしてください(410〜420ページ)。コードは合理的に従うべきである。一言で言えば

、あなたがする必要があります。

  • セットアップ
  • 、周辺機器の登録のための電力制御によるSPIコントローラを有効にし、この周辺(Perpheralクロック選択レジスタ)のためのクロックを有効にする、
  • SPI制御レジスタ(
  • )の割り込みを使用してSPI(MOSI、MISO、CLK、CS)、クロック極性などに関連するI/Oピンを設定してください。新しいデータが入るのを待つ間に登録します。
  • SPIデータレジスタを使用して一度に8ビットのデータを読み書きします。

割り込みを使用することを忘れないでください、あなたのCPUサイクルが最高(残念ながら、特にポーリング・ステータス・レジスタ非常に一般的な間違いを)何よりもデータをクランチに使用されています。

関連する問題