我这边用的2640,挂了一个ADS1292R采集芯片,用的外部中断,4K采样率。
用的是CC2640的simpleperipheral例程开发的,在现有的基础上加了一个任务,用于采集ADS1292R数据
void ECG_createTask(void)
[
Task_Params taskParams;
// Configure the ECG task
Task_Params_init(&taskParams);
taskParams.stack = myTaskStack;
taskParams.stackSize = sizeof(myTaskStack);
taskParams.priority = 5;
Task_construct(&myTask, ECG_taskFxn, &taskParams, NULL);
// Create the semaphore used to wait for ....
Semaphore_Params semParams;
Semaphore_Params_init(&semParams);
semParams.mode = Semaphore_Mode_BINARY;
Semaphore_construct(&semECGTask, 0, &semParams);
//Create the Msg Quene
Queue_Params queueParams;
Queue_Params_init(&queueParams);
Queue_construct(&ECGMsg,&queueParams);
ECGMsgQueue = Queue_handle(&ECGMsg);
//ECGMsg
Error_Block eb;
Error_init(&eb);
msg = (MsgObj *) Memory_alloc(NULL, NUMMSGS * sizeof(MsgObj), 0, &eb);
//alloca
tion the Memory to DataRadyMsg and CloclkIntMsg;
DataRadyMsg =msg++;
CloclkIntMsg=msg;
]
还有一个外部中断的处理
///////////////////////////////////////
//ADS1292R_registerInt
//ADS1292R注册输入中断函数
//参数:硬件中断的callback函数
//返回:无
//注意:调用该函数前必须先调用PIN的初始化函数ADS129xR_Inial_GPIO
///////////////////////////////////////
void ADS1292R_registerInt(ptrFuc intFuc)
[
//Register ADS1292 ISR
PIN_registerIntCb(hADSPins, intFuc);
// Configure interrupt
PIN_setConfig(hADSPins, PIN_BM_IRQ, Board_ADS_DRDY | PIN_IRQ_NEGEDGE);
// Enable wakeup
//PIN_setConfig(hADSPins, PINCC26XX_BM_WaKEUP, Board_KEY_UP|PINCC26XX_WAKEUP_NEGEDGE);
]
现在测试只是在中断函数中翻转LED
void ECG_HwiIntFxn(PIN_Handle hPin, PIN_Id pinId)
[
//LED_toggle();
//DataRadyMsg->id=ECG_DATARDY_EVT;
//Queue_enqueue(ECGMsgQueue,(Queue_Elem*)DataRadyMsg);
//Semaphore_post(Semaphore_handle(&semECGTask));
LED_toggle();
]
问题:
会丢掉中断点,即有时候两个中断只执行的一次。而且波形宽宽窄窄很补齐。
不知道是系统的调度原因导致的,还是蓝牙的任务引起的。请大神解答。
0