主题中讨论的其他器件: MSP432P401R、 TLV5606
我使用的是 TLV5636 12位 DAC。 我注意到、通过调试器单步执行、基准选择控制寄存器写入之后立即写入的第一个 DAC 寄存器将被忽略。 接受第二次 DAC 写入(立即)、输出遵循 DAC 写入值。 有什么想法吗? 有关此器件和正确的写入过程的任何未编写/未发布的勘误表?
_TLV56xx_Write.ucResolution = RES_UNKNOWN;
_TLV56xx_Write.ucReferenceBitMap = REF2048;
_TLV56xx_Write.wDataValue = 0;
_TLV56xx_Write.bPowerDown = RSC_false;
//================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//步骤1.
//================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//打开发送器
TX_Enable_ON ();
暂停(10);
// 12位 DAC 也必须指定其基准源
//从 REF2048开始
_TLV56xx_Write.ucWriteMode = CONTRAL_WRITE;
_TLV56xx_Write.ucReferenceBitMap = REF2048;
TLV56xx_SPI_Write (&_TLV56xx_Write);
//将接近于零的负载电流放入 DAC 中
_TLV56xx_Write.ucResolution = RES_12位;
_TLV56xx_Write.ucWriteMode = DAC_WRITE;
对于10位或12位、//应接近中点、使用 TLV56xx_SPI_Write
_TLV56xx_Write.wDataValue = 0x07FC;
//出于我不完全理解的原因,control_write 后的第一个 DAC_WRITE 将被忽略!!
TLV56xx_SPI_Write (&_TLV56xx_Write);
//重复
TLV56xx_SPI_Write (&_TLV56xx_Write);
void TLV56xx_SPI_Write (TLV56xx_write_assist * pTLV56xx_Write_Assist)
{
易失性字 wData;
wData =(0x0FFF &(pTLV56xx_Write_Assist->wDataValue);
if (pTLV56xx_Write_Assist->bPowerDown)
{
// DAC 寄存器写入
pTLV56xx_Write_Assist->ucHighByte = POWER_DOWN_BIT;
pTLV56xx_Write_Assist->ucLowByte = 0x00;
}
否则、如果(pTLV56xx_Write_Assist->ucWriteMode = CONTRAL_WRITE)
{
//仅适用于带有基准控制寄存器的 TLV56xx 器件
//控制寄存器写入、POWER_DOWN_BIT 被强制为 RSC_FALSE
pTLV56xx_Write_Assist->ucHighByte = REG_SEL_bit_MAP;
pTLV56xx_Write_Assist->ucLowByte = pTLV56xx_Write_Assist->ucReferenceBitMap;
}
否则、如果(pTLV56xx_Write_Assist->ucWriteMode = DAC_WRITE)
{
// DAC 寄存器写入
if (pTLV56xx_Write_Assist->ucResolution =RES_10BIT)
{
//将10位数据值移位到正确的位位置
wData = wData << 2;
wData &= 0x0FFC;
}
pTLV56xx_Write_Assist->ucHighByte =(UCHAR)(wData >> 8);
pTLV56xx_Write_Assist->ucLowByte =(UCHAR)(wData & 0x00FF);
}
pTLV56xx_Write_Assist->ucHighByte |= FAST_BIT;
B2_SPI_ASSERT_CS ();
b2_spi_assert_fs ();
b2_spi_DataPut (pTLV56xx_Write_Assist->ucHighByte);
b2_spi_WaitOnTransmit();
b2_spi_DataPut (pTLV56xx_Write_Assist->ucLowByte);
b2_spi_WaitOnTransmit();
B2_SPI_WaitOnBusy ();
B2_SPI_DEASBERT_FS ();
B2_SPI_DEASBERT_CS ();
}