Atmega162串行外设接口SPI

本文介绍了Atmega162的SPI接口的基本概念与工作原理,详细阐述了如何利用SPI接口与SN74HC166、TPIC6A595进行数据传输,并通过实例展示了如何使用这些设备进行数据采集和并行输出。
 一、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主要特性如下: 高性能、低功耗的 8 位AVR 微处理器 先进的RISC 结构 131 条指令 – 大多数指令执行时间为单个时钟周期 32 个8 位通用工作寄存器 全静态工作 工作于16 MHz 时性能高达16 MIPS 只需两个时钟周期的硬件乘法器 非易失性程序和数据存储器 16K字节的系统内可编程Flash 擦写寿命: 10,000 次 具有独立锁定位的可选Boot 代码区 通过片上Boot 程序实现系统内编程 真正的同时读写操作 512字节的EEPROM 擦写寿命: 100,000 次 1K字节的片内SRAM 64K 字节可选外部存储空间 可以对锁定位进行编程以实现用户程序的加密 通过SPI 接口进行系统内编程 JTAG 接口( 与IEEE 1149.1 标准兼容) 符合JTAG 标准的边界扫描功能 支持扩展的片内调试功能 通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程 外设特点 两个具有独立预分频器和比较器功能的8位定时器/计数器 两个具有预分频器、比较功能和捕捉功能的16位定时器/计数器 具有独立振荡器的实时计数器RTC 两路8 位PWM 通道 6路编程分辨率从1 到 16 位可变的PWM 通道 8路10 位ADC 8 个单端通道 7 个差分通道 2 个具有可编程增益(1x, 10x, 或200x)的差分通道 面向字节的两线接口 可编程的串行USART 可工作于主机/ 从机模式的SPI 串行接口 具有独立片内振荡器的可编程看门狗定时器 片内模拟比较器 特殊的微控制器特点 上电复位以及可编程的掉电检测 片内经过标定的RC 振荡器 片内/ 外中断源 5种休眠模式:空闲模式、省电模式、掉电模式和待机模式以及扩展待机模式 I/O 和封装 35个可编程的I/O 口 40引脚PDIP 封装, 44引脚TQFP 封装, 与 44 引脚MLF 封装 工作电压: ATmega162V:1.8 - 5.5V ATmega162:2.7 - 5.5V 速度等级 ATmega162V:0 - 8 MHz ATmega162:0 - 16 MHz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值