历史上的今天
返回首页

历史上的今天

今天是:2025年08月20日(星期三)

正在发生

2020年08月20日 | 一文读懂MSP430 SPI总线

2020-08-20 来源:elecfans

SPI总线系统是一种同步串行外设接口;是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 许多的芯片都用这种协议通信:EEPROM、Flash、实时时钟、AD转换器、数字信号处理器等:MSP430的USART模块不仅能够实现异步模式(见:MSP430程序库《二》UART异步串口),而且支持同步串行通信(即SPI模式);其SPI支持3线、4线操作,支持主机模式和从机模式,字符长度可以7位或8位等。由于要用AD7708芯片完成AD采样,AD7708是通过SPI与其它设备通信的;本程序比较简化,只完成了主机模式的初始化。


硬件介绍:

SPI:SPI是Motorola首先在其MC68HCXX系列处理器上定义的,它是一种同步的高速串行通信协议,有关SPI协议的详细内容,参考:SPI_互动百科。


MSP430对SPI的支持:当msp430USART模块控制器UxCTL的位SYNC置位时,USART模块工作于同步模式,对于149即工作于SPI模式,若是169,USART0可以支持I2C,可以通过另一控制位I2C控制,I2C位0则工作于SPI。在SPI模式下,允许单片机以确定的速率发送和接收7位或8位数据。


同步通信与异步通信类似;同步通信和异步通信寄存器资源一致,具体寄存器的不同位之间的功能存在差异;具体寄存器内容参见TI提供的用户指南。


USART模块的SPI操作可以是3线和4线,其信号如下:

SIMO:从进主出,主机模式下,数据输出;从机模式下,数据输入。

SOMI:从出主进,主机模式下,数据输入;从机模式下,数据输出。

UCLK:USART SPI模式时钟,信号有主机输出,从机输入。


STE:从机模式发送接收允许控制脚,用于4线模式,控制多主从系统中多个从机,避免发生冲突。具体方式如下(图截自 用户指南):

一文读懂MSP430 SPI总线

四线主机模式:STE为高电平,SIMO和UCLK操作正常;STE为低电平,SIMO和UCLK被置为输入方向,主机控制权让出。

四线从机模式:STE为高电平,从机的发送和接收无效,且把SOMI置为输入方向;STE为低电平,发送接收正常,SOMI也为正常输出。


USART模块串行时钟极性和相位设置:

USART的时钟UCLK的极性和相位由位于UxTCTL寄存器的CKPH和CKPL位控制,具体如下图:在程序中,我分别称之为,时钟模式0、时钟模式1、时钟模式2、时钟模式3。

一文读懂MSP430 SPI总线

USART的波特率产生,SPI不同于异步通信:异步通信由UxBR1UxBR0UxMCTL三个寄存器控制,以产生标准频率;而同步模式,主从设备用同一个时钟,不再需要产生标准时钟,故而不再用UxMCTL寄存器,设其值为0.


其他的,与异步通信基本一致,这里不再细说。具体参考用户指南。


程序实现:

程序和异步通信方式类似:首先是初始化函数,然后是读取数据、写入数据函数。此程序采用和我之前的UART程序库类似的结构,写入数据后进入低功耗等待中断,判断标志位进行写入数据和读取数据。


这里函数只实现430的主机模式,如需从机模式可以仿照我的程序,进行简化实现。


由于,我即将使用的SPI设备(AD7708)不是字符型设备,这里不再实现写入字符串函数,也不再移植printf和scanf函数,如若需要可以自己添加,printf和scanf的移植参考:MSP430程序库《四》printf和scanf函数移植


初始化函数:SpiMasterInit,实现主机模式的初始化工作,函数内容如下:

一文读懂MSP430 SPI总线

一文读懂MSP430 SPI总线

程序注释已经比较详细,这里不再细说;如果要改为从机模式,把时钟设置和波特率设置去掉应该就可以了。

发送函数和接收函数:

一文读懂MSP430 SPI总线

发送和接收函数和异步通信里面的几乎一样,如果标志位为0,则等待改变为1,然后写入或读出;标志位在中断函数里被更改;中断函数如下:

一文读懂MSP430 SPI总线

中断里面仅仅置标志位后,就退出低功耗;退出后即写入或者读取数据。

读取或写入函数调用的SpiLpm函数:

一文读懂MSP430 SPI总线

根据不同情况进入低功耗,如果单片机其他地方不允许进入低功耗,可以更改这个函数。

程序部分就这么多了。需要的函数在头文件里面声明,方便使用。

使用示例:

程序使用方式和之前的程序库相同,加入c文件,包含h文件,调用初始化函数后即可掉用程序库中的函数。

一文读懂MSP430 SPI总线

这里只是一个简单的使用示例,详细的使用,将会在下一篇给出,下一篇:MSP430程序库《六》通过SPI操作AD7708;将会使用今天的程序库,完成SPI的通信部分。

注意事项:

SPI是全双工通信,每次写入(发送)8位/7位数据的同时,430的SPI主模块都会在发送后半个时钟周期读取采样的0/1信号,存入接收缓冲寄存器,所以,每次的写入,均有数据读取,但不一定是从设备发送回来的,这个地方在使用430主机模式的时候必须注意,很容易出错(我也是在调试AD7708的时候才注意到这个地方的);SPI的函数已经添加SpiWriteData函数,这个函数会在发送的同时返回发送完成半个时钟周期后的接收到的数据,方便使用;不建议使用前面的发送和读取函数,很容易出错;建议使用刚添加的这个函数,程序库已经更新,可以重新下载。函数SpiWriteData:

一文读懂MSP430 SPI总线

发送后读取即可,程序比较简单。

新的示例程序:

一文读懂MSP430 SPI总线

推荐阅读

史海拾趣

Carlisle Interconnect Components公司的发展小趣事

Carlisle Interconnect Components公司自创立之初,便以创新和突破为核心竞争力。在电子连接器领域,公司凭借其深厚的技术积累和敏锐的市场洞察力,成功研发出一系列具有高性能和稳定性的连接器产品。这些产品不仅满足了市场对高效、可靠连接的需求,更在多个关键领域实现了技术突破,为公司赢得了市场的广泛认可。

Dresden Elektronik公司的发展小趣事

Dresden Elektronik公司始终将产品质量放在首位。他们建立了严格的质量管理体系,从原材料采购到生产、检测、包装等各个环节都严格把关。这种对品质的执着追求使公司的产品在市场上赢得了良好的口碑,也为公司赢得了众多忠实的客户。

CDIL[Continental Device India Pvt. Ltd.]公司的发展小趣事

随着全球化进程的加速,CDIL积极寻求与国际知名企业的合作,共同推动电子产业的发展。通过与全球领先企业的合作,CDIL不仅引进了先进的技术和管理经验,还拓展了国际市场,进一步提升了公司的国际影响力。如今,CDIL的产品已远销海外多个国家和地区,为全球电子产业的发展作出了重要贡献。

这五个故事展示了CDIL在电子行业中的发展历程和取得的成就。从半导体制造的先驱到IC封装与电子制造服务的转型,再到产能提升、新技术研发以及国际合作与市场拓展,CDIL始终保持着对技术的追求和对市场的敏锐洞察。正是这些努力,使CDIL在激烈的市场竞争中脱颖而出,成为电子行业中备受瞩目的企业。

艾迪沃德公司的发展小趣事
使用万用表测量电源输出端的电压值,确保其在仪器要求的范围内。
冠图电子(GTL-POWER)公司的发展小趣事
确保电源线连接牢固,无破损或接触不良现象。
Agere System(LSI Logic)公司的发展小趣事
定期检查电源线、插头等连接部位是否牢固可靠,避免松动或接触不良。

问答坊 | AI 解惑

TCP/IP协议详解,全部免费

很好的嵌入式网络编程资料. [ 本帖最后由 jxb01033016 于 2009-2-18 16:35 编辑 ]…

查看全部问答>

SPI总线 SPI接口 SPI协议 SPI模式 SPI通讯

SPI interface SPI接口介绍     SPI是由美国摩托罗拉公司推出的一种同步串行传输规范,常作为单片机外设芯片串行扩展接 口。SPI有4个引脚:SS(从器件选择线)、SDO(串行数据输出线)、SDI(串行数据输入线)和SCK(同步串行时钟线)。SPI可 ...…

查看全部问答>

一个关于CETK的简单问题,请大家帮忙!

    论坛里的各位高手,公司最近接了一个项目。我原是做应用的,但是人手不够头就让我测试一些驱动。但是他告诉我,亲眼见过CETK可以在开发板上单独运行不用C/S 结构,不用和server连接,但是我看了好多资料,包括微软的也包括个人博客 ...…

查看全部问答>

分享SDRAM到DMA 的程序代码

**********实现sdram到flash的数据传输******************/#include <stdio.h>#include <stdlib.h>#include <sys/alt_dma.h>#include \"system.h\"static volatile int rx_done = 0;alt_u8 i;int rc;alt_dma_txchan txchan;alt_dma_rxc ...…

查看全部问答>

pwm模块例程,不出波形,帮看下哪设置错了,lm3s9b92

#include \"inc/hw_memmap.h\"  #include \"inc/hw_types.h\"   #include \"driverlib/gpio.h\"  #include \"driverlib/sysctl.h\"   #include \"driverlib/pwm.h\"   void pwm(void)&nbs ...…

查看全部问答>

一下还不习惯用ST的库函数(懒记),所以自己对GPIO口进行

另外,对ST的一些寄存器定义也不大习惯,所以也重新做了定义,例如GPIOx_BSRR我另外定义了一个GPIOx_SET,GPIOx_BRR我另外定义了一个GPIOx_CLR,这样自己记起来轻松多了——男人何必为难自己呢...看看这个流水灯的程序,看上去是不是容易些了 ...…

查看全部问答>

数据加密和解密

00 00 00 00    C8 F1 94 F3 00 00 00 01    05 F8 6E 8C 00 00 00 02    19 19 B2 7C 00 00 00 03    EC 5E B9 71 00 00 00 04    58 69 D9 32 请问左边的四个字节,经过相应的变换 ...…

查看全部问答>

哪位朋友能推荐一款2v至5v稳压到3v的芯片。

                                 哪位朋友能推荐一款2v至5v稳压到3v的芯片。还有推荐一款232接口芯片,低压可以至2.5v的,tssop16脚的!还有我要是 ...…

查看全部问答>

自编的单片机综合调试小工具

解压密码:smartdebug 原文地址:http://hi.baidu.com/i7leaves/blog/item/927049fe4974f402a9d31101.html?timeStamp=1331390235062   软件介绍: 语言:C# 开发环境:Visual Studio 2008 + WIN XP SP3 欢迎大家下载! 因为近期的智能 ...…

查看全部问答>

“采用MSP430 LaunchPad启动开发工作”学习心得

        这几天学习了“关于TI精品课程——采用MSP430 LaunchPad启动开发工作”。         课程不错,TI的工程师讲解的非常详细!课程分别介绍了MSP430的各个功能模块,以 ...…

查看全部问答>