This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AFE4960:MCU 从 AFE4960的 FIFO 读取数据时出现问题

Guru**** 1133960 points
Other Parts Discussed in Thread: AFE4960
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1343470/afe4960-problem-with-mcu-reading-data-from-fifo-of-afe4960

器件型号:AFE4960

你(们)好!

我有几个问题要请教您。

在双芯片串行模式下、在接收到 AFE4960发送的 FIFO_RDY 中断信号之后、MCU 开始通过 SPI 通信从 AFE4960的 FIFO 读取样本。
具体过程如下:
①Read 6D 地址寄存器的第0-7位来获得 FIFO 中的采样值数量。
②According 至样本数、通过在 while 循环中写入 FFh 来单独读取样本。
因此、FIFO 溢出。

void capture(void)
{
//				Flag=0x01;
	      volatile uint16_t numWordsToRead[2]={0,0};
				txBuffPointer = 0;
        TX_BUFF[txBuffPointer++]=0;
        TX_BUFF[txBuffPointer++]=0;
        TX_BUFF[txBuffPointer++]=0;
        TX_BUFF[txBuffPointer++]=2;//心电数据

        /*Read pointer difference from AFE1*/
        SPI_READ_MODE=READ_AFE1;
        readSPI(0x6D,(uint8_t *)&afeRegData);//写入和读取指针之间的指针差异 AFE4960 6D
        copyRegDataInTxBuf1(3);
        numWordsToRead[0]=(afeRegData+1)&0xFF;

//        /*Read pointer difference from AFE2*/
        SPI_READ_MODE=READ_AFE2;
        readSPI(0x6D,(uint8_t *)&afeRegData);
        copyRegDataInTxBuf1(4);
        numWordsToRead[1]=(afeRegData+1)&0xFF;//循环队列


        SPI_READ_MODE=READ_AFE1;
        while(numWordsToRead[0]!=0)
        {
            readSPI(0xFF,(uint8_t *)&afeRegData);//从fifo中读取数据
            copyRegDataInTxBuf1(5);
            numWordsToRead[0]--;
        }

        SPI_READ_MODE=READ_AFE2;
        while(numWordsToRead[1]!=0)
        {
            readSPI(0xFF,(uint8_t *)&afeRegData);
            copyRegDataInTxBuf1(6);
            numWordsToRead[1]--;
        }
				captureStatus=0x01;

        
    
}

我们应该如何从 FIFO 获取样本?