请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:DAC81416 主题中讨论的其他器件: DAC61416
大家好、我正在尝试在 tensy 和 dac81416之间进行连接。 我的 SPI 代码:
_SPI_SETTINGS = SPISettings (SPI_CLOCK _Hz、MSBFIRST、SPI_MODE0);
PinMode (cs_pin、输出);
//digitalWrite (_rst_pin、HIGH);
_spi->Begine();
}
内联 void DAC61416::cs_on (){
digitalWrite (cs_pin、low);
}
内联 void DAC61416::cs_off(){
digitalWrite (cs_pin、HIGH);
}
int DAC61416::init(){
//软复位,POR 被启动
WRITE_REG (R_TRIGGER、(0x001A));
//设置 SPIC委:DEV_PWDN=0,FSDO=1
uint16_t def = TEMPALM_EN (1)| DACBUSY_EN (0)| CRCALM_EN (1)| DEV_PWDWN (0)| CRC_EN (0)| SDO_EN (1)| FSDO (1)|(0x2 << 6);
WRITE_REG (R_SPICCCed1、def);
// WRITE_REG (R_SPIC70、0x0A84);
//读回 ***
返回(READ REG_(R_SPICD)== def? 0:-1);
}
void DAC61416:::WRITE_reg (uint8_t reg、uint16_t wdata){
uint8_t lsb =((uint16_t) wdata >> 0)& 0xFF;
uint8_t MSB =((uint16_t) wdata >> 8)& 0xFF;
_spi->BeginTransaction (_spi_settings);
CS_ON();
delayMicroseconds (1);
_spi->传输(reg);
_spi->传输(MSB);
_spi->传输(lsb);
tcsh_delay();
cs_off();
_spi->endTransaction ();
}
//DAC 写入所需的步骤:
//编写一个 DAC_WRITE 函数、该函数使用3个8位 SPI 写入来写入8位地址、
//并将16位数据拆分为8位 MSB 和8位 lsb。
uint16_t DAC61416::read_reg (uint8_t reg){
uint8_t buf[3];// 15-0
_spi->BeginTransaction (_spi_settings);
CS_ON();
_spi->传输((RREG | reg));
_spi->传输(0xff);
_spi->传输(0xff);
tcsh_delay();
cs_off();
CS_ON();
buf[0]=_SPI->transfer (0x00);
buf[1]=_SPI->transfer (0x00);
buf[2]=_SPI->transfer (0x00);
tcsh_delay();
cs_off();
_spi->endTransaction ();
//检查 buf[0]
uint16_t res =((buf[1]<< 8)| buf[2]);
返回(res);
}
我正在尝试将 SCLK 的24位帧指定为3 8位、这是正确的吗?
而且 CS 完全不会变为低电平。 但我已正确编码。(图1)
这是否与 SPI 时钟频率有关? 因为当我更改它时、我可以在芯片选择引脚中看到尖峰(图2)
您能告诉我我应该给它多少赫兹?
