MSP430程序库(五)SPI同步串行通信

MSP430程序库(五)SPI同步串行通信

ID:36862043

大小:259.25 KB

页数:6页

时间:2019-05-16

MSP430程序库(五)SPI同步串行通信_第1页
MSP430程序库(五)SPI同步串行通信_第2页
MSP430程序库(五)SPI同步串行通信_第3页
MSP430程序库(五)SPI同步串行通信_第4页
MSP430程序库(五)SPI同步串行通信_第5页
资源描述:

《MSP430程序库(五)SPI同步串行通信》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、MSP430程序库<五>SPI同步串行通信SPI总线系统是一种同步串行外设接口;是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。许多的芯片都用这种协议通信:EEPROM、Flash、实时时钟、AD转换器、数字信号处理器等:MSP430的USART模块不仅能够实现异步模式(见:MSP430程序库<二>UART异步串口),而且支持同步串行通信(即SPI模式);其SP

2、I支持3线、4线操作,支持主机模式和从机模式,字符长度可以7位或8位等。由于要用AD7708芯片完成AD采样,AD7708是通过SPI与其它设备通信的;本程序比较简化,只完成了主机模式的初始化。硬件介绍:SPI:SPI是Motorola首先在其MC68HCXX系列处理器上定义的,它是一种同步的高速串行通信协议,有关SPI协议的详细内容,参考:SPI_互动百科。MSP430对SPI的支持:当msp430USART模块控制器UxCTL的位SYNC置位时,USART模块工作于同步模式,对于149即工作于SPI模

3、式,若是169,USART0可以支持I2C,可以通过另一控制位I2C控制,I2C位0则工作于SPI。在SPI模式下,允许单片机以确定的速率发送和接收7位或8位数据。同步通信与异步通信类似;同步通信和异步通信寄存器资源一致,具体寄存器的不同位之间的功能存在差异;具体寄存器内容参见TI提供的用户指南。USART模块的SPI操作可以是3线和4线,其信号如下:SIMO:从进主出,主机模式下,数据输出;从机模式下,数据输入。SOMI:从出主进,主机模式下,数据输入;从机模式下,数据输出。UCLK:USARTSPI模

4、式时钟,信号有主机输出,从机输入。STE:从机模式发送接收允许控制脚,用于4线模式,控制多主从系统中多个从机,避免发生冲突。具体方式如下(图截自用户指南):四线主机模式:STE为高电平,SIMO和UCLK操作正常;STE为低电平,SIMO和UCLK被置为输入方向,主机控制权让出。四线从机模式:STE为高电平,从机的发送和接收无效,且把SOMI置为输入方向;STE为低电平,发送接收正常,SOMI也为正常输出。USART模块串行时钟极性和相位设置:USART的时钟UCLK的极性和相位由位于UxTCTL寄存器的

5、CKPH和CKPL位控制,具体如下图:在程序中,我分别称之为,时钟模式0、时钟模式1、时钟模式2、时钟模式3。USART的波特率产生,SPI不同于异步通信:异步通信由UxBR1UxBR0UxMCTL三个寄存器控制,以产生标准频率;而同步模式,主从设备用同一个时钟,不再需要产生标准时钟,故而不再用UxMCTL寄存器,设其值为0.其他的,与异步通信基本一致,这里不再细说。具体参考用户指南。程序实现:程序和异步通信方式类似:首先是初始化函数,然后是读取数据、写入数据函数。此程序采用和我之前的UART程序库类

6、似的结构,写入数据后进入低功耗等待中断,判断标志位进行写入数据和读取数据。这里函数只实现430的主机模式,如需从机模式可以仿照我的程序,进行简化实现。由于,我即将使用的SPI设备(AD7708)不是字符型设备,这里不再实现写入字符串函数,也不再移植printf和scanf函数,如若需要可以自己添加,printf和scanf的移植参考:MSP430程序库<四>printf和scanf函数移植初始化函数:SpiMasterInit,实现主机模式的初始化工作,函数内容如下:charSpiMasterInit(l

7、ongbaud,chardataBits,charmode,charclkMode){longintbrclk;//波特率发生器时钟频率UxCTL

8、=SWRST;//初始//反馈选择位,为1,发送的数被自己接收,用于测试,正常使用时注释掉//UxCTL

9、=LISTEN;UxCTL

10、=SYNC+MM;//SPI主机模式//时钟源设置UxTCTL&=~(SSEL0+SSEL1);//清除之前的时钟设置if(baud<=16364)//{UxTCTL

11、=SSEL0;//ACLK,降低功耗brclk=32768;

12、//波特率发生器时钟频率=ACLK(32768)}else{UxTCTL

13、=SSEL1;//SMCLK,保证速度brclk=1000000;//波特率发生器时钟频率=SMCLK(1MHz)}//------------------------设置波特率-------------------------if(baud<300

14、

15、baud>115200)//波特率超出范围{return0;}//设置波特率寄存器intfen=brc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。