这应该很容易,但它让我难过。我有一块物理板,我用C语言编程,通过SPI从另一个芯片读取信息。当我探测正确的引脚时,我收到以下代码字:
0xD54,除了它有点波动。没问题,因为它给我一个模拟信号的数字表示。值0xD54或多或少是正确的值。它肯定在正确的范围内。
我程序的终端输出给出了像0xAA8这样的值。绝对不在同一范围内。 这是代码:
uint32_t i;
uint8_t uc_pcs;
static uint16_t data;
uint16_t *p_buffer;
p_buffer = p_buf;
for (i = 0; i < size; i++) {
spi_write(SPI_MASTER_BASE, p_buffer[i], 0, 0);
/* Wait transfer done. */
while ((spi_read_status(SPI_MASTER_BASE) & SPI_SR_RDRF) == 0);
spi_read(SPI_MASTER_BASE, &data, &uc_pcs);
p_buffer[i] = data;
printf("Data = %X\n\r", *(p_buffer + i));
}
这里有一些原始数据。左边的数据是探测电路板的正确数据。右边的数据是通过上面的代码在终端中收到的数据。
D51 AA2
D4F A9E
D52 AA4
D52 AA4
答案 0 :(得分:0)
按照惯例,我在提出问题后弄清楚了我的问题。我想写出来真有帮助。通常我会删除帖子,但我发现解决方案略显幽默,也许很有趣。
比较D51和AA2,我注意到...... AA2只是左转D51。什么?为什么我的数据向左移动?我的代码中从未这样做过。所以,我把它换回另一种方式来补偿并获得正确的价值观。
那是我意识到的时候。我的时钟极性设置是倒退的。它只读了12位中的11位,所以我正在阅读所有内容,但只是在数量级上。