大家好,我有一个具有上述 UC 的定制板,我需要使用它与 DACx0508进行通信。 我看到内置 SSI 模块一次最多只允许16位数据传输,但 DAC 需要24位数据。 我希望每次 使用12位数据拨打两个外设函数 SSIDataPut()的电话都能起到这种作用,但这并不是什么运气。 我认为它不起作用是因为 SSI 初始化有问题,而不是因为 DAC。 我测试的方法是在禁用 DAC 的内部2.5V 参考并查看电压是否变为3V 后检查电压。 下面是示意图和我的代码。
SSI 模块初始化,并在末尾设置 DAC 内部参考关闭:
注:地址0x3代表 DAC 的配置寄存器,数据0x0100将配置设置为关闭内部引用。 位23处的0指定这是一个写入。
//enable the pins used for SPI communication.
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOQ)){
}
//
// Configure the SS pin and communication pins as GPIO output pins.
//
GPIOPinTypeGPIOOutput(PQ_SPI_PORT, (PQ1_SPI_SS_MEMORY_PIN |
PQ4_SPI_SS_DIGIPOT_PIN |
PQ5_SPI_SS_DAC_PIN));
//
// Enable the SSI3 peripheral
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_SSI3)){
}
GPIOPinTypeSSI(PQ_SPI_PORT, ( PQ0_SPI_CLK_PIN |
PQ2_SPI_TX_PIN |
PQ3_SPI_RX_PIN));
GPIOPinConfigure(GPIO_PQ0_SSI3CLK);
GPIOPinConfigure(GPIO_PQ2_SSI3XDAT0);
GPIOPinConfigure(GPIO_PQ3_SSI3XDAT1);
// Wait for the SSI3 module to be ready.
//
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_SSI3))
{
}
uint32_t ui32SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_240), 50000000);
//
// Configure the SSI.
//
//Note the DAC uses 24 bits of data
SSIConfigSetExpClk(SSI3_BASE, ui32SysClock, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2000000 , 12);
//
//Enable the SSI module
//
SSIEnable(SSI3_BASE);
//Set the SS pins to high to disable communication.
GPIOPinWrite(PQ_SPI_PORT, PQ1_SPI_SS_MEMORY_PIN, PQ1_SPI_SS_MEMORY_PIN);
GPIOPinWrite(PQ_SPI_PORT, PQ4_SPI_SS_DIGIPOT_PIN, PQ4_SPI_SS_DIGIPOT_PIN);
GPIOPinWrite(PQ_SPI_PORT, PQ5_SPI_SS_DAC_PIN, PQ5_SPI_SS_DAC_PIN);
//Disable the internal reference of the DAC.
/*
* Write operation identifier: 0x0
* Address: 0x03
* Data: 0x0100
* */
uint32_t disableSignal = 0x00030100;
WriteToDAC(disableSignal);
写入功能将数据发送到 DAC:
static void WriteToDAC( int32_t DataToWrite )
{
//Set the DAC SS pin to low to activate the line.
GPIOPinWrite(PQ_SPI_PORT, PQ5_SPI_SS_DAC_PIN, 0x0);
//SPI can only send 16 bits at a time.
//Send the data over SPI.
SSIDataPut(SSI3_BASE, (DataToWrite >> 12) & 0xfff );
SSIDataPut(SSI3_BASE, DataToWrite & 0xfff );
//Set the DAC SS pin to high again to disable the communication.
GPIOPinWrite(PQ_SPI_PORT, PQ5_SPI_SS_DAC_PIN, PQ5_SPI_SS_DAC_PIN);
}
使用 SPI 的连接示意图。

DAC 数据表中的 DAC 写入位字段规格。

我的理论是 SSIConfigSetExpClk()调用中的比特率设置有问题,但我无法找出问题所在。 我们非常感谢您的帮助。

