作者smartjay (高毛毛)
看板ASM
标题[问题] Ardino SPI传输问题
时间Sun Nov 17 12:53:05 2013
各位版友你们好,小弟在做字库晶片与微处理器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
1F:→ ksmrt0123:SPI的read/write是同时发生, 读写都用spi_transfer()完 11/18 00:04
2F:→ ksmrt0123:成. 你的ReadByte()读不到正确值是正常的 11/18 00:05
4F:→ ksmrt0123:改的吧. 你可以从 read_rrprom() 改出你要的功能 11/18 00:07
5F:→ smartjay:感谢ksmrt我重找datasheet看到真的类似你说的方式做读取 11/18 23:34