1. 拿到板子在,做工很好,属于GX系列,GX应该是高速收发器

2. 去探究下GX是什么用途,大约有6个型号,这个板子是5CGXFX5,有77 LE逻辑单元,这个收发器不知道是什么?6个 3.125G Transceivers收发器。

3. 进去下载的资料发现有个ADC的例程,打算研究下ADC的例程

4. 这个板子有个配套的上位机ControlPanel软件,猜测是通过电脑的下载接口USB Blaser给板子下发指令,让板子去执行相应的操作。这个软件的操作就不说了。参考C5G_User_Manual.pdf第二章

5. 正式开始ADC的学习,板子试用ADC是LTC2308,看下它的介绍,8通道,12位的ADC,SPI接口

The LTC2308 is a low noise, 500ksps, 8-channel, 12-bit ADC with an SPI/MICROWIRE compatible serial interface. The internal conversion clock allows the external serial output data clock (SCK) to operate at any frequency up to 40MHz.

6. 看下接口图,正板子上有Arduino的接口

7. 看下原理图,U17,FPGA的电平难道是1.2V的?74AVC4T774电平转换,LTC2308和FPGA有4根线,标准的SPI接口

8. 通信的时序图

9. 打开工程看一下,本次还是用NIOS系统

 module C5G_ADC(

     //////////// CLOCK //////////
CLOCK_125_p,
CLOCK_50_B5B,
CLOCK_50_B6A,
CLOCK_50_B7A,
CLOCK_50_B8A, //////////// LED //////////
LEDG,
LEDR, //////////// KEY //////////
CPU_RESET_n,
KEY, //////////// SW //////////
SW, //////////// ADC SPI //////////
ADC_CONVST,
ADC_SCK,
ADC_SDI,
ADC_SDO, //////////// GPIO, GPIO connect to GPIO Default //////////
GPIO
);
input CLOCK_125_p;
input CLOCK_50_B5B;
input CLOCK_50_B6A;
input CLOCK_50_B7A;
input CLOCK_50_B8A; //////////// LED //////////
output [:] LEDG;
output [:] LEDR; //////////// KEY //////////
input CPU_RESET_n;
input [:] KEY; //////////// SW //////////
input [:] SW; //////////// ADC SPI //////////
output ADC_CONVST;
output ADC_SCK;
output ADC_SDI;
input ADC_SDO;
//////////// GPIO, GPIO connect to GPIO Default //////////
inout [:] GPIO; wire ADC_SCK_DELAY;
C5G_QSYS u0 (
.clk_clk (CLOCK_50_B5B), // clk.clk
.reset_reset_n (CPU_RESET_n), // reset.reset_n
.sw_external_connection_export (SW), // sw_external_connection.export
.adc_ltc2308_conduit_end_CONVST (ADC_CONVST), // adc_ltc2308_conduit_end.CONVST
.adc_ltc2308_conduit_end_SCK (ADC_SCK), // .SCK
.adc_ltc2308_conduit_end_SDI (ADC_SDI), // .SDI
.adc_ltc2308_conduit_end_SDO (ADC_SDO), // .SDO
.adc_ltc2308_conduit_end_SCK_DELAY (ADC_SCK_DELAY) // .SCK_DELAY
);
assign GPIO[] = ADC_SCK;
assign GPIO[] = ADC_SCK_DELAY;
assign GPIO[] = ADC_SDI;
assign GPIO[] = ADC_SDO;
signaltap_pll u_sig_pll(
.refclk(CLOCK_50_B7A), // refclk.clk
.rst('b0), // reset.reset
.outclk_0(), // 200MHz for signaltap sample clock.
.locked() // locked.export
);
endmodule

10. 不明白上面的GPIO是什么用途?

11. 搞完这些,需要用C语言去开发上层了,估计要用到EDS软件。

12. NIOS II EDS是用来搞NIOS软核处理器的开发软件,是Quartus自带的软件。还有个SOC EDS软件,是搞Cyclone V系列,带ARM内核的,需要另外安装

13. 打开NIOS II EDS软件,选择工作空间的时候,选择E:\FPGA\cyclone_v_gx\Demonstrations\C5G_ADC\software,这个路径,直接就添加了工程,有2个工程,一个是库BSP,类似于底层的。一个是我们自己写的工程,其中HAL库这个很重要,包括了很多需要用到的库函数。

14. 研究下mian.c代码

 #include <stdio.h>
#include <io.h>
#include <unistd.h> #include "system.h" void main(void){
int ch = ;
const int nReadNum = ; // max 1024
int i, Value, nIndex=; printf("ADC Demo\r\n");
while(){
ch = IORD(SW_BASE, 0x00) & 0x0F; printf("======================= %d, ch=%d\r\n", nIndex++, ch);
// set measure number for ADC convert
IOWR(ADC_LTC2308_BASE, 0x01, nReadNum); // start measure
IOWR(ADC_LTC2308_BASE, 0x00, (ch << ) | 0x00);
IOWR(ADC_LTC2308_BASE, 0x00, (ch << ) | 0x01);
IOWR(ADC_LTC2308_BASE, 0x00, (ch << ) | 0x00);
usleep(); // wait measure done
while ((IORD(ADC_LTC2308_BASE,0x00) & 0x01) == 0x00); // read adc value
for(i=;i<nReadNum;i++){
Value = IORD(ADC_LTC2308_BASE, 0x01);
printf("CH%d=%.3fV (0x%04x)\r\n", ch, (float)Value/1000.0, Value);
} usleep(*);
} // while
}

15. 先下载FPGA工程,插上USB线,USB BLASTER接口,驱动正确识别。拨码开关SW11到RUN模式。

16. 编程EDS下载测试。需要修改环境变量,和包含的头文件路径,编译工程。

17. 下载运行,先点菜单栏的RUM -> RUN configuration,选择目标连接Target Connection,点击Refresh刷新一下,看到板子,然后点击Run按钮。

18. 看到Nios II Console有输出

19. 这次剩下的疑问,ADC_LTC2308_BASE这个地址的寄存器是什么样子的?在C语言实现的原理是什么?

比如下面的代码,设置ADC的测量精度,0x01代表什么?如果是寄存器,那么每个寄存器的位的说明文档在哪里?如果不是寄存器,那是什么?

 // set measure number for ADC convert
IOWR(ADC_LTC2308_BASE, 0x01, nReadNum);

友晶Altera Cyclone V GX Starter Kit开发板使用ADC-第一篇的更多相关文章

  1. Microsoft IoT Starter Kit 开发初体验-反馈控制与数据存储

    在上一篇文章<Microsoft IoT Starter Kit 开发初体验>中,讲述了微软中国发布的Microsoft IoT Starter Kit所包含的硬件介绍.开发环境搭建.硬件 ...

  2. Microsoft IoT Starter Kit 开发初体验

    1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter Kit ,并且免费开放1000套的申请.申请地址为:http:// ...

  3. 介绍使用Cordova和Web Starter Kit开发Android

    介绍 如今,每个人都想制作移动应用程序,为什么不呢?世界上有更多的移动设备比任何其他用户设备.Android尤其流行,但是为什么不从一个众所周知的跨平台应用的基础开始呢?Android的开发显然比其他 ...

  4. Microsoft IoT Starter Kit

    Microsoft IoT Starter Kit 开发初体验 1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter K ...

  5. 转-友晶Sdram_Control_4Port的全页操作Bug?

    http://www.cnblogs.com/edaplayer/p/3678897.html 以前在学校初学fpga的时候碰到sdram就搞不定了,现在突然发现网上有好多现成的代码,友晶的,alte ...

  6. 首先看一下友晶DE-SOC开发板的user manual

    对于友晶DE-SOC系列开发板来说,由于其内部自带ARM 的cortex-A9硬核,所以使用nios II开发来说其实是不划算的,但是这里重点是为了学习NIOS II的开发,所以对于用DS-5来开发A ...

  7. Window 64bit环境搭建Web Starter Kit

    最近在学习https://developers.google.com/web/fundamentals/这里的内容,其中就有一部分是安装Web Starter Kit的教程,我总结一下自己的安装过程. ...

  8. asp.net的3个经典范例(ASP.NET Starter Kit ,Duwamish,NET Pet Shop)学习资料

    asp.net的3个经典范例(ASP.NET Starter Kit ,Duwamish,NET Pet Shop)学习资料 NET Pet Shop .NET Pet Shop是一个电子商务的实例, ...

  9. React Starter Kit 中文文档

    最近没事又翻译了个玩意. Github上的一个Star 非常高的 React 样板程序. 由Node.js,Express,GraphQL和React构建,可选加入Redux等,并可以包含Webpac ...

随机推荐

  1. PHP------关于字符串的处理

    每一种语言对,字符串都是比较重要的,因为字符串牵扯到输出. 尤其是在网页里面,所有的内容输出,都要以字符串的形式展示在页面上.比如,输出换行.输出一段话或者输出一个标签,都是以字符串来输出的:有时用数 ...

  2. 【转】maven命令-P 参数引发的思考

    序言: maven 命令:clean package -Dmaven.test.skip=true -P product 1.命令很简单是:清class文件,打包构建,跳过测试,注意最后一个 -P p ...

  3. java并发编程之CompletionService

    应用场景当向Executor提交多个任务并且希望获得它们在完成之后的结果,如果用FutureTask,可以循环获取task,并调用get方法去获取task执行结果,但是如果task还未完成,获取结果的 ...

  4. SSH工具脚本录入

    SSH工具提供的脚本录制功能如下: Xshell:登陆脚本 SecretCRT:录制脚本,保存本地,登陆后选择执行 mRemoteNG :暂时没发现有脚本录入功能

  5. STM32之定时器输入捕获

    1.输入捕获模式可以用来测量脉冲宽度或者测量频率.STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能.STM32的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿 ...

  6. OSMboxPost()

    1.向邮箱发送一则消息 2.原型:INT8U OSMboxPost(OS_EVENT *pevent, void *msg) 3. pevent: 消息邮箱指针(ECB指针) msg:   消息指针 ...

  7. render 函数渲染表格的当前数据列使用

    columns7: [ { title: '编号', align: 'center', width: 90, key: 'No', render: (h, params) => { return ...

  8. insert插入数据

    insert 语法1 --插入的值需要用单引号引起来,否则字段插入会有问题,可能造成查询的时候查询不出结果 insert  into  表名 (列名1,列名2……)  ] values  ( '值1' ...

  9. Docker镜像浅谈

    先抛出几个我在学习过程中产生的几个问题. 1. 容器镜像是什么, 和装系统时的镜像有什么关系? 2. 容器镜像的作用是什么? 3. 不同版本的ubuntu镜像有什么区别, 比如说 ubuntu:18. ...

  10. 【若泽大数据实战第二天】Linux命令基础

    Linux基本命令: 查看IP: ifconfig 或者 hostname -i(需要配置文件之后才可以使用) ipconfig(Windows) 关闭防火墙: Service iptables st ...