主题: TMS320F280049中讨论的其他器件
工具/软件:
我正在使用 TMS320F280049来连接 ADS1256。 我将 F280049的 SPI 配置为1 MHz 的模式1、没有使用 FIFO 或中断、但我无法正确读取任何 ADS1256寄存器、即使我的逻辑分析仪布线看起来合理、ADC 仍会返回虚假数据。 下面是我的初始化代码以及我用于读取寄存器的函数:
void ADS1256_writeRegister(uint8_t reg, uint8_t value) {
CS_LOW();
while (GPIO_readPin(ADS1256_DRDY_GPIO))
;
SPI_writeByte(ADS1256_CMD_WREG | (reg & 0x0F));
SPI_writeByte(0x00); // write one register
SPI_writeByte(value);
CS_HIGH();
}
static void ADS1256_sendCmd(uint8_t cmd) {
CS_LOW();
SPI_writeByte(cmd);
CS_HIGH();
}
void ADS1256_init(void) {
while (GPIO_readPin(ADS1256_DRDY_GPIO))
;
CS_LOW();
SPI_writeByte(ADS1256_CMD_SELFCAL);
while (GPIO_readPin(ADS1256_DRDY_GPIO))
;
CS_HIGH();
ADS1256_writeRegister(ADS1256_STATUS, 0x06);
ADS1256_writeRegister(ADS1256_ADCON, ADS1256_PGA_GAIN_1);
ADS1256_writeRegister(ADS1256_DRATE, 0x23);
ADS1256_writeRegister(ADS1256_IO, 0x00);
while (GPIO_readPin(ADS1256_DRDY_GPIO))
;
CS_LOW();
SPI_writeByte(ADS1256_CMD_SELFCAL);
while (GPIO_readPin(ADS1256_DRDY_GPIO))
;
CS_HIGH();
}
uint8_t ADS1256_readRegister(uint8_t reg) {
uint8_t val;
ADS1256_sendCmd(ADS1256_CMD_SDATAC);
while (GPIO_readPin(ADS1256_DRDY_GPIO))
;
CS_LOW();
SPI_writeByte(ADS1256_CMD_RREG | (reg & 0x0F));
SPI_writeByte(0x01); // read one register
DEVICE_DELAY_US(50);
// val = SPI_receiveByte(ADS1256_SPI_BASE, 0x00);
// val = SPI_receiveByte(ADS1256_SPI_BASE, 0x00);
CS_HIGH();
return val;
}
我ADS1256_readRegister()在循环中运行函数、结果如下图所示:

在上图中、MISO 数据流不规则。 输出显示为乱码、而不是我正在读取的寄存器中的两个预期字节。
通过放大捕获可以看到、主器件发送的 SPI 命令和数据字节按预期显示、但从 ADS1256返回的数据仍然出现乱码:两个有效寄存器字节绝不会出现在 MISO 上。

提前感谢您的帮助!




