主题中讨论的其他器件:CC3235SF、 ADS1298
尊敬的 simplelink 团队:
我们在 CC3235SF 中实施以下程序时遇到硬件异常问题:
该功能非常简单:MCU 从 ADS1298的8个通道读取 SPI 数据、采样率为2000个样本/秒、并通过 WiFi 连接通过 UDP 数据包发送这些数据。 该程序基于 Simplelink SDK 6.10演示中包含的示例代码"udpecho"。
我们已经更改了代码、以便在数据缓冲区已满时立即发送 UDP 数据报。我们使用了300到1400字节的缓冲区大小。
一旦程序启动且器件连接到 WiFi 网络、UDP 线程就会以信标形式等待:
(笑声)
ads_start();
while (1)
{
Semaphore_pend (semAPP、BIOS_wait_forever);
sendBuffer();
}
sendBuffer 例程编码如下:
void sendBuffer()
{
字节 Sent=sendto (server、buffer_ads、udp_packet_size、0、(struct sockaddr *)&clientAddr、addrlen);
ads_enableInt();
}
ADS 配置为触发 DRDY 线路、GPIO 中断通过 SPI 将数据读取到缓冲区中、一旦缓冲区达到 UDP 有效载荷数据包的大小、硬件中断例程就布置信标、以允许任务发送数据。 当任务发送数据时、GPIO 中断被禁用。 该函数编码如下:
void ADS1x9X_ReadData()
{
GPIO_WRITE (ADS_CS、ADS_CS_ON);
ads_spiTransaction.count = 3+24;
ADS_transmitBuffer[0]= 0;
ads_spiTransaction.txBuf =空;
ads_spiTransaction.rxBuf =(void *) ads_receiveBuffer;
ads_transferOK = spi_transfer (ads_SPI、&ads_spiTransaction);
GPIO_WRITE (ADS_CS、ADS_CS_OFF);
if (ads_transferOK)
{
uint8 idx=0;
if (cnt_Bytes+BYTESxSAMPLES>udp_packet_size)
{
CNT_Bytes=0;
Semaphore_post (semAPP);
}否则
{
for (idx=0;idx <BYTESxSAMPLE;idx++) buffer_ads[cnt_bytes++]=ads_receiveBuffer[idx];
}
}
}
但是、几秒钟后、程序会在 Hwi 异常处理程序例程:rm_m3_Hwi_exhandlerAsm__I 内的循环中挂起
如果没有调用 Sendto 函数(sendBuffer 已注释掉)、则程序始终可以读取 ADS 数据而不停止。
如果我们将采样率降低到1000个样本/秒、则始终工作正常。SPI 的工作速率为18Mbps。
我的问题是:
有没有关于这个问题的建议,以及如何解决这个问题?
我们如何调试此异常的原因? Sendto 函数是否可以生成硬件异常? MCU 是否无法执行这一要求苛刻的任务?
谢谢