文章目录
1. 前言
TPC219x 是一款具有 16、14 和 12 位分辨率的高精度 DAC,所有引脚均兼容。
该器件包括一个 2.5V 内部基准,可用于降低系统复杂性。
可以选择多个增益选项,以提供不同的满量程输出电压,1.25V、2.5V 和 5V。
该器件在单个模拟电源下工作,并具有单独的 VIO 电源用于数字通信。通信通过串行接口进行,并且可以在宽范围 VIO 电源电压下工作。
集成了一个上电复位电路,以将 DAC 输出保持在零电平或中间电平。
介绍源自3peak官网介绍;使用的TPC2190是一款16位DAC输出芯片;
2. SPI及引脚配置
截取 bit23 的位中心,可以看到在bit23的位中心,CS片选引脚为低电平;SCLK时钟线正处在下降沿,并且是在第一个沿,再细细观察一下,可以看到时钟线空闲时为高电平,由此可以得出配置的SPI的时钟极性和相位;至于数据传输脚的FSDO,是该芯片的一个使数据提前半个时钟周期开始读取的标志,可以用或者不用,需要去配置芯片的寄存器;
数据位数配置则要查看它的数据帧结构;在开启CRC时读和写的数据长度都是1帧数据4字节,在关闭CRC时,数据帧结构则是1帧数据3个字节;
那么,在开启CRC的情况下,可以将SPI数据长度配置为16位,关闭CRC时配为8位,当然,全凭个人喜好即可;
接下来就能得到如下配置,AT32的配置工具做了个示意图,比较了一下和TPC219x的数据传输时序是一致的;
void gpio_and_spi1_config()
{
gpio_init_type gpio_init_struct;
spi_init_type spi_init_struct;
/* enable gpioa periph clock */
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
/* enable spi1 periph clock */
crm_periph_clock_enable(CRM_SPI1_PERIPH_CLOCK, TRUE);
gpio_default_para_init(&gpio_init_struct);
gpio_bits_reset(GPIOA, GPIO_PINS_4);
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_4;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &gpio_init_struct);
gpio_default_para_init(&gpio_init_struct);
spi_default_para_init(&spi_init_struct);
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE5, GPIO_MUX_0);
/* configure the SCK pin */