Atmega162串行外设接口SPI
来源:互联网 发布:淘宝店铺排行手机版 编辑:程序博客网 时间:2024/04/27 10:20
一、Atmega162的SPI接口基本概念与工作原理
SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口。SPI主要使用4个信号:MOSI(master in slave out)、MISO(master out slave in)、SCK(串行时钟)、CS(片选)。其中SCK由主机产生,作为传输的同步时钟,控制所有的数据传输。主机和外设都包含一个串行移位寄存器。主机通过向自己的SPI串行寄存器写入一个字节来发起一次传输,然后通过MOSI信号线将数据传给外围设备,同时外设将自己移位寄存器中的内容通过MISO信号线返给主机。这样两个移位寄存器中的内容完成交换。也就是说,外设的写操作和读操作是同步完成的。在实际应用中,如果只进行写操作,则主机只需忽略收到的字节即可;如果主机要读外设的数据,必须发送一个自己来引发从机的传输,发送的这个字节可以是任意数据。
二、SN74HC166与TPIC6A595
SN74HC166 是8-BIT 并行加载移位寄存器。A~H为并行输入管脚,SER串行输入管脚,QH为输出管脚,SH/LD管脚用于设置并行加载和移位模式,CLK为同步时钟,控制数据传输。
TPIC6A595是8-BIT移位寄存器。SER IN管脚串行输入数据, SER OUT管脚并行输出数据, SRCK为串行移位的脉冲, RCK的上升沿将使数据并行输出到DRAIN0~DRAIN7。
在电路中使用了4片74HC166的级联,采集32个IO点,使用3片595控制24个输出端口。电路如下图所示
74H166数据采集
595数据并行输出
电路中SCK,OEN,IEN分别接Atmega162的SPI接口。
三、SPI接口和外设之间的数据传输
使用Atemga162的SPI接口传输数据,只要往其移位寄存器写入要发送的数据即可。
void SPIMasterTransmit(unsigned char TranData) { SPDR=TranData; //数据放入SPI寄存器中 while(!(SPSR&(1<<7))); //等待数据传输完毕}使用3片595级联,可以并行输出3个字符的数据。先在3*8个CLK时钟脉冲下将要发送的数据移入595,最后在RCK的上升沿数据将并行充DRAINx口输出。
OEN=0;for(i=0;i<3;i++) SPIMasterTransmit(Data[i]); OEN=1;使用4片74HC166级联,将4个字节的数据移位通过SPI发送给Atemga162。
int i;OEN=0; //关闭SPI的输出;IEN=0; //控制74HC166处于并行加载数据模式SPIMasterTransmit(0);//产生SPI数据传送的时钟,完成并行数据加载IEN=1; //控制74HC166处于移位模式for(i=0;i<4;i++){ SPIMasterTransmit(0); IOCELL[i]=SPDR;}IEN=0;在最开始介绍了SPI的数据传输CLK需要主机发出,主机需要想移位寄存器写随意的一个数。因为我们只是需要采集输入.所以关闭SPI的输出即OEN = 0;
四、总结
当Atmega162只对外设进行读操作,我们通过写SPI移位寄存器来发出SCK,外设通过该时钟才能将数据交换给SPI移位寄存器。对于数字芯片74HC166和595的操作,以及移位寄存器、锁存器、触发器等基本概念有些模糊,先学习再下篇继续总结。
- Atmega162串行外设接口SPI
- SPI 串行外设接口
- 串行外设接口(SPI)
- SPI(Serial Peripheral Interface)串行外设接口
- 深入理解串行外设接口(SPI)总线及应用
- SPI串行外围设备接口
- 2. 同步外设接口(SPI)
- STC89C52MCU--串行通信接口SPI
- Android Things:外设I/O接口-SPI
- 串行接口SPI接口应用设计
- 串行接口SPI接口应用设计
- I2C SPI UART串行接口对比分析
- STM32--SPI协议(串行外围设备接口)
- 【Cortex-M0】16串行外围设备接口(SPI)控制器
- dsp28335 SPI总结(高速同步串行接口)
- STM32F1XX学习—串行总线协议和SPI接口介绍
- spi 外设驱动(spi_driver)
- SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍
- 11.6 extract subclass 提炼子类
- 从一个表导入到另一个表
- Struts1_02_struts1.x源代码分析
- 寻址空间
- linux ln 命令的使用
- Atmega162串行外设接口SPI
- Linq中如何实现inner join、left join
- PL/SQL 动态CURSOR运用
- jQuery style属性
- 解决google网站打开慢的解决方法
- Ubuntu 11.04 安装 ns2-allinone-2.34【完整版】(附各种问题解决方案)
- 端口占用查看
- delphi抓取网页内容的程序
- DisableControls方法