赞
踩
源码下载:GitHub - Redamancy785/FPGA-Learning-Record: 项目博客:https://blog.csdn.net/weixin_51460407
管脚约束中有些管脚没有使用到,为了避免在分析综合时报错,要在xdc文件的最开始加入如下代码,即可编译通过。
set_property SEVERITY {Warning} [get_drc_checks NSTD-1]
set_property SEVERITY {Warning} [get_drc_checks RTSTAT-1]
set_property SEVERITY {Warning} [get_drc_checks UCIO-1]
使用应用库编写代码:
以上编译库是小梅哥为开发板提供的应用库,直接添加到自己的工程中即可。可自行下载:
【ACZ7015】ACZ7015型ZYNQ+PCIE开发板用户自助服务手册 - ACZ7015开发板 - 芯路恒电子技术论坛 - Powered by Discuz!
-
- #include "COMMON.h"
-
- //用于存储数码管的编码值,依次为0,1,2,3,4,5,6,7,8,9,-,.
- uint8_t Seg_Code[12] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0x7F};
- //赋予初值,数码管编码CH- 0.000
- uint8_t Dig_Data[8][2] = {{0xC6,0x80},{0x89,0x40},{0xBF,0x20},{0xFF,0x10},
- {0x40,0x08},{0xC0,0x04},{0xC0,0x02},{0xC0,0x01}};
- //设置ADC通道为INT0
- uint8_t ADC_Channel = 0;
-
-
- int main()
- {
- uint16_t i;
- uint8_t Set_Channel[2] = {0x00,0x00}; //存储发送的通道数据8*2=16bit
- uint8_t ADC_Raw_Data[2]; //存储读取的ADC原始数据8*2=16bit
- uint32_t ADC_Acc_Val; //存储ADC累加值
- float ADC_Val; //ADC电压值
-
- ScuGic_Init(); //初始化通用中断控制器
-
- //初始化SPI0设备,设为主机模式,11 模式
- PS_SPI_Init(&SPI0, XPAR_XSPIPS_0_DEVICE_ID, XSPIPS_CLK_PRESCALE_16, XSPIPS_MASTER_OPTION
- | XSPIPS_CLK_PHASE_1_OPTION
- | XSPIPS_CLK_ACTIVE_LOW_OPTION
- );
- //初始化SPI1设备,设为主机模式,11模式
- PS_SPI_Init(&SPI1, XPAR_XSPIPS_1_DEVICE_ID, XSPIPS_CLK_PRESCALE_8, XSPIPS_MASTER_OPTION
- | XSPIPS_CLK_PHASE_1_OPTION
- | XSPIPS_CLK_ACTIVE_LOW_OPTION
- );
-
- ScuTimer_Int_Init(2000); //初始化定时器,设置为2000us启动定时器
-
-
- while (1) {
- ADC_Acc_Val = 0; //ADC累加值清零
- Set_Channel[0] = ADC_Channel << 3; //使用通道值计算设定值
-
- //ADC原始数据累加1024次
- for (i = 0;i < 1024;i++) {
- PS_SPI_Transfer(&SPI0, 0, ADC_Raw_Data, Set_Channel, 2); //用SPI与ADC128S通信,收发2字节
- ADC_Acc_Val += ((ADC_Raw_Data[0] & 0x0F) << 8) + ADC_Raw_Data[1]; //ADC数值累加
- }
-
- ADC_Val = ADC_Acc_Val / 1024 * 3.3 / 4095 ; //将累加值除以1024取平均值,然后使用公式换算为电压值
-
- Dig_Data[2][0] = Seg_Code[ADC_Channel]; //通道值
- Dig_Data[4][0] = Seg_Code[(int)ADC_Val] & 0x7F; //电压整数位
- Dig_Data[5][0] = Seg_Code[(int)(ADC_Val * 10) % 10]; //电压值十分位
- Dig_Data[6][0] = Seg_Code[(int)(ADC_Val * 100) % 10]; //电压值百分位
- Dig_Data[7][0] = Seg_Code[(int)(ADC_Val * 1000) % 10]; //电压值千分位
-
- usleep(500000); //每500ms更新一次数值
- }
- }
- #include "ISR.h"
-
- extern uint8_t Dig_Data[8][2];
- static uint8_t i;
-
- /**
- *****************************************************
- * @brief 私有定时器中断处理程序
- * @tag 本函数用来处理私有定时器中断,在内部加入用户程序即可
- *****************************************************
- **/
- void ScuTimer_IRQ_Handler(void *CallBackRef)
- {
- /* ↓↓↓用户处理↓↓↓ */
-
-
- //每过2ms用SPI控制数码管显示第i位数据
- PS_SPI_Transfer(&SPI1, 0, 0, Dig_Data[i], 2);
- if(i<8)
- i++;
- else
- i = 0;
-
-
- /* ↑↑↑结束处理↑↑↑ */
- XScuTimer_ClearInterruptStatus(&ScuTimer);
- }
左边排针是模拟输入 右边排针是GND。
数码管显示结果:通道0 1.604V
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。