DSP-F28335与AD7606的并行模式调试问题
首先完成AD7606的接线,GPIO配置,初始化、复位、启动转换等函数。
将SER接地,设置为并行模式,使用串口显示,显示结果不对,开始漫长的调试过程。
1.首先考虑时序是否有问题,对照数据手册,AD7606是在COA和COB触发上升沿后,开始进行转换,BUSY标志位置1,转换完成后标志位置0,而后开始读数,标志位置1后程序有循环语句,检测转换是否进行。
READ_BUSY = GpioDataRegs.GPBDAT.bit.GPIO49;while(READ_BUSY == 1){
// UARTa_SendString("a");delay_time_ns(15);READ_BUSY = GpioDataRegs.GPBDAT.bit.GPIO49;}
在循环中加入了判断语句:如果标志位置1了,则在串口发送a字母。结果串口一直没有接收到a,而且观察寄存器里的值,BUSY位始终是0,当时认为BUSY一直没有置1,转换没有进行,认为是时序存在问题。对程序单步调试,通过示波器观察每一个口的值,STBY、CS、RD、REST、OSI0、1、2等,按照逻辑顺了一遍,没有问题,但其中COB置为高电平时只有1.几V,COA是标准3.3V,初步判断是COB电平不够,可能不算上升沿,对COB换了一个IO口重新进行配置,电平变正常,但显示仍然不对。
(后来意识到没有发送a字母可能是BUSY转换最长只有几us,可能在判断时候BUSY已经置0了,也就是while循环只是一个为了防止数据还没有传完而设置的循环,其实已经完成转换了。)
另外,dsp自带的延时函数只有DELAY_US,us级,AD7606很多时序是在ns级,因此,创建了一个自减函数作为ns级延时,但跟设置的系统主频和指令执行速率有关,不是精确的,只是为了让延时在ns级。
2.不是时序问题后,对数据的读取进行检查。一开始使用GPIO0-9,12-17完成DB0-15的数据读取(IO10、11配置成其他功能了),IO口不连续,使用按位与和移位完成数据的读取,但读取值偏小,猜测可能是移位转换有问题,重新配置,将原本10、11的功能改用其他IO口,使用连续的GPIO0-15进行读取,读取数据比输入电压值小,而且小的没有规律,有时候小一半,有时候小0.2V左右,有时候又正常了。又猜测是否有接触不灵,对杜邦线通断检测也没问题。
CS_RESET;delay_time_ns(35); for(i=0;i<8;i++){RD_RESET;delay_time_ns(38);RD_SET;delay_time_ns(38);DB_data[i]=(GpioDataRegs.GPADAT.all) & 0x7fff;DB_vol[i]=DB_data[i]*10000.0/32768;if(((GpioDataRegs.GPADAT.all) & 0x8000) >> 15 == 1)//判断最高位是否为1{DB_symbol[i]=1;}}CS_SET;
3.AD7606供电刚开始使用28335上的A5V和AGND,但数据显示不对,比如通道输入直接接地,显示读取数据是C992、C988等等,反正不是零,改为GND后数据就对了,基本在0001,0002,虽然芯片原理图上显示要接AGND,但实际用GND才对了,这一点很奇妙。(不知为何)
4.后来偶然有一次同时接两通道,分别用电压源的两通道提供输入3V和4.5V,接3V的读取只有2V左右,4.5V基本正确,而将接3V的口断开,也接到4.5V上,发现也对了,所以并不是采集的问题,可能是提供的输入就不对,利用万用表对电压源输出的电压检测,与串口得到的值比较,是一样的,也就是采集是正确的,只是稳压源电压输出衰减了。。。
调试完再回头捋一下,当时在确定好时序后,一直将问题锁定在读取数的转换上,没想过读取的数可能就是不对的。。。
DSP-F28335与AD7606的并行模式调试问题相关推荐
- FPGA Verilog AD7606驱动代码,包含SPI模式读取和并行模式读取两种
FPGA Verilog AD7606驱动代码,包含SPI模式读取和并行模式读取两种,代码注释详细 编号:7428665912784264白衫如初oh
- 在ADSP21489下外挂S29AL016J并行FLASH调试记录
我哭,调试了5天 总结下在ADSP21489下挂S29AL016J并行flash调试记录 S29AL016J:2M*8bit 21489EZ-Kite M29W320EB: 4M*8Bit 在修改fl ...
- Simulink嵌入式自动代码DSP F28335(2)——SCI通信
Simulink嵌入式自动代码DSP F28335(2)--SCI通信 简述 1.文件模型建立 1.1 自动代码文件 1.2 上位机文件Host 2.环境配置 2.1 Simulink配置 2.2 电 ...
- 设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的值
最近突然萌发了研究JDK源码的想法,所以就想到了在自己常用的Eclipse上可以调试JDK源码. 整个设置过程也很简单: 首先你要安装好JDK(我的JDK安装路径根目录是D:\Java\jdk-8u9 ...
- 并行程序调试、测试与模型检测
并行程序调试.测试与模型检测 并行程序调试的挑战: 1.由于不能确定不同线程的执行顺序,导致可能的执行路径发生组合爆炸: 2.使用模型检验程序正确性能以应用到分布式系统上. 名词解释 确定性重放:通过 ...
- NVIDIA CUDA 高度并行处理器编程(九):并行模式:稀疏矩阵-向量乘法
并行模式:稀疏矩阵-向量乘法 背景 使用 CSR 格式的并行 SpMV 填充与转置 使用混合方法来控制填充 通过排序和划分来规则化 介绍并行算法中的压缩与规格化 背景 稀疏矩阵是很多元素是 0 的矩阵 ...
- 学会使用debug模式调试代码
在企业开发中,质量和效率显得尤为重要.学会通过debug模式调试代码是每一个开发的必修课.下面我通过一个案例来描述一下如何来调试.跟踪代码. 步骤:在接口或方法的入口打上调试端点,如下所示. 通过&q ...
- 并行模式与算法(一)
一.高性能生产者-消费者:无锁实现 BlockigQueue使用锁和阻塞等待来实现线程间的同步,而ConcureentLinkedQueue使用大量的无锁CAS操作,相比BlockigQueue的性能 ...
- NVIDIA CUDA 高度并行处理器编程(七):并行模式:前缀和
并行模式:前缀和 背景 简单并行扫描 效率 高效的并行扫描 更大长度的并行扫描 背景 前缀和(prefix sum)也叫扫描(scan),闭扫描(inclusive scan)操作对 n 元数组[x0 ...
- OpenMP和MPI并行模式的区别?
1.OpenMP OpenMP是一种用于共享内存并行系统的多线程程序设计的库(Compiler Directive),特别适合于多核CPU上的并行程序开发设计.它支持的语言包括:C语言.C++.For ...
最新文章
- linux单步跟踪命令,dbx调试跟踪的常用子命令
- 16进制/10进制数转化为浮点型案例
- 盘点国内互联网圈中程序员出身的商业大佬,看谁主沉浮!
- oc知识点 类的扩展
- java并发练习之快乐影院
- 2021浙江高考首考成绩查询,浙江2021选考成绩什么时候出成绩?附2021浙江学考成绩查询时间...
- 直播APP系统源码,直播系统源码 直播系统源码
- 佛山科学技术学院计算机科学与技术李欣华,第七届国务院学位委员会中文学科评议组2019年度 扩大会议在佛山科学技术学院召开...
- linux 服务器远程开机,详解使用Ubuntu系统中实现远程开机的方法
- VBS教程--摘自百度百科
- 062:vue+openlayers绘制正方形、矩形、六芒星( 代码示例 )
- 线性电路中DAC和ADC的校准
- iQOO Z3、OPPOK9和小米11青春版的区别 哪个好
- 计算机论文指导记录范本,论文指导内容记录怎么写 3篇 论文指导记录20篇
- sqlserver2000安装程序以及补丁下载
- 日语在线学习网站简介
- 中国软件:10个人 , 20年坎坷路!
- 记录一次服务器CPU负载高,利用率正常的处理方法
- php工程导致系统蓝屏,win10莫名其妙蓝屏怎么解决
- 中国石油大学《机械设计课程设计》在线考试