微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2640 丢失外部脉冲中断点

CC2640 丢失外部脉冲中断点

时间:10-02 整理:3721RD 点击:

我这边用的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);
//allocation 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();
}

问题:

会丢掉中断点,即有时候两个中断只执行的一次。而且波形宽宽窄窄很补齐。

不知道是系统的调度原因导致的,还是蓝牙的任务引起的。请大神解答。

注意ADS1292R的采集时间,我觉得是他引起的。外部中断是由什么触发的呢?

我这个示波器图中根本没有读取ADS1292的数据,只是接收到中断后翻转LED。外部中断是由ADS1292R的DRDY引脚的下降沿触发

奇怪,确实是没有触发中断。其他都能触发,看着信号都是一样的。只能解释为你触发的时间不够引起的了。放大这个触发信号看看

关闭蓝牙低功耗模式,降低触发时钟频率。

或者设定中断优先级!

大神,谢谢提醒,确实是由于低功耗模式影响了这个。

Qian Xue1

你好, 我有几个类似平台的问题, 能否和你私下交流一下。
我的QQ号, 1992411019
邮箱, you_sun@yahoo.com


真诚希望得到你的回复。



David Sun

你好,我在做一个类似的设计,能参考一下你的代码吗

这个恐怕现在不太方便了。有什么问题可以拿出来讨论!

 加你QQ了!

加我QQ,讨论一下, 275503841。

xiao li7, 我试着加你qq, 加不了


我试图用CC2640 SPI读写ADS1292寄存器,总是读不对。是用TIRTOS 的SPI driver,默认是用DMA。能否分享一下你的SPIdriver用法?

谢谢!


当把SPI时钟降低到100K,能正确读写ADS1292寄存器,但在中断服务程序中读ADC,不管用100K还是500KSPI时钟都不对。这是中断服务程序调用的SPI读数据程序

bool ADS1292_spi_read(uint8_t *buf, uint8_t len)
{
    uint8_t wbuf[9];
    SPI_Transaction masterTransaction;
    wbuf[0] = ADS1292_RDATA;
    wbuf[1] = 0;
    wbuf[2] = 0;

    masterTransaction.count = len;
    masterTransaction.txBuf = wbuf;
    masterTransaction.arg = NULL;
    masterTransaction.rxBuf = buf;

    return SPI_transfer(spiHandle, &masterTransaction) ? 1 : 0;
}

SPI一般都没啥问题,ads1292要能正确读者,初始化很关键,看看参考手册的初始化过程。

谢谢你的回答,请问你是在中断服务程序里void ECG_HwiIntFxn(PIN_Handle hPin, PIN_Id pinId)读ADS1292,还是到semECGTask里去读?

最好去task里处理



多谢了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top