主题中讨论的其他器件:ADS131A04
您好! 我正在使用 MSP432与 ADS131A04 ADC 进行通信、 我希望以10.24kHz 数据速率使用 ADC。
问题是、在新数据可用之前、我无法足够快地读取通道数据。 在10.24kHz 时、我需要读取最大值~100us。 在读取函数中、我在 while 环路中等待下一个 DRDY 中断。
我已附加以下逻辑分析仪捕获(可以使用免费的 Salae Logic Pro 软件打开它们;通道4为 DRDY):
1kHz 数据速率、1MHz SPI 时钟-字节时间为8us、字节之间的时间为~8us、字时间~314us;
2. 1kHz 数据速率、4MHz SPI 时钟-字节时间为4us、字节之间的时间为~10us、字时间~253us;
3kHz 数据速率、8MHz SPI 时钟- 字节时间为1us、字节之间的时间为~7us、字时间~170us;
10.24kHz 数据速率、8MHz SPI 时钟- 字节时间为1us、字节之间的时间为~7us、字时间~170us;您可以在读取所有数据之前看到 DRDY 发生变化;
您可以找到所附的示波器屏幕截图、其中显示了 1kHz 数据速率、24MHz SPI 时钟下的 MISO。 这些行是构成字的20个字节、字的传输持续时间为~170us。
我需要一个小于100us 的字传输时间、以便能够及时读取下一个样本。 24MHz 是 MSP432可以提供的最大 SPI 时钟、25MHz 是 ADC 接受的最大 SPI 时钟。 7us 表示在48MHz 下 MSP432为336个周期。 这些周期花费在何处?
这是我的代码:
对于(i = 0;i < noSamples;i++)
{
while (adcSampleAvailable=false)//等待!DRDY
{
//map_PCM_gotoLPM0InterruptSafe ();
//map_Interrupt_enableMaster ();
}
adcSampleable = false;
//读取样本
= ADS1304_enable_read (ADS1304); // rxSTAT_1 x 4字节+ 4通道 x 4字节
*(readDataCh1 + I)=(*(rxData + 4)<< 16)|(*(rxData + 5)<< 8)|(*(rxData + 6));
*(readDataCh2 + I)=(*(rxData + 8)<< 16)|(rxData + 8)|(*(rxData + 8)+ 8)
*(readDataCh3 + I)=(*(rxData + 12)<< 16)|(*(rxData + 13)<< 8)|(*(rxData + 14));
*(readDataCh4 + I)=(*(rxData + 16)<< 16)|(*(rxData + 17)<< 8)|(rxOutputchar +
1
)*(rnunsigned p1) p1)*(rnat_r_rgp1) p1 (r_rgp1)/rgp1 (rnat_r_r_out1) //!ADC_SPI_CS = 0
int byte = 0;
int count = bytesNumber;
if (bytesNumber > ADS131A04_MAX_RX_Bytes) count = ADS131A04_MAX_RX_Bytes;
for (byte = 0;byte < count;byte++)
{
while (adctxFlag = false)
{
// tobl_transmit_0_trap_transmit_trap_b.0_transmit_trap_b.0_transmit_b./trap_transmit_trap_b.0_transmit_trap_transmit_b.0_transmit_trap./trap_transmit_transl./
//虚拟写入时钟输出数据
,同时(adcRxFlag = false)
{
//map_PCM_receivoLPM0InterruptSafe ();
// map_Interrupt_enableMaster ();
}
adcRxFlag = false;
rxData[byte]= map_spi_receiveData (eUSCI_B0_BASE);}map_enable_at_port
= void);}adcrupt_at_at_at_at_p4 (p1)
;// p2_gpio_at_en_rupt_at_at_rupt_at_at_p1 (p1);// p4 pio_en_en_at_at_rupt_at_at_e+!
if (status & GPIO_PIN0)// ADC!DRDY
{
if (MAP_GPIO_getInputPinValue (GPIO_PORT_P4、GPIO_PIN0)=0)
{
adcSampleAvailable= true;
MAP_Interruptable_disableSlepOnIsExit ();
}
}void EUSCIB0_IRQHandler
=
{ad_Interrupt_SPI = true;ap_disable_transmit = void (v_disableSPI);ap_interrupt_transmit = void (v_bspi_status_is_is_translupt_transmit);}(v_is_is_is_is_is_is_is_is_transmit
MAP_Interrupt_disableSlepOnIsrExit();
}
我该怎么做才能更快地读取数据? 它是 MSP432的限制吗?