看板 ASM 關於我們 聯絡資訊
各位版友你們好,小弟在做字庫晶片與微處理器SPI的溝通 使用以下的函式。 void spi_transfer(volatile byte data) { SPDR = data; // Start the transmission while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission { }; //return SPDR; // return the received byte } byte ReadByte(void){ //讀取8Bit while(!(SPSR&(1<<SPIF))){ return SPDR; }; } //以下是我的主程式 void loop{ for(int i=0 ;i<1;i++){ spi_transfer(a[i]); }; //將a陣列內的編碼傳到IC(a[3]={0x03,0xA4,0x40};) //0x03晶片起始 // A440為BIG5 一的編碼 str[0]=ReadByte(); //str為全域變數用來接收回傳值 for(int i=0; i<32;i++) Serial.print(str[i],HEX); //顯示回傳的值 } 小弟做了以上測試 str[0]確實有改變。 而改變為了完整接收32bit,更動接收函式 void ReadByte(void){ for(int i=0; i<4;i++){ while(!(SPSR&(1<<SPIF))){ str[i] = SPDR; }; } } 或在主函式使用 for(int i=0 ;i<32 ;i++){ str[i]=Read byte(); } 做了以上更動,只有讀8bit有改變原來str[0]的值,剩下連回傳都沒有。 請問板友可以建議該怎麼做嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.143.145.84
ksmrt0123:SPI的read/write是同時發生, 讀寫都用spi_transfer()完 11/18 00:04
ksmrt0123:成. 你的ReadByte()讀不到正確值是正常的 11/18 00:05
ksmrt0123:你的程式從 http://arduino.cc/en/Tutorial/SPIEEPROM 11/18 00:06
ksmrt0123:改的吧. 你可以從 read_rrprom() 改出你要的功能 11/18 00:07
smartjay:感謝ksmrt我重找datasheet看到真的類似你說的方式做讀取 11/18 23:34