目录

  • 前言
  • 问题的提出
  • 问题的解决
  • 说在最后

前言

这两天折腾了一个旋变器解算模块的使用,类似于这种器件一般都是使用通信的方式写入芯片对应的寄存器的数据从而初始化芯片或得到可编程的结果;反之,我们也需要读取其模块、芯片内部经过解算得到的存储内容在SPI的SCLK引导下传输到DSP的硬件SPI内的接收寄存器中。

问题的提出

对于硬件SPI的使用从成功启动的角度来看并不麻烦,麻烦的是以下几点:

  1. 如何在接收到自己想到的数据之后就停止接收,并进行相关处理;
  2. 如何写入自己想要的长度的数据,例如寄存器是八位的地址,但我一次性只能写入16位的,可以达到自己想要的目的吗?
  3. 是否需要使用接收中断或者发送中断,该如何使用?

问题的解决

对于这三个问题,我在这次的小项目实践中都有了一定程度的理解。首先讲一下这个项目对于SPI的写入读取要求:写入需要一个八位地址和一个八位数据,首先写入一个地址,至少间隔几微秒后可以写入该地址对应寄存器的数据,达到可编程的目的。写入的时候需要在SCLK的上升沿写入;读取的时候读取到的数据一共有24位,可以分成3个8位读取,另外读取的时候需要在下降沿读取。
实质上28335的SPI功能与其他处理器类似,但有点不同的就是它有个FIFO操作。这里不得不提的就是,FIFO功能实质上是对标注年SPI模式的覆盖,FIFO的功能里包括了SPI的功能,但相反的,你使用了FIFO的功能后SPI的一些功能就会被限制或者是无效。FIFO的优势就是它具有发送和接收缓冲器,一个缓冲器最多可以放16个字。其FIFO功能的状态位,比如TXFFINT、RXFFOVFCLR等都是针对它的发送和接收缓冲器所设定的,这就形成了一个问题,比如我想接收一个字节后或者发送一个字节后,发送和接收功能就暂停,这在FIFO模式下是无法做到的,因为FIFO的缓冲器最少最少是一个字,即16位。那么针对我们这个小项目的功能他就显然不满足了。因为我的项目中在发送一个地址的字节后需要等待几微秒,再发送一个数据字节,但是FIFO的发送缓冲器最少的存储大小为一个字,所以FIFO会等待发送缓冲器里放入了地址和数据两个字节后开始连续发送,这就会造成从机无法识别的后果。所以在经过考虑之后,我选择使用DSP28335的标准SPI功能。
在进行SPI初始化的过程中,最主要的就是SPICCR(进行软件复位和移位时钟极性选择)和SPICTL(控制数据发送、中断产生、SCLK相位、以及主从模式)两个寄存器的初始化,另外还需要进行初始化的寄存器就是SPIBBR,这个寄存器就是一个波特率选择的寄存器,使用上并没有问题。值得一提的是SPICCR的低四位的功能非常重要,称为字符长度控制位,这四位就决定了在标准SPI模式下,一次性发送和接收数据的位数,这里我选择的就是8位,这样每次我写入一个8位数据后就会自动发送给从机,然后SPI的时钟线就会置高暂停发送。
在初始化之后,我们要进行的就是SPI数据什么时候发送完,以及什么时候接收完,因为只有完成了发送和接收,CPU才能做其他的事情,否则时钟线就会被迫暂停,因为数据还没发完,CPU就去做其他事情了。所以在选择好了字符长度控制位为8位后,我还需要等它发送完,SPI的时钟线才能正常置高。这里就需要用到另一个寄存器,也就是SPISTS,该寄存器是一个状态寄存器,其中的第6位标志位,也就是SPI INT FLAG,就可以用来完成我们刚所需要的操作,这是一个只读标志位,别看它叫中断标志位,但它跟我们所理解的中断并不是一回事,无论是否开启SPI中断,它在已完成发送最后一位和接受最后一位的操作后都会硬件置1,除了一种情况,就是你开启了FIFO模式后,该标志位就不会变化了。清除这个标志位的操作,手册上都有,我就不说了。另外需要指出的一点是,该标志位在发送或者接收最后一位刚刚开始就会置1,如果你马上干其他事儿,那么在SCLK的最后一个脉冲就会被削成尖波,那样的话,最后一位数据可能会发送或者接收失败。所以一般在后面加一个延时操作,具体发送的代码示例如下:

    SpiaRegs.SPITXBUF=a;while(!SpiaRegs.SPISTS.SPI INT FLAG){}Delay_US(8);

那么我们有没有必要开启SPI的中断来发送和读取数据呢?我的回答是没有的,至少对于这个项目是没有的。如果开启了中断,那么我们在发送一个数据或者接收一个数据之后都会进入一次中断,实质上对于CPU的损耗是很大的,并且将接收到的数据的处理放在程序串行结构之中也没有过多的影响,整体结构清晰美观,不会产生过多的跳跃阅读的情况。

说在最后

对于这个项目,其实使用模拟SPI更加方便,直接用IO口模拟SCLK的时序,在上升沿的时候将输出引脚的状态改变以模拟数据发送,在下降沿的时候读取输入引脚的高低电平状态以模拟数据输入。只不过发送和接收的时候速度慢一些,但对于这个项目来说,传送的数据并不多,且都是8位的,足够了!

DSP28335的硬件SPI使用(无FIFO)总结相关推荐

  1. STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片

    STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片 STM32基础工程生成 首先使用STM32CUBEMX生成STM32的基础工程,配置时钟到7 ...

  2. STM32使用硬件SPI驱动RC522门禁模块

    0.前言 RC522射频门禁识别模块非常常用,某宝卖家提供的程序基本都是使用软件模拟SPI的方式进行驱动的,但是实测使用软件模拟SPI识别速率.准确性没有硬件SPI驱动时高,因此本篇博客用于记录使用S ...

  3. 基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522

    目录 1. 实验硬件及原理图 1.1 RFID硬件 1.2 硬件原理图 2. 单片机与RFID硬件模块分析 3. 利用STM32CubeMX创建MDK工程 3.1 STM32CubeMX工程创建 3. ...

  4. 梳理STM32F429之通信传输部分---NO.8 硬件SPI

    目录 一.STM32 的 SPI 特性及架构: 二.SPI 初始化结构体详解: 三.硬件SPI-读写串行 FLASH 实验 一.STM32 的 SPI 特性及架构: 1.引脚简介: (1)   (Sl ...

  5. STM32硬件SPI通过fm17550读取身份证UID,识别银行卡,识别TYPEA与TYPEB

    上面是我的微信和QQ群,欢迎新朋友的加入. 目录 1.硬件平台 2.驱动实现 3.循环扫卡测试程序 4.TYPEB射频卡扫描 5.TYPEA射频卡扫描 6.身份证UID读取 1.硬件平台 1.STM3 ...

  6. STM32硬件SPI控制TM1638 按键数码管LED显示模块

    STM32硬件SPI控制TM1638按键数码管LED显示模块   从淘宝买来的,TM1638专门是控制LED的,LED组合起来就可以变成数码管,还有按键,这个我就没管了,不想管了,发这个帖子只是为了记 ...

  7. STM32F103C8T6硬件SPI控制6针/7针0.96寸OLED显示屏

    OLED介绍 OLED主要参数 1.高分辨率:12864(和12864LCD相同分辨率,但该OLED屏的单位面积像素点多). 2.广可视角度:大于160°. 3.低功耗:正常显示时0.04W. 4.宽 ...

  8. 硬件SPI+LCD增强屏幕刷新率

    1.前言 近日在研究如何提高LCD的刷新率,修改程序发现LCD屏幕用的是模拟通信,所以刷新特别慢,在设置硬件SPI,并使用通过HAL库HAL_SPI_Transmit()函数发送数据后刷新率并没有提升 ...

  9. STM32F030xx硬件SPI调试记录

    笔者最近调试STM32F030F4这颗芯片的硬件SPI,本以为将F103的程序直接移植过去就可以,但是却出了很多问题,故在此记录一下,避免后面再走弯路,顺便也给广大网友做一个前车之鉴. 注意:本文使用 ...

最新文章

  1. matlab 通过矩阵变换使图像旋转平移_图像的几何变换
  2. 【STM32】RTC相关函数和类型
  3. 统计csv词频_基于给定词语列表统计词频
  4. 【LeetCode笔记(水)】s = null 与 s.length() == 0
  5. excel两个指标相关性分析_我用Excel发现了数据分析的本质:回归分析
  6. 哈希表、冲突处理方法、查找长度
  7. 【MySQL】MySQL 8 Show innodb status 命令改变
  8. POJ1212 HDU1650 UVA180 LA5240 Eeny Meeny【约瑟夫环】
  9. (1)初识云计算-《云计算核心技术剖析》学习笔记
  10. 绝对靠谱安全的论文免费安全查重检测重复率网站
  11. php 触屏手写,MyTouch易维触摸屏手写输入法
  12. 二十一世纪大学英语读写基础教程学习笔记(原文)——4 - The Happiest Man in the World(世界上最幸福的人)
  13. 计算机屏幕截图按什么键,电脑按什么键自由截图
  14. 重新编译Spark2.4.0 Parcels包
  15. NOIP2009 普及组 复赛 poly 多项式输出
  16. 首期InnoSpace国际创业集训营举办DemoDay
  17. 黑马程序员_Java_交通灯管理
  18. LabVIEW编程LabVIEW开发需要加班吗
  19. 计算机专业英语博士就业情况,计算机专业博士期刊文章参考文献 计算机专业博士英语参考文献哪里找...
  20. dnsmasq( DNS和DHCP)服务

热门文章

  1. 浅谈Android输入法(IME)架构
  2. PS长图快速切片_ps基础(PS常用工具详解一)
  3. -1-0 Java 简介 java是什么 java简单介绍
  4. unicloud操作数据库(一)——clientDb
  5. Yii学习--使用Yii来建立博客
  6. 二维数组的转置,并将其按列和行从小到大排列(Java实现)
  7. 论文阅读——椭圆检测算法 2018 使用梯度分析利用错误检测控制的精确椭圆检测
  8. httpd模块支持https请求模块mod_ssl
  9. torch.nn.RNN基本用法
  10. 在codecademy上学习Python