ARM Cortex-A9嵌入式微处理器体系结构与接口技术 课件 第11、12章 I2C总线协议、SPI总线_第1页
ARM Cortex-A9嵌入式微处理器体系结构与接口技术 课件 第11、12章 I2C总线协议、SPI总线_第2页
ARM Cortex-A9嵌入式微处理器体系结构与接口技术 课件 第11、12章 I2C总线协议、SPI总线_第3页
ARM Cortex-A9嵌入式微处理器体系结构与接口技术 课件 第11、12章 I2C总线协议、SPI总线_第4页
ARM Cortex-A9嵌入式微处理器体系结构与接口技术 课件 第11、12章 I2C总线协议、SPI总线_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章I2C总线协议思维导图2学习目标理解Exynos4412处理器的看门狗工作原理,包括其核心机制(通过递减计数器监控系统运行状态)、定时周期设置方法(如分频器配置与计数值关系),以及看门狗在系统复位或中断触发中的作用。3技能目标41.掌握Exynos4412看门狗寄存器的配置,包括预分频因子、分频器选择、中断/复位使能等参数设置;2.能够通过编程实现看门狗的初始化、喂狗操作及中断处理;3.熟悉看门狗定时器在系统监控中的应用。CONTENTS目录11.1I2C总线协议简介11.2I2C总线协议内容11.3I2C控制器详解11.4I2C控制器操作流程511.5I2C应用实例611.1

I2C总线协议简介I2C(Inter-IntegratedCircuit)总线(也称IIC或I²C)是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。Exynos4412芯片包含8个通用I2C接口控制器。I2C主要特点:●

只要求两条总线线路:一条串行数据线SDA、一条串行时钟线SCL。●

每个连接到总线的器件都可以通过唯一的地址。●

真正的多主机总线,支持冲突检测和仲裁,防止数据被破坏。●

串行的8位双向数据传输位。●

速率在标准模式下可达100Kbit/s、快速模式下可达400Kbit/s、高速模式下可达3.4Mbit/s。●

片上滤波器可以滤去总线数据线上的毛刺波保证数据完整。●

连接到相同总线的IC数量受到总线最大负载电容(400pF)限制。11.1

I2C总线协议简介811.2

I2C总线协议内容1.I2C总线引脚定义

每个I2C设备有2个引脚供通信连接使用。

I2C的2个引脚是:SDA(I2C数据引脚)SCL(I2C时钟引脚)2.I2C总线物理连接

I2C总线物理连接如图11-1所示,SDA和SCL连接线上连有两个上拉电阻,所有的I2C设备并联在总线上。图11-1I2C总线物理连接3.I2C总线术语术语描述发送器发送数据到总线的器件接收器从总线接收数据的器件主机初始化发送产生时钟信号和终止发送的器件从机被主机寻址的器件多主机同时有多于一个主机尝试控制总线但不破坏报文仲裁是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使报文不被破坏的过程同步两个或多个器件同步时钟信号的过程11.2

I2C总线协议内容

4.I2C总线信号类型

I2C总线在数据传输过程中有三种信号,它们分别为:开始信号(S)、结束信号(P)和应答信号(ACK),如图11-2所示。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。应答信号:接收设备在接收到8bit数据后,在第9个时钟周期,向发送设备发送低电平,表示成功收到数据。11.2

I2C总线协议内容图11-2I2C总线信号

如图11-2所示,当I2C总线是空闲的,SDA和SCL线都是高电平。I2C数据通信由主机发送开始信号(S)起始,到主机发送停止信号(P)结束。在开始信号和结束信号之间以字节为单位传输数据,每个字节后必须跟一个响应位,每次传输可以发送的字节数量不受限制。数据是一位一位地进行传输,先传输高位(MSB),再传输低位(LSB)。5.I2C总线时序11.2

I2C总线协议内容图11-2I2C总线信号发送器作为数据的发送方,接收器作为数据的接收方。根据SCL上的时钟信号进行数据传输同步,保证数据有效传输。SCL时钟为低电平周期时,发送器发送数据,SDA数据线上数据可以发生变化,SCL时钟为高电平周期时接收器接收数据,SDA数据线上数据必须保持稳定,如图11-3所示。5.I2C总线时序11.2

I2C总线协议内容图11-3I2C信号时序为了完成一个字节的发送操作,接收器必须将一个ACK信号发送到发送器。ACK信号在SCL线的第9个时钟周期产生。发送完一个字节后,第9个时钟周期发送器释放对SDA数据线的控制,SDA数据线由于上拉电阻的作用恢复到高电平,如图11-4所示。

接收器如果接收数据成功,将SDA数据线置为低电平作为ACK信号。发送器收到ACK信号,继续发送数据;接收器如果接收数据失败,则在第9个时钟周期不动作,SDA数据线一直为高电平。发送器没有接收到ACK信号,就会发出停止信号停止本次通信或发送开始信号,重新发送。6.I2C总线ACK信号11.2

I2C总线协议内容图11-4I2C总线ACK信号

I2C设备用一个7位或10位的数字,唯一标识自己。方便主机寻找自己,建立I2C通信。I2C设备地址由固定部分和可编程部分构成。这样I2C总线就可以支持一个I2C总线上挂载多个同样的器件,而地址不同。I2C地址的可编程部分最大数量就是可以连接到I2C总线上相同器件的数量。

一般可编程部分的值,由特定引脚的电器连接决定。例如,I2C器件用7位地址来标识自己,有4个固定的和3个可编程的地址位,那么相同的总线上共可以连接8个相同的器件。7.I2C总线设备地址11.2

I2C总线协议内容

I2C总线的寻址过程是通常在起始信号后的第一个字节决定了主机选择哪一个从机。例外的情况是可以寻址所有器件的广播地址,使用这个地址时理论上所有器件都会发出一个响应,但是也可以使器件忽略这个地址。第一个字节的头7位组成了从机地址,第8位它决定了数据传输的方向,第一个字节的最低位是0表示主机会写信息到被选中的从机;1表示主机会向从机读信息,如图11-5所示。10位寻址和7位寻址兼容,而且可以结合使用。10位寻址过程是起始信号后的头两个字节,通常决定了主机要寻址哪个从机。10位从机地址由在起始条件信号或重复起始信号后的头两个字节组成。第一个字节的头7位是11110XX的组合,其中最后两位XX是10位地址的两个最高位(MSB)。第一个字节的第8位是R/W位,决定了数据传输的方向,第一个字节的最低位是0,表示主机会写信息到被选中的从机:1表示主机会向从机读信息,如图11-6所示。8.I2C总线寻址11.2

I2C总线协议内容图11-5I2C总线地址图11-6I2C总线10位地址10位寻址7位寻址数据传输方向0:主写从1:主读从1611.3

I2C控制器详解11.3.1I2C总线协议简介Exynos4412可以通过I2C串行总线接口和各种外设进行数据传输。Exynos4412有9个I2C总线控制器,其中8个是通用的I2C控制器,另1个I2C控制器是专门为HDMI提供的。I2C控制器的特性:●9个多主从I2C总线接口(8个通用通道,1个高清多媒体接口(HDMI)专用通道)●7位寻址模式

●串行、8位定向、双向数据传输

●标准模式下支持最高100kbit/s的传输速率

●快速模式下支持最高400kbit/s的传输速率

●支持主设备发送、接收、从设备发送和接收操作

●支持中断或轮询事件

1711.3

I2C控制器详解11.3.1I2C总线协议简介

如图11-7所示,Exynos4412控制器通过读写寄存器来实现I2C通信。I2CCON寄存器和I2CSTAT寄存器用来配置、控制I2C控制器,并显示I2C控制器的状态。I2CDS寄存器是I2C数据移位寄存器,如果要发送数据,就向I2CDS寄存器内写入数值,如果接收数据,就读取I2CDS寄存器。I2CADD寄存器用于Exynos4412作为从机时的地址。图11-7I2C控制器框图I2C总线控制器寄存器:(1)I2C传输配置寄存器(I2CCONn,n=0-7)(2)I2C控制状态寄存器(I2CSTATn,n=0-7)(3)I2C地址寄存器(I2CADDn,n=0-7)(4)I2C接收发送数据寄存器(I2CDSn,n=0-7)(5)I2C总线传输配置寄存器(I2CLCn,n=0-7)11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解1.I2C传输配置寄存器(I2CCONn,n=0-7)I2CCONn寄存器用来对I2C控制器进行使能和时钟配置,如ACK使能、时钟设置、中断使能、中断标志位等。11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解2.I2C控制状态寄存器(I2CSTATn,n=0-7)

I2CSTATn寄存器用来对I2C控制器控制,如工作模式、输出使能、开始和停止信号的产生等。同时显示I2C控制器相关状态。11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解3.I2C地址寄存器(I2CADDn,n=0-7)

寄存器I2CADDn用于设置本机是从机时的7位地址。11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解4.I2C接收发送数据寄存器(I2CDSn,n=0-7)

寄存器I2CDSn用于I2C总线发送/接收操作的8位数据移位。11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解5.I2C总线传输配置寄存器(I2CLCn,n=0-7)

寄存器I2CLCn用于使能I2C总线滤波和选择SDA数据线延时长度。11.3

I2C控制器详解11.3.2I2C总线控制器寄存器详解Exynos4412微处理器中I2C控制器的操作:4种不同的工作模式(主机发送器、主机接收器、从机发送器、从机接收器)。结合I2C控制器寄存器详解,逐步操作即可。

如图11-8所示,为Exynos4412的I2C控制器的主机发送器工作模式,以其为例详细说明操作流程。其他工作模式操作方式类似。11.4

I2C控制器操作流程(1)配置主机发送模式设置对应的I2C引脚的功能为SDA和SCL。设置I2CCON[6]配置I2C发送时钟和中断使能。设置I2C发送使能,I2CSTAT[4]=0b1。(2)将要通信的I2C从机的地址和读写位写入I2CDS寄存器。(3)将0xF0写入I2CSTAT寄存器。I2CSTAT[7:6]=0b11设置主机发送模式I2CSTAT[5]=0b1写1,发送开始信号I2CSTAT[4]=0b1使能I2C串口发送(4)I2C控制器发出开始信号后,在第(2)步骤中写入的I2CDS寄存器地址自动发送到SDA总线上,用来寻找从机。(5)在ACK周期后,I2C控制器发生中断,I2CCON[4]被自动置1,I2C传输暂停。(6)I2C数据通信是否结束,结束跳转到(10),没有结束跳转到(7)。

11.4

I2C控制器操作流程(7)将要传输的数据写入I2CDS寄存器准备发送。(8)清除中断标志位,通过向I2CCON[4]中写0实现。(9)清除中断标志位后,I2CDS寄存器内的数据就开始发送到SDA总线上。发送完成后,跳转到(5)。(10)将0xD0写入I2CSTAT寄存器。

I2CSTAT[7:6]=0b11设置主机发送模式 I2CSTAT[5]=0b0写0,发送停止信号 I2CSTAT[4]=0b1,使能I2C发送和接收(11)清除中断标志位,通过向I2CCON[4]中写0实现。(12)延时等待一段时间,使得停止信号生效,I2C通信结束。11.4

I2C控制器操作流程2711.5

I2C应用实例11.5.1I2C实验1.I2C实验目的掌握I2C串行数据通信协议的使用方法;掌握EEPROM器件的读写访问方法;掌握Exynos4412处理器的I2C控制器的使用。2811.5

I2C应用实例11.5.1I2C实验2.I2C实验原理结合I2C理论基础,用I2C来操作三轴加速度传感器/陀螺仪芯片MPU6060。主要有以下特性:

带有可编程全量程范围的数字输出三轴加速度计,范围可设为±2g、±4g、±8g及±16g

内置的16位模数转换器允许同时采样加速度计数据,无需外部多路复用器

加速度计正常工作电流为500微安

低功耗模式,加速度计电流消耗为:1.25Hz时10微安,5Hz时20微安,20Hz时60微安,40Hz时110微安

具备方向检测与信号输出功能

支持触摸检测功能

用户可编程中断功能

高G值中断功能

用户自测功能2911.5

I2C应用实例11.5.1I2C实验如图11-9所示为MPU6050系列的器件地址组成方式。ADDRESSAD0=0AD0=1

11010001101001

图11-9MPU6050系列的器件地址组成方式

其中,AD0是MPU6050的第9引脚。如果AD0接地,地址为:1101000,如果拉高,地址为:1101001。如图11-10所示为MPU6050的电路原理图。可以看到SDA/SCL被接到了Exynos4412的I2C控制器上。图11-10MPU6050

原理图3011.5

I2C应用实例11.5.1I2C实验(2)随机地址读时序(RANDOMREAD)如图11-12所示。

字节读时序依次要发送器件地址(包括R/W用于读/写,此时为0,表示写方向)、器件片内数据要读出数据的地址、停止信号、再次写入开始信号、器件地址(包括R/W用于读/写,此时为1,表示读方向)、读出8位目标数据。图11-11MPU6050字节读时序3111.5

I2C应用实例11.5.2程序设计与代码详解编写程序,实现对重力感应芯片MPU6050的Z轴坐标读操作。1.寄存器设置(1)配置GPIO为I2C模式;(2)写I2C设备地址;(3)写I2C页地址;(4)读/写I2C芯片MPU6050的Z轴寄存器寄存器数据。3211.5

I2C应用实例11.5.2程序设计与代码详解2.程序编写#include"exynos_4412.h"#include"uart.h"#define SMPLRT_DIV 0x19 #define CONFIG 0x1A #define GYRO_CONFIG 0x1B #define ACCEL_CONFIG 0x1C #define ACCEL_XOUT_H 0x3B#define ACCEL_XOUT_L 0x3C#define ACCEL_YOUT_H 0x3D#define ACCEL_YOUT_L 0x3E#define ACCEL_ZOUT_H 0x3F#define ACCEL_ZOUT_L 0x40#define TEMP_OUT_H 0x41#define TEMP_OUT_L 0x42#define GYRO_XOUT_H 0x43#define GYRO_XOUT_L 0x44#define GYRO_YOUT_H 0x45#define GYRO_YOUT_L 0x46#define GYRO_ZOUT_H 0x47#define GYRO_ZOUT_L 0x48#define PWR_MGMT_1 0x6B #define WHO_AM_I 0x75 #define SlaveAddress 0xD0 /*****************iicwriteabyteprogrambody***************/voidiic_write(unsignedcharslave_addr,unsignedcharaddr,unsignedchardata){ I2C5.I2CDS=slave_addr; I2C5.I2CCON|=(1<<7)|(1<<6)|(1<<5);/*ENABLEACKBIT,PRESCALER:512,,ENABLERX/TX*/ I2C5.I2CSTAT|=(0x3<<6)|(1<<5)|(1<<4);/*MasterTransmode,START,ENABLERX/TX,*/ while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CDS=addr; I2C5.I2CCON&=~(1<<4); //Clearpendingbittoresume. while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CDS=data; //Data I2C5.I2CCON&=~(1<<4); //Clearpendingbittoresume. while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CSTAT=0xD0;//stop I2C5.I2CCON&=~(1<<4); mydelay_ms(10);}3311.5

I2C应用实例11.5.2程序设计与代码详解2.程序编写/*****************iicreadabyteprogrambody*****************/voidiic_read(unsignedcharslave_addr,unsignedcharaddr,unsignedchar*data){ I2C5.I2CDS=slave_addr; I2C5.I2CCON|=(1<<7)|(1<<6)|(1<<5);/*ENABLEACKBIT,PRESCALER:512,,ENABLERX/TX*/ I2C5.I2CSTAT|=(0x3<<6)|(1<<5)|(1<<4);/*MasterTransmode,START,ENABLERX/TX,*/ while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CDS=addr; I2C5.I2CCON&=~(1<<4); //Clearpendingbittoresume. while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CSTAT=0xD0;//stop I2C5.I2CDS=slave_addr|0x01; //Read I2C5.I2CCON|=(1<<7)|(1<<6)|(1<<5);/*ENABLEACKBIT,PRESCALER:512,,ENABLERX/TX*/ I2C5.I2CSTAT|=(2<<6)|(1<<5)|(1<<4);/*Masterreceivemode,START,ENABLERX/TX,*/ while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CCON&=(~(1<<7))|(~(1<<4));/*Resumetheoperation&noack*/ while(!(I2C5.I2CCON&(1<<4))); I2C5.I2CSTAT=0x90; I2C5.I2CCON&=~(1<<4); /*cleaninterruptpendingbit*/ *data=I2C5.I2CDS; mydelay_ms(10);}3411.5

I2C应用实例11.5.2程序设计与代码详解2.程序编写/********************MPU6050_Initprogrambody****************/voidMPU6050_Init(){ iic_write(SlaveAddress,PWR_MGMT_1,0x00); iic_write(SlaveAddress,SMPLRT_DIV,0x07); iic_write(SlaveAddress,CONFIG,0x06); iic_write(SlaveAddress,GYRO_CONFIG,0x18); iic_write(SlaveAddress,ACCEL_CONFIG,0x01);}/***************getMPU6050dataprogrambody*************/intget_data(unsignedcharaddr){ chardata_h,data_l; iic_read(SlaveAddress,addr,&data_h); iic_read(SlaveAddress,addr+1,&data_l); return(data_h<<8)|data_l;}3511.5

I2C应用实例11.5.2程序设计与代码详解2.程序编写/*---------------------------------MAINFUNCTION------------------------------*/intmain(void){ intdata; unsignedcharzvalue; GPX2.CON=0x1<<28; GPB.CON=(GPB.CON&~(0xF<<12))|0x3<<12;//GPBCON[3],I2C_5_SCL GPB.CON=(GPB.CON&~(0xF<<8))|0x3<<8; //GPBCON[2],I2C_5_SDA mydelay_ms(100); uart_init();/*---------------------------------------------------------------------*/ I2C5.I2CSTAT=0xD0; I2C5.I2CCON&=~(1<<4); /*cleaninterruptpendingbit*//*---------------------------------------------------------------------*/ mydelay_ms(100); MPU6050_Init(); mydelay_ms(100); printf("\n**********I2Ctest!!***********\n"); while(1) { //Turnon GPX2.DAT|=0x1<<7; data=get_data(GYRO_ZOUT_H); printf("GYRO-->Z<---:Hex:%0x",data); printf("\n"); mydelay_ms(20); //Turnoff GPX2.DAT&=~(0x1<<7); mydelay_ms(500); } return0;}3611.6

本章小结

本章通过系统化梳理I2C总线协议的核心技术要点,构建了从理论基础到工程实践的知识体系。首先,介绍了I2C总线作为双线制串行通信标准的典型特征,重点剖析了其主从式架构、多设备仲裁机制在嵌入式系统中的独特优势。在协议层面对总线物理连接拓扑、时序规范(包括起始/停止条件、数据有效性窗口)、ACK/NACK应答机制等关键技术要素进行了深入解读,特别强调了设备地址编码规则与7/10位寻址模式的应用场景。然后,针对I2C控制器的实现细节,本章详细解构了I2CCON控制寄存器的时钟预分频配置、中断使能策略,以及I2CSTAT状态寄存器的模式切换逻辑。通过配置流程图解说明了主机模式下完整传输序列的实现步骤,包括起始条件生成、设备地址广播、数据段传输、终止条件触发的完整生命周期管理。实验环节以MPU6050传感器驱动开发为切入点,通过iic_write/iic_read函数原型演示了寄存器配置、时序控制、中断处理等关键编程技术。最后,通过实例,验证了I2C总线在运动传感器数据交互中的实际应用价值。谢谢THEEND第12章SPI总线思维导图39学习目标1.理解SPI总线的基本工作原理及通信机制;2.掌握SPI总线的物理拓扑结构及信号传输原理;3.熟悉SPI总线四种工作时序模式;4.掌握Exynos4412处理器的SPI控制器架构特点;5.理解SPI配置寄存器的位定义及功能参数。40技能目标411.能够配置SPI控制器的时钟分频参数;2.能够通过寄存器设置实现SPI通信模式切换;3.掌握SPI总线主从设备的数据收发编程方法;4.能够完成SPI-CAN总线回环测试实验;5.具备SPI设备驱动程序开发及调试能力。CONTENTS目录12.1SPI总线基础12.2Exynos4412-SPI控制器12.3SPI应用实例424312.1

SPI总线基础12.1.1SPI总线概述SPI接口(SerialPeripheralInterface)是由摩托罗拉公司设计的一种标准四线同步双向串行总线,它可以使MCU与各种外围设备以串行方式进行通信以交换信息,在当前的嵌入式产品中有着广泛的应用。Exynos4412芯片包含三个SPI接口控制器。SPI接口的主要特点如下:●全双工;●可以当作主设备或从设备工作;●提供可编程时钟;●发送结束中断标志;●写冲突保护;●总线竞争保护。4412.1

SPI总线基础12.1.2SPI总线物理链接与信号说明1.SPI总线引脚定义SPI总线协议很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备。主设备是产生时钟信号,并发出片选信号的设备。从设备是接收时钟信号,并接收片选信号的设备。SPI总线主设备和从设备通信需要4条线连接(当单向传输时3条线也可以),每个SPI设备都有4个引脚供通信连接使用。SPI的四个引脚是:CLK(串行时钟引脚);MISO(主设备输入/从设备输出数据引脚);MOSI(主设备输出/从设备输入数据引脚);CS(从设备选择引脚,低电平有效)。4512.1

SPI总线基础12.1.2SPI总线物理链接与信号说明2.SPI总线物理连接SPI总线主设备和从设备的连接的四条线分别为:CS对应CSCLK对应CLKMOSI(主)对应MOSI(从)MISO(主)对应MISO(从)SPI总线可以同时并联多个外围设备,但一个时刻只能有一对主从设备通信。主设备通过CS片选引脚发出信号去选择从设备。SPI总线物理连接如图12-1所示。图12-1SPI总线物理连接总线图4612.1

SPI总线基础12.1.2SPI总线物理链接与信号说明3.SPI总线信号类型

如表12-1所示。信号名称信号描述CLK时钟信号(Clock)主设备发出,用于控制数据发送和接收的时序MISO数据信号(MasterInputSlaveOutput)作为主设备时,从从设备接收输入数据作为从设备时,向主设备发送输出数据MOSI数据信号(MasterOutputSlaveInput)作为主设备时,向从设备发送输出数据作为从设备时,从主设备接收输入数据CS片选信号(ChipSelect)从设备选择信号当CS为低电平时,所有数据发送/接收依次被执行表12-1SPI总线类型4712.1

SPI总线基础12.1.2SPI总线物理链接与信号说明4.SPI总线时序SPI总线时序如图12-2所示。图12-2SPI总线时序图SPI数据通信起始由主设备发送CS片选信号并保持到通信的结束,同时主设备发出CLK时钟信号用于数据发送和接收的时序控制,SPI是串行通信协议,也就是说数据是一位一位传输的。数据在时钟上升沿或下降沿时发送,在紧接着的下降沿或上升沿被接收,完成一位数据传输。在8次时钟信号的改变(上升沿和下降沿为一次)后,就可以完成8位数据的传输。在时序图12-2中,发送设备在CLK的时钟信号的上升沿时发送一位数据,接收设备在CLK时钟信号的下降沿时接收一位数据。4812.1

SPI总线基础12.1.2SPI总线物理链接与信号说明5.SPI总线数据传输格式SPI设备支持4种不同的数据传输格式,主要是数据发送和采集的时间不同,在时钟信号上沿或下沿采集有不同定义。SPI主设备和与之通信的从设备时钟相位和极性应该一致,可以通过配置SOC芯片SPI控制器的相关寄存器实现。4912.1

SPI总线基础12.1.2SPI总线物理链接与信号说明通过设置SPI总线的CPOL(极性)和CPHA(相位)的值,选定当前要使用的SPI数据传输格式,如表12-2所示。表12-2SPI数据传输格式例如:当设置CPHA=0、CPOL=0时,SPI总线数据传输格式如图12-3(a)所示。通过设置,可以得知:CPOL=0,SPI总线空闲时,SCLK为低电平。CPHA=0,SCLK第一个跳变沿采集,第二个跳变沿发送数据。对照图12-3(a),按照时间轴从左到右进行分析,在第一个时钟周期前,SPI总线上没有数据传输,SPI总线处在空闲状态,SCLK为低电平。第一个时钟周期开始,数据开始传输,第一位数据在SCLK第一个跳变沿之前已经传输到了MOSI引脚上,当SCLK的时钟信号发出第一个跳变沿(上升沿)时,SPI总线的从机捕获到该信号,对第一位数据采样。在第一个时钟周期的最后,发出第二个跳变沿(下降沿)时,主机将第二位数据传输到MOSI信号线上。后面的时钟周期依次重复第一个周期的过程,直到一个字节的8位数据信号传输完毕。CPOLCPHA功能控制SPI总线空闲时的时钟极性控制采样时的时钟相位值为0SPI总线空闲时,SCLK为低电平SCLK第一个跳变沿采样值为1SPI总线空闲时,SCLK为高电平SCLK第二个跳变沿采样5012.2

Exynos4412-SPI控制器12.2.1SPI控制器简介Exynos4412可以通过SPI串行总线接口和各种外设进行数据传输。Exynos4412有3个SPI总线控制器。每个SPI总线控制器都包括两个8位、16位和32位移位寄存器,分别用于传输和接收数据。SPI总线传输期间,数据可以同时发送(串行移出)和接收(串行移入)。该控制器的特性如下:●支持全双工通信。●支持8/16/32位移位寄存器。●支持8/16/32位总线接口。●支持摩托罗拉SPI协议和美国国家半导体SPI协议。●两个独立的32位宽的传输和接收FIFO。●支持主设备模式和从设备模式。●支持Receive-without-transmit操作。●Tx/Rx最大频率高达50MHz。5112.2

Exynos4412-SPI控制器12.2.2SPI控制器时钟源控制Exynos4412的时钟系统为SPI控制器提供了多种输入时钟源,如图12-5所示。图12-5SPI输入时钟源SPI_CLK的时钟最大为50MHz,通过以下设置流程获得。(1)设置SPI时钟源:通过MUXSPI0~2来选择时钟源,输出MOUTSPI0~2。(2)设置SPI时钟一级分频:设置DIVSPI0~2(1~16)。(3)设置SPI时钟二级分频:设置DIVSPI0~2_PRE(1~256)。(4)通过一个DIV(2),对SCLK_SPI进行二级分频,获得SPI_CLK。5212.2

Exynos4412-SPI控制器12.2.2SPI控制器时钟源控制SPI控制器时钟源控制相关寄存器如下:1.SPI时钟使能寄存器(CLK_GATE_IP_PERIL)2.SPI多路选择时钟输出屏蔽寄存器(CLK_SRC_MASK_PERIL1)3.SPI时钟源配置寄存器(CLK_SRC_PERIL1)4.SPI时钟分频寄存器(CLK_DIV_PERILn,n=1、2)5.SPI时钟分频状态寄存器(CLK_DIV_STAT_PERIL1)5312.2

Exynos4412-SPI控制器12.2.2SPI控制器时钟源控制1.SPI时钟使能寄存器(CLK_GATE_IP_PERIL)CLK_GATE_IP_PERIL寄存器可以控制SPI控制器的时钟使能和禁止,在SPI控制器不使用时,可禁止SPI控制器时钟,以达到减少功耗的目的。CLK_GATE_IP_PERIL寄存器如表12-3所示。表12-3

CLK_GATE_IP_PERIL寄存器(地址=00x1003C950)CLK_GATE_IP_PERIL位描述复位值CLK_SPI2[18]SPI2控制器时钟使能0:禁止1:使能1CLK_SPI1[17]SPI1控制器时钟使能0:禁止1:使能1CLK_SPI0[16]SPI0控制器时钟使能0:禁止1:使能15412.2

Exynos4412-SPI控制器12.2.2SPI控制器时钟源控制2.SPI多路选择时钟输出屏蔽寄存器(CLK_SRC_MASK_PERIL1)CLK_SRC_MASK_PERIL1寄存器可以控制SPI多路选择时钟的输出或屏蔽。CLK_SRC_MASK_PERIL1寄存器如表12-4所示。表12-4CLK_SRC_MASK_PERIL1寄存器(地址=00x1003c354)CLK_SRC_MASK_PERIL1位描述复位值SPI2_MASK[24]MUXSPI2时钟输出屏蔽位0:屏蔽1:输出1SPI1_MASK[20]MUXSPI1时钟输出屏蔽位0:屏蔽1:输出1SPI0_MASK[16]MUXSPI0时钟输出屏蔽位0:屏蔽1:输出15512.2

Exynos4412-SPI控制器12.2.2SPI控制器时钟源控制3.SPI时钟源配置寄存器(CLK_SRC_PERIL1)CLK_SRC_PERIL1寄存器用来配置SPI控制器的时钟源。CLK_SRC_PERIL1寄存器如表12-5所示。表12-5

CLK_SRC_PERIL1寄存器5612.2

Exynos4412-SPI控制器12.2.2SPI控制器时钟源控制4.SPI时钟分频寄存器(CLK_DIV_PERILn,n=1、2)CLK_DIV_PERILn寄存器配置SPI0、SPI1、SPI2控制器的输入时钟的分频值,以配置合适的传输速度。CLK_DIV_PERILn寄存器如表12-6和表12-7所示。表12-6CLK_DIV_PERIL1寄存器(地址=00x1003C554)表12-7

CLK_DIV_PERIL2寄存器(地址=00x1003C558)5712.2

Exynos4412-SPI控制器12.2.2SPI控制器时钟源控制5.SPI时钟分频状态寄存器(CLK_DIV_STAT_PERIL1)

CLK_DIV_STAT_PERIL1是只读寄存器,SPI时钟分频参数设置后不会立刻稳定,该寄存器显示分频时钟是否稳定,只有分频时钟稳定后,才能进行SPI其他操作。CLK_DIV_STAT_PERIL1寄存器如表12-8所示。表12-8CLK_DIV_STAT_PERIL1寄存器(地址=00x1003C654)5812.2

Exynos4412-SPI控制器12.2.3SPI控制器寄存器详解1.SPI传输配置寄存器(CH_CFGn,n=0-2)2.SPI模式配置寄存器(MODE_CFGn,n=0-2)3.SPI从机选择信号配置寄存器(CS_REGn,n=0-2)4.SPI状态寄存器(SPI_STATUSn,n=0-2)5.SPI数据发送寄存器(SPI_TX_DATAn,n=0~2)6.SPI数据接收寄存器(SPI_RX_DATAn,n=0~2)5912.2

Exynos4412-SPI控制器12.2.3SPI控制器寄存器详解1.SPI传输配置寄存器(CH_CFGn,n=0-2)CH_CFGn寄存器用来对SPI控制器进行使能和传输配置,如:接收使能、发送使能、主从模式配置、传输方式相位配置、极性配置、软件复位等。CH_CFGn寄存器如表12-9所示。表12-9CH_CFG寄存器(地址=0x13920000、0x13930000、0x13940000)6012.2

Exynos4412-SPI控制器12.2.3SPI控制器寄存器详解2.SPI模式配置寄存器(MODE_CFGn,n=0-2)MODE_CFGn寄存器用来对SPI控制器模式配置,如FIFO、DMA等。MODE_CFGn寄存器如表12-10所示。表12-10MODE_CFGn寄存器(地址=0x13920008、0x13930008、0x13940008)6112.2

Exynos4412-SPI控制器12.2.3SPI控制器寄存器详解3.SPI从机选择信号配置寄存器(CS_REGn,n=0-2)

CS_REGn寄存器用来对SPI控制器上的CS引脚的从机选择信号进行设置、以及设置片选为手动模式或自动模式等。CS_REGn寄存器如表12-11所示。表12-11

CS_REG寄存器(地址=0x1392000C、0x1393000C、0x1394000C)6212.2

Exynos4412-SPI控制器12.2.3SPI控制器寄存器详解4.SPI状态寄存器(SPI_STATUSn,n=0-2)

SPI_STATUSn寄存器用来表示SPI控制器的当前状态,如表12-12所示。表12-12SPI_STATUSn寄存器(地址=0x13920014、0x13930014、0x13940014)6312.2

Exynos4412-SPI控制器12.2.3SPI控制器寄存器详解5.SPI数据发送寄存器(SPI_TX_DATAn,n=0~2)

程序将要通过SPI发送数据时,将数据填充到SPI_TX_DATAn寄存器中。SPI_TX_DATAn寄存器,如表12-13所示。表12-13SPI数据发送寄存器(地址=0x13920018、0x13930018、0x13940018)SPI_TX_DATAn位描述复位值TX_DATA[31:0]该寄存器存放要发送的数据06412.2

Exynos4412-SPI控制器12.2.3SPI控制器寄存器详解6.SPI数据接收寄存器(SPI_RX_DATAn,n=0~2)

SPI接收到的数据,会存放在SPI_RX_DATAn寄存器中。SPI_RX_DATAn寄存器,如表12-14所示。表12-14SPI数据接收寄存器(地址=0x1392001C、0x1393001C、0x1394001C)SPI_RX_DATAn位描述复位值RX_DATA[31:0]该寄存器存放接收到的数据06512.3

SPI应用实例12.3.1SPI实验1.SPI实验目的

(1)掌握MCP2515控制器的使用(2)掌握CAN总线的原理(3)掌握Exynos4412处理器的SPI功能6612.3

SPI应用实例12.3.1SPI实验2.SPI实验原理

介绍一种通过SPI信号转CAN总线信号的例子,使用CAN总线控制器MCP2515,如图12-6所示为该芯片的接线原理图。图12-6MCP2515原理图6712.3

SPI应用实例12.3.1SPI实验2.SPI实验原理表12-15MCP2515芯片指令集MCP2515自带的两个验收屏蔽寄存器和六个验收滤波寄存器,可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。MCP2515与MCU的连接是通过业界标准串行外设接口SPI来实现的。本章实验为通过SPI控制操作CAN总线控制器,来实现简单的CAN回环模式。关于CAN总线的相关内容请参考相关文档,这里主要介绍SPI的相关原理和操作。这一款芯片内部集成了9条指令,包括了通用的读、写、配置等命令,还有一个内置的状态寄存器,可以通过该寄存器获取芯片当前状态。如表12-15所示为MCP2515芯片指令集。6812.3

SPI应用实例12.3.1SPI实验2.SPI实验原理

仿真程序调试,使能SPI控制器,通过配置SPI相关寄存器,选择主机模式,总线宽度和通道宽度均设置为8bit,片选MCP2515芯片。然后初始化CAN控制器,将其设置为回环模式。连续读取8次终端上的用户输入,将8位数据通过SPI发送给CAN控制器,CAN的回环模式接收到发送的数据,再通过SPI发送到Exynos4412内SPI控制器中。6912.3

SPI应用实例12.3.2

程序设计与代码详解1.实验内容SPI控制器及CAN总线控制器MCP2515的基本编程方法:(1)设置时钟源并配置分频值等参数。(2)软复位后,并设置SPI配置寄存器。(3)设置模式寄存器。(4)设置从机选择寄存器。(5)收发数据。7012.3

SPI应用实例12.3.2

程序设计与代码详解2.程序编写(1)实现SPI的读写功能实验。通过SPI往MCP2515控制器的某一寄存器写值“0x80”,再通过SPI读此寄存器的值。/*------------------MAINFUNCTION-----------------*/intmain(void){ unsignedchardata=0; GPX2.CON=0x1<<28; uart_init(); GPC1.CON=(GPC1.CON&~0xffff0)|0x55550;//设置IO引脚为SPI模式 /*spiclockconfig*/ CLK_SRC_PERIL1=(CLK_SRC_PERIL1&(~(0xF<<24)))|(6<<24);//0x6:0110=SCLKMPLL_USER_T800Mhz CLK_DIV_PERIL2=19<<8|3;//SPI_CLK=800/(19+1)/(3+1) soft_reset(); //软复位SPI控制器 SPI2.CH_CFG&=~((0x1<<4)|(0x1<<3)|(0x1<<2)|0x3);//mastermode,CPOL=0,CPHA=0(FormatA) SPI2.MODE_CFG&=~((0x3<<17)|(0x3<<29));//BUS_WIDTH=8bit,CH_WIDTH=8bit SPI2.CS_REG&=~(0x1<<1);//选择手动选择芯片delay(10);//延时printf("\n*****************SPItest!!******************\n");while(1){reset_2515();//复位mydelay_ms(10);printf("spisend'0x80'to2515......\n");write_byte_2515(0x0f,0x80);//CANCTRL寄存器-进入配置模式DATASHEET58页mydelay_ms(10);data=read_byte_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论