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;
}
很多芯片与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;
}
相关文章推荐
- 标准AVR单片机模拟I2C总线的主机程序
- IAR for MSP430 和 AVR 单片机, 数据类型和指针大小(编译器手册)
- AVR复习笔记--AVR单片机SPI多机通讯【包括数据回传与接收】【0926】
- 进阶之路(基础篇) - 009 通过底层AVR方法实现SPI数据传输
- 51单片机中用中断方式实现串口数据发送与接收
- WCF分布式开发常见错误(2)无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。
- 使用rsync进行主机间数据同步及其他工具
- Unison+inotify实现两个主机目录之间的数据双向同步
- 不同Web主机上的Servlet之间数据对象的相互传输
- 单片机和MODEM接口及远程数据传输
- TCP/IP系列之网络分层和数据是怎么从一台主机传送到另外一台主机的
- AVR单片机的RTOS-AVRX
- 用VC++6.0实现PC机与单片机之间的数据交换
- 简单理解SNAT回流中的概念:路由器怎么知道外网返回的数据是局域网中哪台主机的
- 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库——安装配置OPEN-SSH,设置主机节点之间免密互访
- 在Rancher中使用NFS,实现容器跨主机共享数据
- 嵌入式TCP/IP协议单片机在网络通信中的数据传输技术
- 基于OHCI的USB主机 —— OHCI(批量端口读数据)
- STM32上SPI+DMA实现大批量读取flash数据
- STM32 SPI工作在主模式时用DMA方式接收数据