初级会员
- 积分
- 114
- 金钱
- 114
- 注册时间
- 2021-8-16
- 在线时间
- 64 小时
|
楼主 |
发表于 2023-7-27 11:20:44
|
显示全部楼层
不好意思。有点着急了。
1、示波器我之前看了时序是对的,但是没有截图下来
2、电路的话,我是按照数据手册画的,用的是差分,单通道
3、为了找出问题,我调试了好久的程序,也查过了时序还有读写寄存器
我开始用的方法是,每采集一个数据就用f_write写进SD卡,上位机处理数据后发现丢失了很多数据,然后加大缓存数组,采集好了一次性写进去,但是还是有问题。
我开了SDIO的DMA,还是没解决。
我现在的打算是,用DRDY去触发外部中断,然后在中断里处理数据,不知道这样的话,采样率能不能保证至少7.5K呢
//这是中断服务函数
void EXTI15_10_IRQHandler(void)
{
int ulResult;
volatile u16 bufferIndex;
if(EXTI_GetITStatus(EXTI_Line10)!=RESET)
{
if(bufferIndex<BUFFER_SIZE)
{
ulResult |= (SPI2_ReadWriteByte(0xff) << 16);
ulResult |= (SPI2_ReadWriteByte(0xff) << 8);
ulResult |= SPI2_ReadWriteByte(0xff);
// state = 1;
// LED1=!LED1;
// if( ulResult & 0x800000 )
// {
// ulResult = ~ulResult;
// ulResult &= 0x7fffff;
// ulResult += 1;
// ulResult = -ulResult;
// }
// currentBuffer[bufferIndex++] = ulResult*5/8388607;
/* ¸ºÊý½øÐÐÀ©Õ¹¡£24λÓзûºÅÊýÀ©Õ¹Îª32λÓзûºÅÊý */
if (ulResult & 0x800000)
{
ulResult += 0xFF000000;
}
currentBuffer[bufferIndex++] = ulResult;
}
else
{
// LED1=!LED1;
f_lseek(file,f_size(file)); //½«Ö¸ÕëÖ¸ÏòÎļþĩβ
f_write(file,(const void*)currentBuffer,BUFFER_SIZE * sizeof(int32_t),&bw); //дÊý¾Ý
bufferIndex=0;
//Çл»µ½ÁíÒ»¸ö»º³åÇø
currentBuffer = (currentBuffer == buffer1) ? buffer2 : buffer1;
// f_close(file);
// ???????
// myfree(0,buffer1);//ÊÍ·ÅÄÚ´æ
// myfree(0,buffer2);//ÊÍ·ÅÄÚ´æ
}
EXTI_ClearITPendingBit(EXTI_Line10); //Çå³ýLINE0ÉϵÄÖжϱê־λ
state = 1;
}
}
主函数里这样的
while(1)
{
LED0=!LED0;
if (state)
{
// LED1=!LED1;
CS_0();
while(ADS1256_DRDY);//µ±ADS1256_DRDYΪµÍʱ²ÅÄÜд¼Ä´æÆ÷
SPI2_ReadWriteByte(ADS1256_CMD_SYNC);//ͬ²½ºó£¬DRDYÒý½Å½«±£³Ö¸ßλ
SPI2_ReadWriteByte(ADS1256_CMD_WAKEUP);
while(ADS1256_DRDY);//µ±ADS1256_DRDY Ϊ¸ßʱ»½ÐÑ¡¢¶ÁÈ¡Êý¾Ý
SPI2_ReadWriteByte(ADS1256_CMD_RDATAC);//·¢Ë͵¥´Î¶ÁÃüÁî
while(ADS1256_DRDY);//µ±ADS1256_DRDY Ϊ¸ßʱ»½ÐÑ¡¢¶ÁÈ¡Êý¾Ý
delay_us(8);
state = 0;
// LED1=!LED1;
} |
|