DSP28335-SPI配置简介与应用—Demo1(无FIFO收发)和Demo2(中断收发)

本文详细介绍了DSP28335 SPI接口的配置步骤与注意事项,特别是针对与RTC芯片M41T94通信时遇到的问题及解决办法。通过分析SPI总线的工作模式、寄存器配置细节及示波器解码验证,帮助读者理解并掌握DSP28335 SPI的正确使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

DSP28335-SPI配置简介与应用—Demo1(无FIFO收发)和Demo2(中断收发)



前言

最近在使用DSPF28335(主机)与RTC(实时时钟)芯片M41T94进行通信,通信协议采用的是SPI总线,两者之间一直不能通信成功(例如写数据(MOSI)数据乱序,读数据信号线(MISO)一直是高阻态,片选信号波形出现小跳变等),针对以上几个问题,实验过程中从以下几点去进行解决:

  • 硬件方面:检测电路连结是否正确,供电信号(VCC)、时钟信号(晶振信号)、所有信号是否共地等;
  • 软件方面:了解SPI的运行机制、DSP28335对于SPI信号的正确配置(最重要的部分)、与从机配置方式是否匹配等;
  • 验证方面:SPI接口的一个缺点是没有指定的流控制,没有应答机制确认是否接收到数据。但前期可以保障的是通过示波器解码SPI信号,确认解码的SPI时序信号是正确标准的
    下面将我解决过程所需要掌握的的一些知识和经验进行记录。

一、SPI简介与DSP28335的SPI配置

1.SPI简介

SPI(Serial Peripheral Interface) 一种高速的全双共同步串行通信总线。应用于一个主机和一个或者多个从机的模式下,因为所有具有SPI功能的设备基本都配备了MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)四根接口线。
(1)MISO– Master Input Slave Output,主设备数据输入,从设备数据输出;
(2)MOSI– Master Output Slave Input,主设备数据输出,从设备数据输入;
(3)SCLK– Serial Clock,时钟信号,由主设备产生;
(4)CS – Chip Select,从设备使能信号,由主设备控制
因为SPI是串行同步通信,所以需要对串行同步时钟的极性(SCLK Polarity 简称CPOL)和相位(SCLK Phase 简称CPHA)进行配置,通过对两个位的排列组合,使得SPI可以工作在四种模式,如下图所示:
在这里插入图片描述
如图片所示SPI的四种模式,(经过分析图片上部分的时序-偶数边沿采样,属于01模式),我们常使用模式00和模式11。如下图所示:
在这里插入图片描述
在这里插入图片描述
上面图片的描述主要是介绍了我们本次与RTC通信所需要到的信息,更详细的SPI简介推荐去看下面的两个视频(图片也引用于视频)
SPI总线,你真的懂它?
SPI通信协议的原理及其简单应用

2.DSP28335的SPI配置

TMS320F28335配备了SPI外设功能,但仅有一个SPIA模块供使用,要是不够用了怎么办?可以通过以下方法进行扩展:

  • 根据前文SPI简述可知该协议可以工作于一主机多从机的方式,这样DSP28335就可以与多个SPI外设模块进行通信;
  • 使用普通GPIO口模拟SPI接口SCLK时序,在上升沿的时候将输出引脚的状态改变模拟数据发送,在下降沿的时候读取输入引脚的高低电平状态以模拟数据输入,只不过发送和接受的时候速度慢一些。

a) 首先是GPIO的配置

F28335上可以复用为SPI功能接口的有以下两组(对于片选信号TI的例程给的是复用该管脚的功能,但若是该配置下导致SPI解码的的片选信号出现小跳变,可以将片选信号的配置为通用IO口进行测验):

//GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // SPISIMOA
//GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // SPISOMIA
//GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // SPICLKA
//GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // SPISTEA
GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1; // SPISIMOA
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1; // SPISOMIA
GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1; // SPICLKA
GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1; // SPISTEA

b) 相关寄存器配置

在这里插入图片描述
上图是控制SPI的所有寄存器,其中最重要的是红框标注的4个寄存器:
SPICCR: 该寄存器可以配置时钟极性(CPOL)、自循环模式、字符长度控制等
SPICTL: 控制数据发送、中断产生、SCLK相位(CPHA)、主从模式等
SPIST: 初始化之后,要进行的就是SPI数据什么时候发送完,什么时候接受完,因为只有完成了发送和接受,CPU才能做其他事情,否则时钟线就会被迫暂停,导致传输错误,所以就需要用到状态寄存器SPISTS, 该寄存器的第六位SPI INT FLAG是一个只读标志位,在完成发送最后一位和接受最后一位后都会硬件置1.但开启FIFO模式后,该标志位不会变化。从SPI的中断框图可以看出:
在这里插入图片描述
SPIBRR: 波特率分频寄存器
LSPCLK/(SPIBRR+1) 3=<SPIBRR<=127
LSPCLK/4 0=<SPIBRR<3

在配置SPI寄存器的时候需要软件复位配置前清零,恢复操作时置1。(清零时,SPIST 5,6,7被清楚,SPI配置不变)
配置SPI时:

  1. SPI SW RESET=0;
  2. 配置SPI;
  3. SPI SW RESET=1.

测试验证

与SPI外设的接口进行通信交互的时候,如前文第一部分所述,当与SPI外设模块不能通信时,首先确保处理器对SPI的配置正确,使用示波器解码SPI的串行信号,确保时序正确。我在配置的时候SPI时序信号如图一所示:
在这里插入图片描述
虽然示波器解码的数值与我发送的数值相一致,但是中间每个数据间片选信号都会有一个小跳变,这是不符合时钟芯片手册的时序波形的如下图所示
在这里插入图片描述
为此我们将片选信号的复用功能去掉,改为通用IO口的功能,便实现成功将数据写入时钟模块当中(之前存在跳变的时候是不能正常运行的)。

代码示例与总结

无(FIFO)和FIFO中断收发传输主要是对寄存器配置,本文重点是对与外接RTC芯片的测试,代码不做重点说明。

F28335是一款微控制器,具备SPI外设功能。SPI(Serial Peripheral Interface)是一种串行外设接口,用于在微控制器外部设备之间进行通信。SPI在F28335中使用两个中断向量,分别为SPIRXINTASPITXINTA。在非FIFO模式下,只使用SPIRXINTA中断,因为在SPI中,收发是同步的,收到一个数据的同时必然发出一个数据。而在FIFO模式下,可以同时使用两个中断。\[2\] 如果F28335SPIA模块不够用,可以通过以下方法进行扩展: 1. 使用一主机多从机的方式,将DSP28335多个SPI外设模块进行通信。 2. 使用普通GPIO口模拟SPI接口的时序。在上升沿时改变输出引脚的状态以模拟数据发送,在下降沿时读取输入引脚的电平状态以模拟数据输入。不过,使用GPIO口模拟SPI接口的速度会比较慢。\[3\] 需要注意的是,以上方法只是扩展SPI功能的一种思路,具体的实现方式还需要根据具体的应用场景硬件条件进行选择设计。 #### 引用[.reference_title] - *1* *2* [F28335第十一篇——串行外设接口(SPI)](https://blog.csdn.net/qq_17525633/article/details/103145686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [DSP28335-SPI配置简介应用Demo1(FIFO收发)Demo2(中断收发)](https://blog.csdn.net/weixin_46943050/article/details/126335542)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值