微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机 arm 常用的接口总结

单片机 arm 常用的接口总结

时间:11-26 来源:互联网 点击:
常用的接口有spi,I2c,uart等,他们都有自己的协议规定,下面谈谈它们之间的联系与区别:

1 I2C总线

涉及到I2C的编程主要涉及到两种情况:有专用控制器的arm芯片,无控制器的单片机芯片。有控制器的arm芯片,主要就是依据数据手册,通过设置相应的寄存器(控制寄存器,状态寄存器等)来实现相应的操作;然而对于没有控制器的单片机芯片,只有通过相应的引脚根据I2c协议来予以模拟实现。

首先来谈谈I2c协议。涉及到的信号主要分为三类:开始信号,停止信号,发送数据。既然是协议,就是双方事先约定好的规定,通信双方按照这个标准来进行数据的传输就可以了。保证数据传输的一致性的话,还有在某些时候发送一些附带的检查信息,例如ack信号,非ack信号;

开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

基于单片机的模拟I2C的信号,应该严格按照以上的时序进行研究实现。

接下来看看带有I2C的控制器的arms3c2410,s3c2440芯片的i2c的控制。主要包括四个相关的寄存器的设置:通过它们之间的相互配合,实现i2c的数据传输。

IICON:控制寄存器。主要是用于控制是否发出ACK信号,设置发送器的时钟,开启I2c中断,并标示中断是否发生。

IISTAT: 状态寄存器。选择I2C的工作模式,发出S信号,P信号,使能接受/发送功能,并标示各种状态,比如总线仲裁是否成功,作为从机时是否被寻址,是否接收到0地址,是否接收到ACK信号。

IICADD:多主机I2C地址寄存器;

IICDS:发送、接受数据移位寄存器;

接下来按照数据手册,根据其主机发送器的工作流程来编写相应的代码。

三个函数就可以实现简单的I2C协议: 读取,写入,中断;

编程思路如下:

写函数,读函数,仅仅是启动I2C传输,然后等待,直到数据在中断服务程序中传输完毕后再返回。

2 SPI总线协议的认识(SPI中的极性CPOL和相位CPHA)

最近在看关于Silicon Labs的C8051F347的某个驱动中,关于SPI部分初始化的代码,看到其对于SPI的设置为CPOL=1,CPHA=0,对于CPOL及CPHA的含义不了解,想要搞懂,这两个参数到底是什么意思,以及为何要这么设置。所以才去找了SPI的极性和相位的相关资料,整理如下。

设备与设备之间通过某种硬件接口通讯,目前存在很多种接口,SPI接口是其中的一种。

SPI中分Master主设备和Slave从设备,数据发送都是由Master控制。

一个master可以接一个或多个slave。

常见用法是一个Master接一个slave,只需要4根线:

SCLK:Serial Clock,(串行)时钟

MISO:Master In Slave Out,主设备输入,从设备输出

MOSI:Master Out Slave In,主设备输出,从设备输入

SS: Slave Select,选中从设备,片选

SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。即一个SPI的Master通过SPI与一个从设备,即上述的那些Flash,ADC等,进行通讯。
而主从设备之间通过SPI进行通讯,首先要保证两者之间时钟SCLK要一致,互相要商量好了,要匹配,否则,就没法正常通讯了,即保证时序上的一致才可正常讯。而这里的SPI中的时钟和相位,指的就是SCLk时钟的特性,即保证主从设备两者的时钟的特性一致了,以保证两者可以正常实现SPI通讯。

先简单说一下,关于SPI中一些常见的说法:

SPI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简单总结如下:

(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity =(时钟)极性;

(2) CKPHA (Clock Phase) = CPHA = PHA = Phase =(时钟)相位;

(3) SCK=SCLK=SPI的时钟;

(4) Edge=边沿,即时钟电平变化的时刻,即上升沿(rising edge)或者下降沿(falling edge);

对于一个时钟周期内,有两个edge,分别称为:

Leading edge=前一个边沿=第一个边沿,对于开始电压是1,那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;

Trailing edge=后一个边沿=第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;

本文采用如下用法

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top