您的位置:首页 > 其它

AVR单片机主机SPI读数据

2013-04-19 11:03 253 查看
SPI是一个全双工的同步串行数据总线接口

很多芯片与MCU的通信都用到了SPI接口,比如对某些芯片内的寄存器进行设置等。这时候MCU是作为主机(MASTER),而被写入或读取的芯片就作为从机(SLAVE)。

MCU作为主机进行SPI写的时候很简单:

unsigned char spi_write(unsigned char data)
{
SPDR=data;
while(!(SPSR&(1<<SPIF)));
return data;
}

SPI接口是这样规定的:对SPI数据寄存器写入数据即启动了SPI的时钟SCK。即SPI的通信是由主机对SPDR进行赋值才开始的。

SPI设备作为从机的时候的读取操作是这样的
unsigned char spi_read()

{
while(!(SPSR&(1<<SPIF)));
return SPDR;
}
但是MCU一般是作为主机进行读操作的,比如读取芯片的状态寄存器,如果按上面那样写代码是不能进行读取的,因为未给SPDR赋值,也就无法启动SPI。所以进行读操作时需要先向SPDR写入一个数据。

下边的代码给SPDR写入了0,其实具体写入什么要参考芯片的手册,如果手册上没注明,那么可以写入0试试。

unsigned char spi_read()

{

SPDR=0;

while(!(SPSR&(1<<SPIF)));
return SPDR;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: