主题: 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 上。
提前感谢您的帮助!