


uint16_t?fifo_count = (FIFO_COUNTER0 <8) | FIFO_COUNTER1;然后就是讀取了:
uint8_t?data[3];spi_read(FIFO_DATA, data,?3);
接下來就把FIFO里面的數據還原我們感興趣的樣子:
uint32_t?fifo_word = (data[0] <16) | (data[1] <8) | data[2];uint16_t?adc_value = fifo_word &?0xFFFF; ?// 低?16?位為 ADC 數據uint8_t?tag = (fifo_word >>?16) &?0x0F; ? //?4-bit 通道標簽uint8_t?flag = (fifo_word >>?20) &?0x01; ?// ADC 是否飽和
可能讀比寫超前,那就讀取不到啊,都沒數據,所以要判斷。
讀取數據前,檢查?FIFO_COUNTER?確保 FIFO 非空。讀完 FIFO 后,清空緩沖區。
void?read_fifo_data()?{? ??uint16_t?fifo_count = (read_register(FIFO_COUNTER0) <8) |?read_register(FIFO_COUNTER1);? ??if?(fifo_count >?0) {? ? ? ??for?(int?i =?0; i < fifo_count; i++) {? ? ? ? ? ??uint8_t?data[3];? ? ? ? ? ??spi_read(FIFO_DATA, data,?3);? ? ? ? ? ??uint32_t?fifo_word = (data[0] <16) | (data[1] <8) | data[2];? ? ? ? ? ??uint16_t?adc_value = fifo_word &?0xFFFF;? ? ? ? ? ??uint8_t?tag = (fifo_word >>?16) &?0x0F;? ? ? ? ? ??uint8_t?flag = (fifo_word >>?20) &?0x01;? ? ? ? ? ??printf("ADC Value: %u, Channel: %d, Saturation: %d\n", adc_value, tag, flag);? ? ? ? }? ? }? ??// 清空 FIFO,避免數據重復? ??write_register(FIFO_CFG, FLUSH_FIFO);}

兩個芯片沒有大區別

[寫指令 | 地址]?->?[數據]





uint8_t?cmd =?0x0B;uint8_t?fifo_data[3];spi_read(cmd, fifo_data,?3);uint32_t?adc_value = (fifo_data[0] <16) | (fifo_data[1] <8) | fifo_data[2];
簡單
