当前位置:首页 > 技术学院 > 技术前线
[导读]DSP28335与AD7606通过SPI的串行数据交互

弄了三天的DSP28335与AD7606的通信终于实现了。最终的方案是通过DSP28335控制AD7606的采样,采集的数据通过SPI串口发送给28335,然后28335通过串口发送给上位机显示。

其实程序第一天就写好了,但是一直读不出AD7606采集到的数据,所以后两天主要是调试。

对于程序员来说,调试是最重要的能力,也还最考验人的耐心的,因为很小的细节出错就可能导致意想不到的结果,而且明明感觉是对的东西,有时确是错误的。

下面就说下这个调试过程。

首先程序是一部分一部分的实现的,这样的话容易定位出错的模块,首先实现的是DSP与上位机的串口通信,这个在上篇的博客中有说明。

另一个模块即是DSP控制AD7606的采样与通信。AD7606购买的是一个模块,外围的电路已经设计好,各功能引脚已经引出,而且给出了STM32与AD7606的控制程序,但这个程序只是用于STM32,而且中间的设置及寄存器配置都是根据STM32来的,所以说要用到28335上需要大量的修改。所以还是相当于从头来写,因为程序的框架可以按照给的程序来写,所以还是节省了许多的工作。不过写好之后发现上位机什么也没有显示。之后漫长的调试过程就来了。

既然读不到数据,首先想到的是SPI的控制是不是有问题,利用DSP28335自有的SPI回环测试功能测试了一下,又修改了下SPI的配置,但是还是没有数据。之后想确认下是否执行了SPI中断程序,发现SPI的中断程序没有执行,但是可以进入外部中断程序,这个外部中断程序是由AD7606的BUSY引脚产生的,当启动转换的时候BUSY会变成高电平,转换完成后又变成低电平。这个过程中间有个下降沿,利用此下降沿产生中断然后开始读取转换后的数据。说明AD7606工作了,且完成了转换。但是通过观察DSP的SPI接收寄存器中一直没有数据。

之后跟着程序,参照数据手册走了一遍程序,确定程序逻辑上是没有问题的。怀疑SPI的时钟有没有输出,一些引脚的电平是否输出正确,因此用示波器观察了各引脚的电平(某一时间内电平固定的引脚),都是期望的电平。想观察下AD7606的数据引脚有数据输出没,奈何没有逻辑分析仪,用示波器观察不了(频率太快,也不是一直都有输出,示波器的干扰又大),而作罢。

上网查找AD7606与DSP28335的相关资料,看了一些别人的资料没有找到需要的。其实上网查找的过程中还是发现了许多的资料,包括ADI公司完整的包括AD7606的应用、控制程序、外围电路的设计资料等,不要小看无意间的一句话,也许某句话也就点醒了你,所以遇到问题的时候可以多看别人遇到了什么问题、怎么解决的。这可以节省大量的时间。但是不能一味的求助别人,要自己多想。

数据手册是一个重要的资料,关键点一定要明确。

控制芯片的时候要多注意这些关键点,因为有一个地方不对,结果就出现不了。(要特别注意),对照自己的程序,根据时序图看一下,是否满足各方面的要求,包括延时、信号的先后顺序等。

在不同的时钟频率下,同一个延时函数,延时是不一样的,所以移植程序的时候也要注意这点。

在我的这个程序中,其实读不出数据的最主要的一个问题还是SPI配置的问题,因为控制发送功能的寄存器中有一位是开启增强功能模式,就是可以使用FIFO,而默认情况下是不能使用FIFO的,因为想着不使用DSP的发送功能,所以直接把发送功能的配置给删除了,而忘记了这位,所以读取不出。而在回环测试的时候是对的,是因为回环测试的时候要开启发送功能。

这个问题的发现是想着重新写下代码,看书核对配置的时候偶然在发送寄存器中看到有一位是控制开启增强模式的。所以理不清的时候,不妨重新来过。(下策)

(也曾怀疑过硬件的问题,如果没有解决的话,下步应该是在STM32上跑下。不过硬件因为是买的现成的模块,出问题的概率不大)

此次调试总结

首先核对硬件连接是否正确,包括供电,接地,参考电平,时钟等,然后需要检查寄存器配置是否正确,再逐渐调试软件(首先跟着程序的流程走一遍,确认是否有明显的失误。然后可设置断点、标志位、观察某一变量的值、内存的值等),仔细研究时序图,这才是正确方法。另外就需要耐心与细心。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

之后新建新的工程,添加.a文件就可以使用了,当然也可以使用keil来添加,但是keil默认的是用.lab,需要自己配置一下文件属性,改为lib文件即可。一半release sdk的时候用这种方式很关键的,毕竟自己的核心代...

关键字: keil 文件属性 lib文件

keil uvision2 C51软件我们在前面有所介绍,是目前功能最强大的单片机c语言集成开发环境

关键字: keil c51 使用 C

Keil C51是美国Keil软件公司(现已被ARM公司收购)出品的支持8051系列单片机架构的一款IDE(集成开发环境)。 Keil C51是一款经典的、功能强大的、适用宽广的集成开发环境,是业界知名度、口碑比较好的...

关键字: keil c51 安装 C

首先,我是只是一个大学应届毕业生,本人也是因为参加了挑战杯这个项目,所学也专业包涵单片机内容,所以才开始我的ZigBee之旅,写了2个月左右,项目的基本要求大致是达到了。写这篇博客主要是总结这2个月所学的知识,供大家学习...

关键字: cc2530 开发 C

2.4G通讯 我的nrf24l01之行之CC2530 zigbee无线串口模块的霸气

关键字: cc2530 无线通信 C 编程

STC90C52RC系列单片机是宏晶科技推出的一款高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统的8051单片机,12时钟/机器周期和6时钟/机器周期任意选择,并且内部集成了MAX810专用复位电路。STC90C...

关键字: stc90c52 编程 C

GD32F405系列互联型产品采用全新工艺制程设计,整合了强大的运算效能和丰富的外设接口。处理器主频可达168MHz,并提供了完整的DSP指令集,并行计算能力和专用浮点运算单元(FPU)。

关键字: gd32f405rgt6 C KEIL

有关GD32F450的以太网半双工调试经历

关键字: gd32f450 C 编程

CANopen学习笔记

关键字: canopen C KEIL
关闭
关闭