This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我使用的是 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 ();
}
您好 Uttam、
首先是更新:对于任何类型的写入(控制和 DAC)、问题现在仍然存在。 它不限于控制写入后的 DAC 写入。
为了使硬件每次都能正常工作、我被迫重复所有写入操作。 问题是间歇性的、也就是说、一次写入有时会起作用。 因此、我认为这是一个设置问题、或者可能与再次使用 SOMI 作为 TLV5636上的帧同步引脚有关。
第二: 让我们确保正确配置 SPI 外设(MSP432)、以便与 TLV5636连接。
SPI 初始化:
// SPI 主配置参数
const eUSCI_SPI_MasterConfig spiB2_Config =
{
EUSCI_B_SPI_CLOCKSOURCE_SMCLK、// 12MHz SMCLK 时钟源
12000000、// SMCLK = 12MHz
12000000、// SPICLK = 12MHz ->对于 TLV56XX DAC
EUSCI_B_SPI_MSB_FIRST、// MSB 优先
EUSCI_B_SPI_PHASE_DATA_Changed_ONFIRST_Captured_On_Next、//相位
EUSCI_B_SPI_CLOCKPOLARITY_INACTION_LOW、//低极性
EUSCI_B_SPI_3引脚// 3线 SPI 模式:SOMI、SIMO、CLK:请注意、SOMI 后来被配置为 GPIO 以用作 DAC 帧同步
};
//================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//描述:
//
//假设时钟具有
//之前已配置。
//
//如果成功,则返回 true,否则返回 false
//================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
bool BP2_Slave_Transmiter_SPI_B2_Init (空)
{
bool bReturnVal;
b 返回值= RSC_true;
//================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//特定于 MSP432P401R Launch Pad 开发平台
//================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//配置 EUSCI_B2_SPI 引脚和 GPIO 引脚以与 EUSCI_B2_SPI 接口配合使用
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
// P3.5:SPI_B2 -> CLK
MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、GPIO_PIN5、GPIO_PRIMARY_MODULE_Function);
// P3.6:SPI_B2 <- SIMO
MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P3、GPIO_PIN6、GPIO_PRIMARY_MODULE_Function);
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//在3线主控模式下配置 SPI_B2
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
bReturnVal &= MAP_SPI_initMaster (EUSCI_B2_base、&spiB2_Config);
// P3.7:主机 MCU 输出-> DAC 帧同步
MAP_GPIO_setAsOutputPin (GPIO_PORT_P3、FSYNC_GPIO_BIT);
// P5.5:SPI_B2 ->芯片选择
MAP_GPIO_setAsOutputPin (GPIO_PORT_P5、B2_SPI_CS_BIT);
B2_SPI_DEASBERT_CS ();
B2_SPI_DEASBERT_FS ();
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//启用 SPI_B2模块
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
MAP_SPI_enableModule (EUSCI_B2_base);
MAP_SPI_clearInterruptFlag (EUSCI_B2_base、(EUSCI_SPI_Receive_interrupt | EUSCI_SPI_Transmit 中断));
MAP_SPI_DisableInterrupt (EUSCI_B2_base、(EUSCI_SPI_Receive_interrupt | EUSCI_SPI_Transmit 中断));
返回 bReturnVal;
}
进一步的证据。 2系列示波器捕捉:一个用于 TLV5606 (10位 DAC)、一个用于 TLV5636 (12位 DAC)。
主机 MCU 是一款运行电压为3.0V 的 MSP432。 在这两种情况下、DAC 电源均为3.6V。 所有 DAC 信号线路都超过2.8V 逻辑高电平。 这两种情况都表明、只有其他 DAC 写入会导致 DAC 输出发生变化。 DAC 更新速率为100kHz。 对于每个 DAC 数据写入、FAST 位被置位。
示波器捕获解码:
通道1 (黄色)是 SPI 主 器件数据输出
通道2 (绿色)是 SPI 主时钟
通道3 (蓝色)为 TLV56xx DAC 帧同步
通道4 (红色)是 DAC 输出。
TLV5606系列:
DAC 写入序列:
0x44FC -输出更改
0x46F8 -输出不变
0x48F4 -输出变化
0x4AF0 -输出不变
写入0x44FC 且输出发生变化。
写入0x46F8、DAC 输出无变化。
TLV5636系列:
DAC 写入序列:
0x44FF -输出改变
0x46FE -输出不变
0x48FD -输出变化
0x4AFC -输出不变
0x44FF 被写入 DAC、输出发生变化。
0x46FE 被写入 DAC、并且输出没有变化。
这一点看起来好像 MSP432 SPI 外设和 TLV56xx 系列 DAC 之间存在固有的不兼容性。
请告知、我获得一个高速、快速稳定 DAC 以连接 MSP432 SPI 外设至关重要。
对于 TI、
请确认我的上一篇帖子!
显然、MSP432 SPI 外设必须设置为:
// SPI 主配置参数
const eUSCI_SPI_MasterConfig spiB2_Config =
{
EUSCI_B_SPI_CLOCKSOURCE_SMCLK
12000000
12000000
EUSCI_B_SPI_MSB_FIRST
EUSCI_B_SPI_PHASE_DATA_Changed_ONFIRST_captured_on_next
EUSCI_B_SPI_CLOCKPOLARITY_INACTION_HIGH、//没有意义、但 TLV56xx 器件需要此设置
//EUSCI_B_SPI_CLOCKPOLARITY_INACTION_LOW
EUSCI_B_SPI_3引脚// 3线 SPI 模式:SOMI、SIMO、CLK
};
现在一切正常。
谢谢