一、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接口传输数据,只需往其移位寄存器写入要发送的数据即可。
[cpp]view plaincopy
- voidSPIMasterTransmit(unsignedcharTranData)
- {
- SPDR=TranData;//数据放入SPI寄存器中
- while(!(SPSR&(1<<7)));//等候数据传输结束
- }
运用3片595级联,能够并行输出3个字符的数据。先在3*8个CLK时钟脉冲下酿制发送的数据移入595,最终在RCK的上升沿数据将并行充DRAINx口输出。
[cpp]view plaincopy
- OEN=0;
- for(i=0;i<3;i++)
- SPIMasterTransmit(Data[i]);
- OEN=1;
运用4片74HC166级联,将4个字节的数据移位经过SPI发送给Atemga162。
[cpp]view plaincopy
- inti;
- OEN=0;//封闭SPI的输出;
- IEN=0;//操控74HC166处于并行加载数据形式
- SPIMasterTransmit(0);//发生SPI数据传送的时钟,完结并行数据加载
- IEN=1;//操控74HC166处于移位形式
[cpp]view plaincopy
- for(i=0;i<4;i++)
- {
- SPIMasterTransmit(0);
- IOCELL[i]=SPDR;
- }
- IEN=0;
在最开端介绍了SPI的数据传输CLK需求主机宣布,主机需求想移位寄存器写随意的一个数。由于咱们仅仅需求并重输入.所以封闭SPI的输出即OEN = 0;
四、总结
当Atmega162只对外设进行读操作,咱们经过写SPI移位寄存器来宣布SCK,外设经过该时钟才能将数据交流给SPI移位寄存器。关于数字芯片74HC166和595的操作,以及移位寄存器、锁存器、触发器等基本概念有些含糊,先学习再下篇持续总结。
- 顶
- 0
- 踩