4.2 结论

这种连接方式只使用DSP的一个串行SPORT口即可同时读取8路ADC的数据。但由于8路数据都通过一路数据输出给DSP,而AD7606支持的最高串行时钟频率有限,模数转换还要占用一部分采样周期,因此串行输出的连接下,AD7606不能工作在最高200KSPS采样率下。

根据AD7606数据手册,AD7606的SCLK上限为23.5MHz。FLAG信号驱动CONVST A/B信号,单路串行输出八通道数据。不考虑转换时间最高采样率可达23500000/(16×8)=183.5kHz,由于每个周期数据转换将消耗一定时间,所以实际无法达到此速度。假设采样周期用Tconvst表示,根据AD7606数据手册,模数转换时间为3.45us,所以 Tconvst-3.45us代表采样周期中传输数据的时间。八通道总数据量为128个时钟周期,所以(Tconvst-3)/128近似为每bit数据的时钟周期。由于SCLK最大为23.5MHz,据此可以推算出此模式下最高采样频率:

(Tconvst(max)-3.45)/128 = 1/23.5

Tconvst(max)≈8.89us

即最高采样率为1/ Tconvst(max) = 112KSPS

同理可知,若采用两口同时输出转换数据,即启动2个SPORT分别读取8个通道的数据,实际最高采样率能达到161K SPS。

当AD7606采用并行方式输出到DSP时,即可得到最高200KSPS采样率。

5. DSP参考代码

1. 配置SRU

// This function will setup the SRU Registers

void InitSRU(void)

{

//Generating Code for connecting : SPORT0_CLK to DAI_PIN1

SRU (HIGH, PBEN01_I);

SRU (SPORT0_CLK_O, DAI_PB01_I);

//Generating Code for connecting : SPORT0_FS to DAI_PIN4

SRU (HIGH, PBEN04_I);

SRU (SPORT0_FS_O, DAI_PB04_I);

//Generating Code for connecting : DAI_PIN5 to SPORT0_DA

SRU (LOW, PBEN05_I);

SRU (DAI_PB05_O, SPORT0_DA_I);

//Generating Code for connecting : FLAG4 to DPI_PIN1

SRU (HIGH, DPI_PBEN01_I);

SRU (FLAG4_O, DPI_PB01_I);

//Generating Code for connecting : FLAG5 to DPI_PIN2

SRU (HIGH, DPI_PBEN02_I);

SRU (FLAG5_O, DPI_PB02_I);

}

2. IRQ1 BUSY中断服务程序

void AD7606_BUSY_IRQs(int sig_int)

{

busy++;

interrupt(SIG_SP0,Count_SPORT0_RX_IRQs);

#ifdef DMA

* (volatile int *)SPCTL0 =( SPEN_A | SLEN32 | ICLK | IFS | LAFS | SDEN_A | FSR | DITFS| LFS );

#endif

#ifdef CORE

* (volatile int *) SPCTL0 =( SLEN16 | ICLK | IFS | FSR | LAFS | LFS | DITFS);

*(volatile int *) SPCTL0 |=SPEN_A ;

#endif

}

3. SPORT初始化程序

void init_sport(){

* (volatile int *) SPCTL0 = 0;

* (volatile int *) SPCTL1 = 0;

* (volatile int *) SPMCTL0 = 0;

* (volatile int *) SPMCTL1 = 0;

SPORT_DMA_setup:

* (volatile int *) IISP0A =(int)rx_buf0a ;

* (volatile int *) IMSP0A = 1;

* (volatile int *) CSP0A = CHNUM;

//configure the sport

/* */

/* CLKDIV0=[fCCLK(266 MHz)/4xFSCLK(17 MHz)]-1 = 0x0005 */

/* FSDIV0=[FSCLK(10 MHz)/TFS(2 MHz)]-1 = 31 = 0x001F */

//13m hz 1m 0x00080003;

/* Configure SPORT0 as a reciever (Rx) */

* (volatile int *) DIV0 = 0x001F0005;

}

4. SPORT 中断程序

void Count_SPORT0_RX_IRQs(int sig_int)

{

SP0I_counter++;

#ifdef CORE

rx_buf0a[(SP0I_counter-1)*CHNUM]=(short)(*pRXSP0A);

#endif

* (volatile int *) SPCTL0 =0;

finished=1;

#ifdef DMA

if(SP0I_counter==1024){

* (volatile int *) IISP0A =(int)rx_buf0a ;

SP0I_counter=0;

}

else

* (volatile int *) IISP0A =(int)(rx_buf0a+ (SP0I_counter)*CHNUM);

* (volatile int *) IMSP0A = 1;

* (volatile int *) CSP0A = CHNUM;

#endif

interrupt(SIG_SP0,SIG_IGN);

}

0

单片机c语言sden,电力系统中多通道同步采样ADC(AD7606)与浮点DSP(ADSP-21479)通信的设计与实现...相关推荐

  1. SMT32同步采样ADC芯片ADS8329 | 立创开源

    ADS8329 是一款具有单极性输入的低功耗.16 位.1MSPS 模数转换器 (ADC),同时具有采样保持功能. 电路板文件和STM32程序文件在立创开源平台,开源地址:https://oshwhu ...

  2. AD7616的国产替代方案—ADCS16162(16位16通道同步采样ADC)

    各位博客们好,我是深圳国芯创展科技的叶剑清,近两年的芯片荒相信大家都仍心有余悸,像ADI.TI等大厂的芯片则更是"一芯难求",导致很多电力方面的客户芯片短缺,严重影响生产方面,今天 ...

  3. 单片机c语言sden,ST_Geometry及使用大全.pdf

    ST_Geometry及使用大全,ST_Geometry及使用大全,ST_Geometry及使用大全 1. 2. ST Intersection 37 4.2.5 ST SymmetricDiff 3 ...

  4. 单片机c语言程序设计中可以不分大小写,论单片机课程教学中C语言编程的规范性...

    摘 要 文章针对"单片机C语言程序设计"教学中存在的编程困扰,提出在教学实践中重视引导学生进行模块化.规范性程序设计,强调规范化编程对学生理解程序的结构与功能的重要作用,并贯穿于课 ...

  5. 单片机c51语言变量,单片机c语言教程:C51变量

    上课所提到变量就是一种在程序执行过程中其值能不断变化的量.要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间.定义一个变量的格式如下: ...

  6. AD7606/AD7616使ZYNQ在能源电力领域如虎添翼,可实现16/32/64通道AD同步采样

    1 AD7606/AD7616介绍 AD7606是ADI公司的16位.8通道同步采样AD芯片,并行采样率高达200KSPS(AD7616是16位.16通道.1MSPS).在电力线路测量和保护系统中,需 ...

  7. 请描述定时器初值的计算方式_单片机C语言编程中定时器初值计算的两种方法...

    单片机C语言编程中,定时器的初值对于初学者真的是比较不好计算,因此我总结了以下几种方法. 第1种方法: #define FOSC 11059200L //晶振的频率 #define TIMS (655 ...

  8. 单片机C语言中的位运算符,单片机c语言教程第八课 运算符和表达式(位运算符)...

    学过汇编的朋友都知道汇编对位的处理能力是很强的,但是单片机C语言也能对运算对象进行按位操作,从而使单片机C语言也能具有一定的对硬件直接进行操作的能力.位运算符的作用是按位对变量进行运算,但是并不改变参 ...

  9. c语言程序设计中常用语句,单片机C语言编程常用语句

    <单片机C语言编程常用语句>由会员分享,可在线阅读,更多相关<单片机C语言编程常用语句(22页珍藏版)>请在人人文库网上搜索. 1.C51程式设计一般陈述式摘要,1,C51 S ...

最新文章

  1. 局部内部类访问方法中的局部变量为什么加final
  2. pandas使用replace函数将dataframe指定数据列中的特定字符串进行自定义替换(replace substring in dataframe column values)
  3. Silverlight:如何在程序中获取网站的根目录
  4. kubernetes 配置kubedns
  5. java 对象多属性排序_java list按照元素对象的指定多个字段属性进行排序
  6. 关于mysql中int(1)中int后面的数字
  7. php strrchar,php文件上传
  8. 如何通过query获得一个product的所有附件
  9. 最细致的Spring Boot结合Vue前后端分离项目打包部署步骤(搭配Nginx)
  10. SLAM的一些基础知识
  11. Ubuntu-10.04中设置和修改root密码
  12. PcShare2005代码阅读(1)
  13. 卡巴斯基2017免费版发布下载:文件/网页杀毒、自动更新/保护
  14. 我今天给来学习的学员试讲的课程笔记-2019-04-20
  15. 干货:学编程适合用什么配置的电脑?
  16. springboot设置空参数_springboot请求参数为空
  17. 浅谈framework之PowerManagerService
  18. 债券基础知识和可转债剖析
  19. 随机生成10个0-100的正整数
  20. Unity 输出360图片

热门文章

  1. js 排班插件_JS实现日程安排 日程安排插件
  2. java中的repo什么意思,repo是什么意思什么梗 repo的含义及出处
  3. 有限体积法(4)——一维扩散方程数值求解(第二类边界条件)
  4. 数据挖掘建模的标准流程是什么,主要分为哪几步?
  5. open-set recognition(OSR)开集识别
  6. Invalid prop: type check failed for prop “total“. Expected Number with value 0, got String with valu
  7. java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain valu
  8. 统一登录验证统一返回格式统一异常处理的实现
  9. 计算机行业除了编程还有什么工作可以选,计算机行业除了编程还有什么工作可以选?...
  10. 总结html标签及用法,HTML标签总结