这个程序的寄存器读取时和STM32通讯的,之前有一个是和AVR通讯的,这个程序已经调试通过,原理比较简单,相信认真看的都能够明白。
因为ADS8364为差分AD,所以其输出为补码形式,按照2.5V的参考电压源输出的数据范围为-32768~+32768,如果AIN- 连到VREF(2.5V),那么当AIN+ 输入为0时 输出的数据为0x8000,如果AIN+ 输入为2.5V则输出数据为0x0000,AIN+ 输入为5V时输出数据位0x7F。程序如下:
--最后修改2011.3.26
--最后测试功能:
--利用第一块板子测试ADS8364
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
--------------------------------------------------------------------------------------
--此段定义系统的各信号线
--------------------------------------------------------------------------------------
entity ad is
port(
-- 系统信号线
clk: in std_logic;
led: out std_logic;
rst: in std_logic;
-- arm相连的信号线
adr_l: in std_logic_vector(7 downto 0); --a7...a0,只使用了低八位地址线
data: inout std_logic_vector(7 downto 0); --只使用了低八位数据线
fsmc_ne4: in std_logic;
fsmc_noe: in std_logic;
fsmc_nwe: in std_logic;
--ad8364信号线
adc_d: in std_logic_vector(15 downto 0);
adc_a0,adc_a1,adc_a2: out std_logic;
adc_reset: out std_logic;
adc_cs: out std_logic;
adc_wr: out std_logic;
adc_rd: out std_logic;
adc_holda,adc_holdb,adc_holdc: out std_logic;
adc_eoc: in std_logic;
adcclk_out: out std_logic
);
end entity;
--统一编址,地址线数据线为八位,每个地址数据宽度8位
--"00000001" ad0_h_data 0x01
--"00000010" ad0_l_data 0x02
--"00000011" ad1_h_data 0x03