//DRDY中斷初始化 EXTI_ClearITPendingBit(EXTI_Line8);//清除中斷標誌 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource8);//選擇管腳 EXTI_InitStructure.EXTI_Line=EXTI_Line8; //選擇中斷線路 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //設置爲中斷請求,非事件請求 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發 EXTI_InitStructure.EXTI_LineCmd = ENABLE; //外部中斷使能 EXTI_Init(&EXTI_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //選擇中斷通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //搶佔優先級 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子優先級 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道 NVIC_Init(&NVIC_InitStructure);
void ADS1292_PowerOnInit(void) { // ADS_CLKSEL=1;//啓用內部時鐘 // ADS_START=0; //停止數據輸出 // ADS_RESET=0; //復位 // delay_ms(1000); // ADS_RESET=1;//芯片上電,可以使用 // delay_ms(100); //等待穩定 ADS1292_Send_CMD(SDATAC);//發送停止連續讀取數據命令 delay_ms(100); ADS1292_Send_CMD(RESET);//復位 delay_s(1); ADS1292_Send_CMD(SDATAC);//發送停止連續讀取數據命令 delay_ms(100); //ADS1292_Send_CMD(STANDBY);//進入待機模式 }
B 初始化完成之後,就可以進行數據讀取和解析了。這部分的數據如下所示:
while(Set_ADS1292_Collect(0))//0 正常採集 //1 1mV1Hz內部側試信號 //2 內部短接噪聲測試 { // printf("ADS1292寄存器設置失敗\r\n");//串口打印調試使用 delay_s(1); DS3 =!DS3;//PC13端口接LED,用於指示ADS1292 初始化狀態 }
C 該adc有三種數據採集模式,具體如下所示,三種模式,對應的不同調試信息。
//配置ads1292採集方式 u8 Set_ADS1292_Collect(u8 mode) { u8 res; delay_ms(10); switch(mode)//設置採集方式 { case 0: res =ADS1292_Single_Read(); break; case 1: res =ADS1292_Single_Test(); break; case 2: res =ADS1292_Noise_Test(); break; } if(res)return 1; //寄存器設置失敗 ADS1292_Send_CMD(RDATAC); //啓動連續模式 delay_ms(10); ADS1292_Send_CMD(START); //發送開始數據轉換(等效於拉高START引腳) delay_ms(10); return 0; }
//使能FIR帶通濾波 ecg_fir_res = ecg_fir_tilter(ecg_avr); //FIR帶通濾波 ecg_avr_long=filter1(ecg_fir_res); //濾除50Hz,1秒滑窗內的平均值,作爲去直流的基線 ecg_fir_res = ecg_fir_res - ecg_avr_long; //去直流