文档库 最新最全的文档下载
当前位置:文档库 › PSOC3系统SPI模块的数据通信技巧

PSOC3系统SPI模块的数据通信技巧

PSOC3系统SPI模块的

数据通信技巧

作者/万选明,刘织财/柳州铁道职业技术学院

●●●

图1 PSOC3内置的SPI模组

本文将介绍PSOC3/5的SPI 模块,通过本文,读者可以掌握SPI 通信原理和如何使用PSOC 的SPI 模组与其他设备之间的数据通信。

一、原理简介

串行外围设备接口(Serial Peripheral Interface ,SPI)总线技术是摩托罗拉公司推出的同步串行接口。SPI 用于CPU 与各种外围设备进行全双工、同步串行通讯。SPI 可以同时发出和接收数据,只需要4条通讯线就可以完成MCU 与外围设备的通信。这4条信号线分别是主机输出从机输入数据线(MOSI),从机输出主机输入数据线(MISO)、低电平有效从机选择线(SS),串行时钟线(SCLK)。其功能定义如表1所示。

SPI 设备分为主设备(SPIM)和从设备(SPIS),主设备向从设备输出时钟和数据,从设备的数据输出又作为主设备的数据输入。主从设备的协同工作需要一个循环移位寄存器来辅助完成,主设备用这个寄存器产生时钟和初始化数据传输。如果SPIM 要向SPIS

发送数据,首先启动SPIM。SCLK 时钟信号有效,将SS 置低使能SPIS,调用相应的API 函数,SPIM 和SPIS 就可以进行数据传输。如果要向SPIS 中的某个寄存器写数据,先发送相应寄存器地址,再发送要写的数据。数据传输过程中,主从设备都是同时发送和接收数据;同样,要读取从机数据也需要先发送一个寄存器地址,再从该地址读数据。

PSOC3器件可配置成的SPI 的用户模块包括SPI Master 模块(SPIM)和SPI Slave 模块(SPIS),这两个模块存放在communications SPI 下,图标如图1所示。

PSOC3内置的SPI 模组的主要特性有:1)支持标准SPI 协议;

2)支持SPI 时序模式0,1,2,3;3)支持 3~16位的数据宽度;

4)主设备最高传输速率达9Mbps,从设备最高传输速率达5Mbps ;

5)2种可选的数据传输方向(MSB 在前、LSB 在前)。

名称功 能说 明

SS 片选从设备选择(低电平

有效)SCLK 串行时钟主设备产生的时钟MOSI 主机输出从机输入主机数据输出MISO

从机输出主机输入

从机数据数据

表1 SPI模块信号定义

函数名称

功能描述

SPIM_Start / SPIM_Start 配置SPIM/SPIS工作模式,并使能SPIM/SPIS模块

SPIM_Stop / SPIS_Stop

关闭 SPIM/SPIS 模块

SPIM_WriteTxData / SPIS_WriteTxData SPIM向发送缓存区发送一个字节/字的数据SPIM_ReadRxData / SPIS_ReadRxData 从接收缓存区读回一个字节/字的数据

SPIM_ClearRxBuffer / SPIS_ClearRxBuffer

清除SPIM/SPIS接收缓存区

SPIM_ClearTxBuffer / SPIS_ClearTxBuffer

清除SPIM/SPIS发送缓存区

SPIM_ClearFIFO / SPIS_ClearFIFO

清SPIM/SPIS FIFO

表2 SPIM/SPIS用户模块常用API函数列表

图2 MAX7221应用电路

寄存器名称ADDRESS 配置参数说明测试模式0x0f 0x00非测试模式关断寄存器0x0c 0x01非关断模式扫描限制寄存器0x0b 0x03数码管0,1,2,3显示

亮度寄存器0x0a 0x05亮度为6/16译码模式0x090x0f

数码管0,1,2,3编码数码管00x01数码管0显示数据数码管10x02数码管0显示数据数码管20x03数码管0显示数据数码管3

0x04

数码管0显示数据

表3 MAX7221初始化参数

PSOC-MAX7221。

创建原理图,打开TopDesign.cysch,放置一个SPIM 模组 (放置路径:Cypress Component Catalog

Communications SPI,SPI Master Full Duplex

mode Macro [V2.10]),双击SPIM —1对SPIM 进行配置。配置的目的是让主、从机双方遵守同样的协议,对于MAX7221而言,其采用模式0传输数据,数据长度为16位二进制数,用D0~D15表示,其中D8~D11为寄存器地址,D0~D7为数据,D12~D15位为无关项,首先收到的数据是D15,即最高有效位(MSB),故对SPIM 配置要与MAX7221一致,如图3所示。

打开图3中的Advanced, 如图4所示,在这个标签中我要做以下几项设置,时钟可以选择内部时钟,也可以选择外部时钟。如选择外部时钟,需要注意的是输入时钟频率至少要求是波特率的2倍。因为传输一个数据位需要2个时钟周期。除此之外,还有接收/发送缓存区的大小设置,中断使能等,根据实际需要进行设置,本例只选择内部时钟,其余默认。

引脚映射,打开以.cydwr 为后缀名的文件,对SPIM 引脚映射,如图5所示。

创建好原理图后,点击Build Build PSOC3-Max7221,编译后展开系统自带API 函数。打开main.c,编写程序,程序代码如下:

#include

void Send_TO_Max7221(uint16 Register ,uint16 Data);

图3 PIM参数配置1

图4 SPIM参数配置2

图5 引脚映射表2是PSOC3可配置SPI模块的一些常用API函数。

二、典型应用

PSOC3内置的SPI 模组既有主机模组(SPIM)又有从机模组(SPIS),也就是说PSOC3本身既可做主机又可做从机,本例将采用PSOC3作为主机,选择MAX7221作为从机,来实现二者之间的数据通信,MAX7221是一款串行SPI 接口、8位LED 显示驱动器,是一款比较典型的芯片,相信大家并不陌生,今天我们就用PSOC3控制MAX7221在LED 上显示数字。

图2是本例使用的MAX7221工作电路,由于MAX7221对PSOC3而言仅作为输出设备,无数据返回,所以本例只用了SS、SCLK、MOSI 三个信号线,MISO 没有使用。使用MAX7221前需要对其做一些简单配置。配置参数如表3。

打开 PSOC Creator ,创建一个项目,命名为

//函数声明

void main()

{

SPIM_1_Start(); //启动SPI主机

/*初始化MAX7221设置*/

Send_TO_Max7221(0x0c,0x01); //关断寄存器--正常操作模式Send_TO_Max7221(0x0b,0x03); //扫描控制仅0-3位显示

Send_TO_Max7221(0x0a,0x05); //亮度控制--6/16

Send_TO_Max7221(0x09,0x0f); //编码方式:0-3位采用编码方式Send_TO_Max7221(0x0f,0x00); //非测试模式

/*送显示数据给MAX7221*/

Send_TO_Max7221(0x01,0x08);

//第1位LED显示8

Send_TO_Max7221(0x02,0x03); //第2位LED显示3

Send_TO_Max7221(0x03,0x09); //第3位LED显示9

Send_TO_Max7221(0x04,0x0f); //第4位LED不显示

for(;;)

{

}

}

void Send_TO_Max7221(uint16 Register,uint16 Data)

{

uint16 Data16 = 0;

SPIM_1_ClearTxBuffer();

//发送前清除发送缓冲区

Data16 = (Register <<8) | Data;

//将寄存器地址与命令数据合成一个16位数据

SPIM_1_WriteTxData(Data16);

//通过SPI主机模块把16位数据送出去

while(!(SPIM_1_ReadStatus() & SPIM_1_STS_TX_FIFO_ EMPTY))

{

;

}

SPIM_1_ClearFIFO() ;

//清FIFO

}

编译和调试,连接硬件,将编译后的程序下载到PSOC开发板,观察实验现象是否正确,如不正确,检查问题所在,图6是笔者的实验现场。

三、总结

本文以PSOC3为例,介绍了SPI总线的工作原理,并结合MAX7221给出了SPI总线的使用方法。通过该文,读者可以了解SPI模组的工作原理和使用流程。可以利用SPI串行通信方便地将各种SPI设备连接起来,也可以用SPI模组扩展MCU的端口。因此希望读者多加练习,将PSOC的SPI资源应用到实际项目中来。读者在使用过程中有什么困难,也可跟我交流,博客地址:http:// https://www.wendangku.net/doc/e99438997.html,/luohe2008/blog/ 。

图6 实验现场

END

相关文档