AD7606续上一篇,硬件介绍方面就简单略过。
相关时序图参考如下:
串行输出接线如下:(此图少了DB8接数据线)
实物接线如下:
代码引脚定义如下:除了定义的引脚外,记得SER引脚接高电平,可以接FPGA的3.3V或5.0V。此外AD7606模块还需要供电5V。
程序组成同样,AD7606_UART为顶层,包含两个子模块。
AD7606_UART代码:
`timescale 1ns / 1ps
module AD7606_UART(
clk ,
rst_n ,
ad_os ,
ad_busy ,
ad_dataA,
ad_dataB,
ad_rst ,
ad_cvAB ,
ad_cs_n ,
ad_sclk,
uart_tx
);
input clk ; // 模块时钟输入 _ 50MHz
input rst_n ; // 输入复位(低电平有效)
input ad_busy ; // AD忙信号
input ad_dataA; // AD_DB7,SPI_MISO模式逐位输出通道1-通道4 _ 双Dout线路
input ad_dataB; // AD_DB8,SPI_MISO模式逐位输出通道5-通道8 _ 双Dout线路
output uart_tx;
output [2:0] ad_os ; // AD过采样模式选择引脚
output ad_rst ; // AD芯片复位(高电平有效),器件上电后应先复位50ns以上
output ad_cvAB ; // AD_启动AD转换控制信号,(CONVST A + CONVST B)接到一块使用
output ad_cs_n ; // AD片选信号(低电平有效)_ SPI CS_N
output ad_sclk ; // AD串行时钟线(SPI模式) _ SPI SCLK _ 设置为12.5MHz
// AD转换数据输出
wire ad_done ; // AD所有通道转换完输出一次,持续一时钟周期_50MHz
wire[15:0] ad_ch1 ; // AD第1通道输出数据
wire[15:0] ad_ch2 ; // AD第2通道输出数据
wire[15:0] ad_ch3 ; // AD第3通道输出数据
wire[15:0] ad_ch4 ; // AD第4通道输出数据
wire[15:0] ad_ch5 ; // AD第5通道输出数据
wire[15:0] ad_ch6 ; // AD第6通道输出数据
wire[15:0] ad_ch7 ; // AD第7通道输出数据
wire[15:0] ad_ch8 ; // AD第8通道输出数据
wire[15:0] data1 ;
wire[15:0] data2 ;
wire[15:0] data3 ;
wire[15:0] data4 ;
wire[15:0] data5 ;
wire[15:0] data6 ;
wire[15:0] data7 ;
wire[15:0] data8 ;
AD7606_drive AD7606_drive(
. clk (clk) , // 模块时钟输入 _ 50MHz
. rst_n (rst_n ), // 输入复位(低电平有效)
. ad_busy (ad_busy), // AD忙信号
. ad_dataA(ad_dataA), // AD_DB7,SPI_MISO模式逐位输出通道1-通道4 _ 双Dout线路
. ad_dataB(ad_dataB), // AD_DB8,SPI_MISO模式逐位输出通道5-通道8 _ 双Dout线路
. ad_os (ad_os ), // AD过采样模式选择引脚
. ad_rst (ad_rst ), // AD芯片复位(高电平有效),器件上电后应先复位50ns以上
. ad_cvAB (ad_cvAB ), // AD_启动AD转换控制信号,(CONVST A + CONVST B)接到一块使用
. ad_cs_n (ad_cs_n ), // AD片选信号(低电平有效)_ SPI CS_N
. ad_sclk (ad_sclk ), // AD串行时钟线(SPI模式) _ SPI SCLK _ 设置为12.5MHz
. ad_done (ad_done ), // AD所有通道转换完输出一次,持续一时钟周期_50MHz
. ad_ch1 (ad_ch1 ), // AD第1通道输出数据
. ad_ch2 (ad_ch2 ), // AD第2通道输出数据
. ad_ch3 (ad_ch3 ), // AD第3通道输出数据
. ad_ch4 (ad_ch4 ), // AD第4通道输出数据
. ad_ch5 (ad_ch5 ), // AD第5通道输出数据
. ad_ch6 (ad_ch6 ), // AD第6通道输出数据
. ad_ch7 (ad_ch7 ), // AD第7通道输出数据
. ad_ch8 (ad_ch8 ) // AD第8通道输出数据
);
uart_test uart_test(
.sys_clk(clk), //system clock 50Mhz on board
.rst_n(rst_n), //reset ,low active
.data1 (ad_ch1) ,
.data2 (ad_ch2) ,
.data3 (ad_ch3) ,
.data4 (ad_ch4) ,
.data5 (ad_ch5) ,
.data6 (ad_ch6) ,
.data7 (ad_ch7) ,
.data8 (ad_ch8) ,
.uart_tx(uart_tx)
);
endmodule
AD7606_drive代码:
///
// Module Name: AD7606_drive
// Description: AD7606_SPI模式,驱动模块
// 输入时钟频率:50MHz SPI_SCLK:12.5MHz
// 设置采样频率约为2Ksps(每采样完成一次停一会儿)_对应50MHz频率下6250个时钟周期
///
module AD7606_drive(
clk , // 模块时钟输入 _ 50MHz
rst_n , // 输入复位(低电平有效)
ad_busy , // AD忙信号
ad_dataA, // AD_DB7,SPI_MISO模式逐位输出通道1-通道4 _ 双Dout线路
ad_dataB, // AD_DB8,SPI_MISO模式逐位输出通道5-通道8 _ 双Dout线路
ad_os , // AD过采样模式选择引脚
ad_rage , // AD模拟输入范围选择, 1:+-10V 0:+-5V
ad_rst , // AD芯片复位(高电平有效),器件上电后应先复位50ns以上
ad_cvAB , // AD_启动AD转换控制信号,(CONVST A + CONVST B)接到一块使用
ad_cs_n , // AD片选信号(低电平有效)_ SPI CS_N
ad_sclk , // AD串行时钟线(SPI模式) _ SPI SCLK _ 设置为12.5MHz
ad_done , // AD所有通道转换完输出一次,持续一时钟周期_50MHz
ad_ch1 , // AD第1通道输出数据
ad_ch2 , // AD第2通道输出数据
ad_ch3 , // AD第3通道输出数据
ad_ch4 , // AD第4通道输出数据
ad_ch5 , // AD第5通道输出数据
ad_ch6 , // AD第6通道输出数据
ad_ch7 , // AD第7通道输出数据
ad_ch8 // AD第8通道输出数据
);
input clk ;// 模块时钟输入 _ 50MHz
input rst_n ; // 输入复位(低电平有效)
input ad_busy ; // AD忙信号
input ad_dataA; // AD_DB7,SPI_MISO模式逐位输出通道1-通道4 _ 双Dout线路
input ad_dataB; // AD_DB8,SPI_MISO模式逐位输出通道5-通道8 _ 双Dout线路
output [2:0] ad_os ; // AD过采样模式选择引脚
output ad_rage ; // AD模拟输入范围选择, 1:+-10V 0:+-5V
output reg ad_rst ; // AD芯片复位(高电平有效),器件上电后应先复位50ns以上
output reg ad_cvAB ; // AD_启动AD转换控制信号,(CONVST A + CONVST B)接到一块使用
output reg ad_cs_n ; // AD片选信号(低电平有效)_ SPI CS_N
output reg ad_sclk ; // AD串行时钟线(SPI模式) _ SPI SCLK _ 设置为12.5MHz
// AD转换数据输出 ;
output reg ad_done ; // AD所有通道转换完输出一次,持续一时钟周期_50MHz
output reg[15:0] ad_ch1 ; // AD第1通道输出数据
output reg[15:0] ad_ch2 ; // AD第2通道输出数据
output reg[15:0] ad_ch3 ; // AD第3通道输出数据
output reg[15:0] ad_ch4 ; // AD第4通道输出数据
output reg[15:0] ad_ch5 ; // AD第5通道输出数据
output reg[15:0] ad_ch6 ; // AD第6通道输出数据
output reg[15:0] ad_ch7 ; // AD第7通道输出数据
output reg[15:0] ad_ch8 ; // AD第8通道输出数据
// reg define
reg [15:0] init_cnt ; // 上电AD复位计数器
reg [15:0] state ; // 状态机
reg [15:0] state_cnt ; // 状态机中的等待计数器
reg [ 1:0] cnt_spi_clk ; // 分频计数器,0-3循环计数
reg cnt_spi_clk_en; // cnt_spi_clk计数器使能信号
reg spi_start ; // SPI接收计数循环开始,创造SCLK
// parameter define
parameter AD_IDLE = 16'b0000_0000_0000_0001; // 初始状态
parameter AD_CVAB = 16'b0000_0000_0000_0010; // AD全部通道开始转换状态
parameter AD_BUSY1 = 16'b0000_0000_0000_0100; // 等待一段时间,待busy信号为高电平状态
parameter AD_BUSY2 = 16'b0000_0000_0000_1000; // 然后等待busy信号下降沿(为低电平)状态
parameter AD_CSN = 16'b0000_0000_0001_0000; // 拉低AD(SPI)_CS_N片选信号
parameter AD_CH1_5 = 16'b0000_0000_0010_0000; // 读取通道1和通道5的AD转换值
parameter AD_CH2_6 = 16'b0000_0000_0100_0000; // 读取通道2和通道6的AD转换值
parameter AD_CH3_7 = 16'b0000_0000_1000_0000; // 读取通道3和通道7的AD转换值
parameter AD_CH4_8 = 16'b0000_0001_0000_0000; // 读取通道4和通道8的AD转换值
parameter AD_STOP = 16'b0000_0010_0000_0000; // 读取结束
/* `````````````````````````````````````````````````````*/
/* ``````````````````````main code``````````````````````*/
/* `````````````````````````````````````````````````````*/
assign ad_os = 3'b000; // 不使用AD过采样
// cnt_spi_clk_en:cnt_spi_clk计数器使能信号
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt_spi_clk_en <= 1'b0;
else if(state == AD_STOP) // 结束状态,拉低使能信号,停止cnt_spi_clk的计数
cnt_spi_clk_en <= 1'b0;
else if(spi_start == 1'b1) // SPI_CS_N拉低,开始SPI数据接收,拉高cnt_spi_clk计数使能信号
cnt_spi_clk_en <= 1'b1;
end
// 分频计数器,0-3循环计数
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt_spi_clk <= 2'd0;
else if(cnt_spi_clk_en == 1'b1)
cnt_spi_clk <= cnt_spi_clk + 1'b1;
else if(cnt_spi_clk_en == 1'b0)
cnt_spi_clk <= 2'd0;
end
// 上电先复位_拉高AD芯片一段时间
always@(posedge clk or negedge rst_n)
begin
if(!rst_n) begin
init_cnt <= 16'd0;
ad_rst <= 1'b1 ; // 上电首先把AD芯片拉高复位
end
else if(init_cnt < 16'hffff) begin
init_cnt <= init_cnt + 1'b1;
ad_rst <= 1'b1 ;
end
else
ad_rst <= 1'b0 ; // 一段时间后,AD芯片复位结束
end
// AD转换开始 + AD_SPI读取数据状态机
always@(posedge clk or negedge rst_n)
begin
if(!rst_n) begin
state <= AD_IDLE;
ad_cvAB <= 1'b1 ;
ad_cs_n <= 1'b1 ;
spi_start <= 1'b0 ;
state_cnt <= 16'd0 ;
ad_ch1 <= 16'd0 ;
ad_ch2 <= 16'd0 ;
ad_ch3 <= 16'd0 ;
ad_ch4 <= 16'd0 ;
ad_ch5 <= 16'd0 ;
ad_ch6 <= 16'd0 ;
ad_ch7 <= 16'd0 ;
ad_ch8 <= 16'd0 ;
ad_done <= 1'b0 ;
end
else case(state)
AD_IDLE: begin
ad_cvAB <= 1'b1;
ad_cs_n <= 1'b1;
ad_done <= 1'b0;
if(state_cnt == 16'd6000) begin // 采样频率2KHz:为6250个时钟周期(50MHz)采集一次,采集完一次约等6000个时钟周期,再进行下一次采集
state_cnt <= 16'd0 ;
state <= AD_CVAB;
end
else
state_cnt <= state_cnt + 1'b1;
end
AD_CVAB: begin
if(state_cnt == 16'd2) begin
state_cnt <= 16'd0 ;
state <= AD_BUSY1;
ad_cvAB <= 1'b1 ; // 间隔一段时间后拉高AD_CONVSTA+CONVSTB
end
else begin
state_cnt <= state_cnt + 1'b1;
ad_cvAB <= 1'b0; // 拉低AD_CONVSTA+CONVSTB,启动采集
end
end
AD_BUSY1: begin
if(state_cnt == 16'd5) begin // 等5个时钟周期,待busy信号为高
state_cnt <= 16'd0 ;
state <= AD_BUSY2;
end
else
state_cnt <= state_cnt + 1'b1;
end
AD_BUSY2: begin // 等待busy信号为低
if(ad_busy == 1'b0)
state <= AD_CSN;
end
AD_CSN: begin
ad_cs_n <= 1'b0 ; // 拉低SPI_CS_N片选
spi_start <= 1'b1 ; // 启动SPI接收计数循环,创造SCLK
state <= AD_CH1_5;
end
AD_CH1_5: begin // 双Dout输出
if(cnt_spi_clk == 2'd1) begin
ad_ch1 <= {ad_ch1[14:0],ad_dataA};
ad_ch5 <= {ad_ch5[14:0],ad_dataB};
state_cnt <= state_cnt + 1'b1;
if(state_cnt == 16'd15) begin
state_cnt <= 16'd0 ;
state <= AD_CH2_6;
end
end
end
AD_CH2_6: begin // 双Dout输出
if(cnt_spi_clk == 2'd1) begin
ad_ch2 <= {ad_ch2[14:0],ad_dataA};
ad_ch6 <= {ad_ch6[14:0],ad_dataB};
state_cnt <= state_cnt + 1'b1;
if(state_cnt == 16'd15) begin
state_cnt <= 16'd0 ;
state <= AD_CH3_7;
end
end
end
AD_CH3_7: begin // 双Dout输出
if(cnt_spi_clk == 2'd1) begin
ad_ch3 <= {ad_ch3[14:0],ad_dataA};
ad_ch7 <= {ad_ch7[14:0],ad_dataB};
state_cnt <= state_cnt + 1'b1;
if(state_cnt == 16'd15) begin
state_cnt <= 16'd0 ;
state <= AD_CH4_8;
end
end
end
AD_CH4_8: begin // 双Dout输出
if(cnt_spi_clk == 2'd1) begin
ad_ch4 <= {ad_ch4[14:0],ad_dataA};
ad_ch8 <= {ad_ch8[14:0],ad_dataB};
state_cnt <= state_cnt + 1'b1;
if(state_cnt == 16'd15) begin
state_cnt <= 16'd0 ;
state <= AD_STOP;
end
end
end
AD_STOP: begin
ad_cs_n <= 1'b1;
ad_done <= 1'b1;
state <= AD_IDLE;
end
default: begin
state <= AD_IDLE;
end
endcase
end
// SPI_SCLK:ad_sclk信号
always@(*)
begin
case(state)
AD_IDLE,AD_CVAB,AD_BUSY1,AD_BUSY2,AD_STOP: // SPI读取数据之前和之后,SCLK一直保持高电平
ad_sclk <= 1'b1;
AD_CH1_5,AD_CH2_6,AD_CH3_7,AD_CH4_8 : begin // SPI读取CH1-CH8时,SCLK的变化
if(cnt_spi_clk == 2'd0 || cnt_spi_clk == 2'd1) // cnt_iic_clk等于0、1时:SPI_SCLK为低电平
ad_sclk <= 1'b0;
else // cnt_iic_clk等于2、3时:SPI_SCLK为高电平
ad_sclk <= 1'b1;
end
default : // 其他情况,SCLK保持高电平
ad_sclk <= 1'b1;
endcase
end
endmodule
uart_test代码:
module uart_test(
input sys_clk, //system clock 50Mhz on board
input rst_n, //reset ,low active
input [15:0] data1,
input [15:0] data2,
input [15:0] data3,
input [15:0] data4,
input [15:0] data5,
input [15:0] data6,
input [15:0] data7,
input [15:0] data8,
output uart_tx
);
parameter CLK_FRE = 50;//Mhz
localparam IDLE = 0;
localparam SEND = 1; //send HELLO ALINX\r\n
localparam WAIT = 2; //wait 1 second and send uart received data
reg[7:0] tx_data;
reg[7:0] tx_str;
reg tx_data_valid;
wire tx_data_ready;
reg[7:0] tx_cnt;
reg[31:0] wait_cnt;
reg[3:0] state;
always@(posedge sys_clk or negedge rst_n)
begin
if(rst_n == 1'b0)
begin
wait_cnt <= 32'd0;
tx_data <= 8'd0;
state <= IDLE;
tx_cnt <= 8'd0;
tx_data_valid <= 1'b0;
end
else
case(state)
IDLE:
state <= SEND;
SEND:
begin
wait_cnt <= 32'd0;
tx_data <= tx_str;
if(tx_data_valid == 1'b1 && tx_data_ready == 1'b1 && tx_cnt < 8'd23)//Send 12 bytes data
begin
tx_cnt <= tx_cnt + 8'd1; //Send data counter
end
else if(tx_data_valid && tx_data_ready)//last byte sent is complete
begin
tx_cnt <= 8'd0;
tx_data_valid <= 1'b0;
state <= WAIT;
end
else if(~tx_data_valid)
begin
tx_data_valid <= 1'b1;
end
end
WAIT:
begin
wait_cnt <= wait_cnt + 32'd1;
if(tx_data_valid && tx_data_ready)
begin
tx_data_valid <= 1'b0;
end
else if(wait_cnt >= CLK_FRE * 1000) // wait for 1 ms
state <= SEND;
end
default:
state <= IDLE;
endcase
end
//combinational logic
//Send "HELLO ALINX\r\n"
always@(*)
begin
case(tx_cnt)
8'd0 : tx_str <= 8'h88;
8'd1 : tx_str <= data1[15:8];
8'd2 : tx_str <= data1[7:0];
8'd3: tx_str <= 8'h89;
8'd4 : tx_str <= data2[15:8];
8'd5 : tx_str <= data2[7:0];
8'd6: tx_str <= 8'h8a;
8'd7 : tx_str <= data3[15:8];
8'd8 : tx_str <= data3[7:0];
8'd9: tx_str <= 8'h8b;
8'd10 : tx_str <= data4[15:8];
8'd11 : tx_str <= data4[7:0];
8'd12: tx_str <= 8'h8c;
8'd13 : tx_str <= data5[15:8];
8'd14 : tx_str <= data5[7:0];
8'd15: tx_str <= 8'h8d;
8'd16 : tx_str <= data6[15:8];
8'd17 : tx_str <= data6[7:0];
8'd18: tx_str <= 8'h8e;
8'd19 : tx_str <= data7[15:8];
8'd20 : tx_str <= data7[7:0];
8'd21: tx_str <= 8'h8f;
8'd22 : tx_str <= data8[15:8];
8'd23 : tx_str <= data8[7:0];
default:tx_str <= 8'd0;
endcase
end
uart_tx#
(
.CLK_FRE(CLK_FRE),
.BAUD_RATE(115200)
) uart_tx_inst
(
.clk (sys_clk ),
.rst_n (rst_n ),
.tx_data (tx_data ),
.tx_data_valid (tx_data_valid ),
.tx_data_ready (tx_data_ready ),
.tx_pin (uart_tx )
);
endmodule
uart_tx代码:
module uart_tx
#(
parameter CLK_FRE = 50, //clock frequency(Mhz)
parameter BAUD_RATE = 115200 //serial baud rate
)
(
input clk, //clock input
input rst_n, //asynchronous reset input, low active
input[7:0] tx_data, //data to send
input tx_data_valid, //data to be sent is valid
output reg tx_data_ready, //send ready
output tx_pin //serial data output
);
//calculates the clock cycle for baud rate
localparam CYCLE = CLK_FRE * 1000000 / BAUD_RATE;
//state machine code
localparam S_IDLE = 1;
localparam S_START = 2;//start bit
localparam S_SEND_BYTE = 3;//data bits
localparam S_STOP = 4;//stop bit
reg[2:0] state;
reg[2:0] next_state;
reg[15:0] cycle_cnt; //baud counter
reg[2:0] bit_cnt;//bit counter
reg[7:0] tx_data_latch; //latch data to send
reg tx_reg; //serial data output
assign tx_pin = tx_reg;
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
state <= S_IDLE;
else
state <= next_state;
end
always@(*)
begin
case(state)
S_IDLE:
if(tx_data_valid == 1'b1)
next_state <= S_START;
else
next_state <= S_IDLE;
S_START:
if(cycle_cnt == CYCLE - 1)
next_state <= S_SEND_BYTE;
else
next_state <= S_START;
S_SEND_BYTE:
if(cycle_cnt == CYCLE - 1 && bit_cnt == 3'd7)
next_state <= S_STOP;
else
next_state <= S_SEND_BYTE;
S_STOP:
if(cycle_cnt == CYCLE - 1)
next_state <= S_IDLE;
else
next_state <= S_STOP;
default:
next_state <= S_IDLE;
endcase
end
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
begin
tx_data_ready <= 1'b0;
end
else if(state == S_IDLE)
if(tx_data_valid == 1'b1)
tx_data_ready <= 1'b0;
else
tx_data_ready <= 1'b1;
else if(state == S_STOP && cycle_cnt == CYCLE - 1)
tx_data_ready <= 1'b1;
end
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
begin
tx_data_latch <= 8'd0;
end
else if(state == S_IDLE && tx_data_valid == 1'b1)
tx_data_latch <= tx_data;
end
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
begin
bit_cnt <= 3'd0;
end
else if(state == S_SEND_BYTE)
if(cycle_cnt == CYCLE - 1)
bit_cnt <= bit_cnt + 3'd1;
else
bit_cnt <= bit_cnt;
else
bit_cnt <= 3'd0;
end
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
cycle_cnt <= 16'd0;
else if((state == S_SEND_BYTE && cycle_cnt == CYCLE - 1) || next_state != state)
cycle_cnt <= 16'd0;
else
cycle_cnt <= cycle_cnt + 16'd1;
end
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
tx_reg <= 1'b1;
else
case(state)
S_IDLE,S_STOP:
tx_reg <= 1'b1;
S_START:
tx_reg <= 1'b0;
S_SEND_BYTE:
tx_reg <= tx_data_latch[bit_cnt];
default:
tx_reg <= 1'b1;
endcase
end
endmodule
引脚约束代码:
set_property IOSTANDARD LVCMOS33 [get_ports {ad_os[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {ad_os[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {ad_os[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports ad_busy]
set_property IOSTANDARD LVCMOS33 [get_ports ad_cs_n]
set_property IOSTANDARD LVCMOS33 [get_ports ad_cvAB]
set_property IOSTANDARD LVCMOS33 [get_ports ad_dataA]
set_property IOSTANDARD LVCMOS33 [get_ports ad_dataB]
set_property IOSTANDARD LVCMOS33 [get_ports ad_rst]
set_property IOSTANDARD LVCMOS33 [get_ports ad_sclk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports uart_tx]
set_property PACKAGE_PIN N18 [get_ports clk]
set_property PACKAGE_PIN P16 [get_ports rst_n]
set_property PACKAGE_PIN V16 [get_ports {ad_os[2]}]
set_property PACKAGE_PIN W16 [get_ports {ad_os[1]}]
set_property PACKAGE_PIN T17 [get_ports {ad_os[0]}]
set_property PACKAGE_PIN R18 [get_ports ad_busy]
set_property PACKAGE_PIN W13 [get_ports ad_cs_n]
set_property PACKAGE_PIN V12 [get_ports ad_cvAB]
set_property PACKAGE_PIN Y18 [get_ports ad_dataA]
set_property PACKAGE_PIN W19 [get_ports ad_dataB]
set_property PACKAGE_PIN T15 [get_ports ad_rst]
set_property PACKAGE_PIN T14 [get_ports ad_sclk]
set_property PACKAGE_PIN P14 [get_ports uart_tx]
接好线后,打开串口调试助手,115200波特率
数据形式:88XX XX 89 XX XX 8A XX XX 8B XX XX 8C XX XX 8D XX XX 8E XX XX 8F XX XX
88~8F均为通道号,后面为16位数据。
工程文件:
链接:https://pan.baidu.com/s/1kB05zxgk38Y592e4FngSzA
提取码:58ld
数据解读请看我上一篇文章,如果觉得有帮助,欢迎点赞收藏,谢谢。