2016-10-15 12 views
-1

私は多くの運を必要とせずにPIC32MX250F128Dで動作するSPIを取得しようとしています。PIC32 SPIが動作しません

私は8ビットモードと32ビットモードで試しましたが、私はすべてのデータを取得しているわけではありません。

私は4MHzのSPIを使ってWS2812のLEDストリップを駆動しようとしています。コントローラから出てくるものは何もありません現時点で

#include <xc.h> 
#include <peripheral/system.h> 
#include "config.h" 

void settings(void); 
char Send_SPI(unsigned char); 

int main(void) { 
    int i, j; 
    unsigned char scrapdata; 
    unsigned char buffer[6] = {0x12, 0x34, 0x56, 0x78, 0x90, 0x01}; 

    settings(); 

    while(1) { 
     Send_SPI(buffer[j]); 
     j = (j > 4)? 0 : j++; 
     for(i = 0; i < 300; i++); 
    } 

    return 0; 
} 

void settings(void) { 
    SYSTEMConfigPerformance(SYS_FREQ); 
    TRISB &= 0xFFFB; 
    RPB2R = 0x3; 

    SPI1STAT = 0; 
    SPI1CON = 0; 
    unsigned int rData = SPI1BUF; 

    // => 4MHz = 48MHz/(2 * (5 + 1)) 
    SPI1BRG = 5; 
    SPI1STATCLR = 0x40; // clear the Overflow 
    SPI1CON = 0x00008230; 
} 

char Send_SPI(unsigned char buffer) { 
    //while(!(SPI1STAT & 0x2)); 
    SPI1BUF = buffer; 
    while(!(SPI1STAT & 0x1)); // wait transfer complete 
    char scrapdata = SPI1BUF; //read to clear SPI2BUF before reload 
    return scrapdata; 
} 

これは私が持っているコードです。 誰かが間違っていることを知っていますか?

ローレンスは

答えて

0

あなたはおそらく最初でちんぷんかんぷんを送っているという意味main()で使用する前にjを初期化することはありません。また、基本的にj = j++と言っているので、あなたの三項演算j = (j > 4)? 0 : j++;の結果は明確ではありません。

最後に、シフトレジスタとLEDの束でSPI初期化コードをテストして、すべて正常であることを確認してください。ロジックアナライザは、MCUがどの信号を送信しているかを確認するのに役立ちます。

+0

実際にはいくつかのコーディングエラーはありますが、問題を修正していないものです。 –

+0

私はロジックアナライザを使用して、PICから何かが出てくるかどうかを確認していますが、何も送信されていません。 –

+0

@LaurensWuyts私が言ったように、基本回路でSPIの初期コードをチェックしてください。それがうまくいかない場合は、PICのオンラインサンプルを探してください。 – TisteAndii

0

SPIが初期化されていない場合は、オシロスコープを試して、CS信号とSCK信号が得られるかどうかを確認してください。しかし、PICファミリには、SPIを書き込む無痛な方法がたくさんあります。

  • 最も簡単な方法は、コンパイラによって指定されたSPI.hを使用することです。上記のコードはSPIである

    char SPI_BB(char byte8) { 
        char counter; 
        for (counter = 8; counter; counter--) { 
         if (byte8 & 0x80) 
          MOSI=1; 
         else 
          MOSI=0; 
         byte8 <<= 1; 
         SCK=1; /* a slave latches input data bit */ 
         if ((MIS0)) 
          byte8 |= 0x01; 
         SCK=0; /* a slave shifts out next output data bit */ 
        } 
        return byte8; 
    } 
    

:あなたはまた、MCC(MPLABコードコンフィギュレータは)プラグイン

  • 使用SPIドライバを書くために使用することができます

  • は、このような何かを叩いビットモード0。

  • 関連する問題