终端输出不是逻辑分析仪得到的

时间:2014-11-08 21:49:22

标签: c hex spi

这应该很容易,但它让我难过。我有一块物理板,我用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

1 个答案:

答案 0 :(得分:0)

按照惯例,我在提出问题后弄清楚了我的问题。我想写出来真有帮助。通常我会删除帖子,但我发现解决方案略显幽默,也许很有趣。

比较D51和AA2,我注意到...... AA2只是左转D51。什么?为什么我的数据向左移动?我的代码中从未这样做过。所以,我把它换回另一种方式来补偿并获得正确的价值观。

那是我意识到的时候。我的时钟极性设置是倒退的。它只读了12位中的11位,所以我正在阅读所有内容,但只是在数量级上。