您好,我想利用C6748的McBSP读取24位AD ADS1278。按照官方datasheet中提供的Frame-Sync方式对AD进行数据读取。
FSR配置为输出的帧同步脉冲,CLKR提供数据输出时钟,连续读出8个通道的数据。
我现在的问题是
1、要连续读取8个通道的24bit数据,那么McBSP是要使能8个channel,每个channel的数据格式设置成24bit数据。这样McBSP才能连续的读取这8个24bit数据?
2、当McBSP连续读取这个8个通道的数据时,如何通知CPU来读取这些数据?单个通道时的数据,可以利用FSR产生的中断,在中断程序中读取接收寄存器DRR中的数据。但是连续8个数据,我就不知道如何来读取了。接收寄存器DRR只有一个,它是如何连续的接收8个数据,如果不及时读出,是不是就会将数据覆盖,若要及时读出,如何在每收到一个通道数据后通知CPU来读取数据?若是要在中断程序中连续的读取8次,太占时间了。
Tony Tang:
zhong wan
您好,我想利用C6748的McBSP读取24位AD ADS1278。按照官方datasheet中提供的Frame-Sync方式对AD进行数据读取。
FSR配置为输出的帧同步脉冲,CLKR提供数据输出时钟,连续读出8个通道的数据。
我现在的问题是
1、要连续读取8个通道的24bit数据,那么McBSP是要使能8个channel,每个channel的数据格式设置成24bit数据。这样McBSP才能连续的读取这8个24bit数据?
—–AD的数据格式是一个帧同步输出24位呢,还是一个帧同步输出8×24位数据?
2、当McBSP连续读取这个8个通道的数据时,如何通知CPU来读取这些数据?单个通道时的数据,可以利用FSR产生的中断,在中断程序中读取接收寄存器DRR中的数据。但是连续8个数据,我就不知道如何来读取了。接收寄存器DRR只有一个,它是如何连续的接收8个数据,如果不及时读出,是不是就会将数据覆盖,若要及时读出,如何在每收到一个通道数据后通知CPU来读取数据?若是要在中断程序中连续的读取8次,太占时间了。
—-每收到一个数据,都会产生一个中断信号的,当然并不建议用中断该去读数据,这样效率太低,建议用EDMA方式
user2001270:
回复 Tony Tang:
1、是一个帧同步,输出8*24位数据。
2、我的理解是,应当采用EDMA模式,McBSP的DRR寄存器每收到一个通道的24bit数据,就会自动将数据搬移到设定好的memory中,一帧自动搬移8次。假若我的采样率是fs,那么一秒的数据将是8*3*fs这么多bytes(虽然是24bit的AD,但在内存放置是32bit位宽,高8位补零,占4字节)。要先开辟这么大一块Memory,利用EDMA,让它自动将fs个帧的数据自动搬移到该Memory中,然后再产生一个中断信号,让CPU来读取。不知道有没有McBSP的多通道数据读取,配合EMDA进行数据搬移的程序可以参考呢?