2014-11-08 69 views
0

這應該很容易,但它讓我難倒了。我有一個物理電路板,我正在用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

按照慣例,我在提出問題後找出問題所在。我想寫出來的東西確實有幫助。通常我會刪除帖子,但是我發現解決方案有點幽默,也許有趣。

比較D51和AA2,我注意到... AA2只是D51左移。什麼?爲什麼我的數據左移?我從來沒有在我的代碼中做過。所以,我把它移回另一個方式來補償並獲得正確的價值。

那是當我意識到它。我有的時鐘極性設置是倒退的。它只讀取了12位數中的11位,所以我正在讀取所有數據,但是數量級不等。