[問題] Ardino SPI傳輸問題

看板ASM作者 (高毛毛)時間10年前 (2013/11/17 12:53), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串1/1
各位版友你們好,小弟在做字庫晶片與微處理器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

11/18 00:04, , 1F
SPI的read/write是同時發生, 讀寫都用spi_transfer()完
11/18 00:04, 1F

11/18 00:05, , 2F
成. 你的ReadByte()讀不到正確值是正常的
11/18 00:05, 2F

11/18 00:06, , 3F
11/18 00:06, 3F

11/18 00:07, , 4F
改的吧. 你可以從 read_rrprom() 改出你要的功能
11/18 00:07, 4F

11/18 23:34, , 5F
感謝ksmrt我重找datasheet看到真的類似你說的方式做讀取
11/18 23:34, 5F
文章代碼(AID): #1IY4kqyE (ASM)