微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > cc3200 定时器捕获 进中断

cc3200 定时器捕获 进中断

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

你好!我在Timer_cc中基础上改变的例子:这里我用Timer3_A 作为红外捕获,Timer3_B 作为溢出。在捕获中断里面打开溢出中断,可是如果我不用Reprot语句输出一些东西的话,就无法进入Timer_B的溢出中断,Report语句执行的不够多的话,可以进入Timer_B的溢出中断函数,可是捕获到的数据就是错误的,我尝试这更改  MAP_TimerLoadSet(TIMERA3_BASE, TIMER_B, 60000); 的值,也没有得到什么结果,如果有什么解决方法,请指点一下,谢谢。

static unsigned long g_ulSamples[90];
static unsigned long g_ulFreq = 0 ;

static int i, j, timeStatus = 1;//i->enter cap times  j-> test timeout timestart->time_b start
static void TimerIntHandler()
{
    MAP_TimerIntClear(TIMERA3_BASE,TIMER_CAPA_EVENT);
    g_ulSamples[g_ulFreq++] = MAP_TimerValueGet(TIMERA3_BASE,TIMER_A);
//    Report("cap==en g_ulFreq: %d \r\n\n",g_ulFreq);
//    Report("Samples[%03d] = %04ld i: %d\r\n",g_ulFreq,MAP_TimerValueGet(TIMERA3_BASE,TIMER_A),i++);
//    if(g_ulFreq >= 40){
//    	MAP_TimerDisable(TIMERA3_BASE, TIMER_A);
//		for(; j<g_ulFreq ;j++){
//		Report("i:%4d   %03ld   %03ld  ",i++ ,g_ulSamples[j] , g_ulSamples[j+1]);
//		Report("Width: %03dms \r\n ",(g_ulSamples[j] - g_ulSamples[j+1])/800);
//		}
////		g_ulFreq = 0;
//    }

//    Report("timeStatus: %d  i: %d \r\n\n",timeStatus,i++);
//    if(timeStatus == 1){
//    	MAP_TimerLoadSet(TIMERA3_BASE, TIMER_B, 60000);
//    	MAP_TimerEnable(TIMERA3_BASE,TIMER_B);
//    	timeStatus = 0;
//    }
    MAP_TimerEnable(TIMERA3_BASE,TIMER_B);

//这里我想要给TIMER_B 重新赋值,保证最后接收完毕后能够退出接收 
//如果上面的循环输出注释掉,下面的语句不注释掉,可以进入溢出中断,但接收到的红外波长就不正确
//如果将Report语句全部注释掉就不会进入TIMER_B的溢出中断

//    TimerValueSet(TIMERA3_BASE, TIMER_B,0);  
//    Report("time_B SET:%ld\r\n\n",MAP_TimerValueGet(TIMERA3_BASE,TIMER_B));
}


static void TimerIntHandler_TIME_OUT(){
	MAP_TimerIntClear(TIMERA3_BASE,TIMER_TIMB_TIMEOUT);
	TimerDisable(TIMERA3_BASE, TIMER_A);

	Report("enter timeout \r\n\n");
	Report("g_ulFreq = %ld \r\n\n",g_ulFreq);

	i = 0;
	if(g_ulFreq >= 10){
		for(j = 0; j < g_ulFreq ;j++){
		Report("timeout iii: %4d  %03ld  %03ld   ",i++ ,g_ulSamples[j] , g_ulSamples[j+1]);
		Report("Width: %03dms \r\n ",(g_ulSamples[j] - g_ulSamples[j+1])/800);
		}
		g_ulFreq = 0;
		Report("\r\n\n\n\n ");
	}
	 timeStatus = 1;
	 MAP_TimerEnable(TIMERA3_BASE, TIMER_A);
	 MAP_TimerDisable(TIMERA3_BASE, TIMER_B);
}


int main()
{

    BoardInit();
    PinMuxConfig();
    InitTerm();
    DisplayBanner(APP_NAME);

    MAP_TimerIntRegister(TIMERA3_BASE,TIMER_A,TimerIntHandler);//REG CAP
    MAP_TimerIntRegister(TIMERA3_BASE,TIMER_B,TimerIntHandler_TIME_OUT);//REG TIME_OUT

    MAP_TimerIntEnable(TIMERA3_BASE,TIMER_CAPA_EVENT);//ALLOW  CAP
    MAP_TimerIntEnable(TIMERA3_BASE,TIMER_TIMB_TIMEOUT);//ALLOW TIME_OUT

    MAP_TimerConfigure(TIMERA3_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME_UP  | TIMER_CFG_B_PERIODIC); // CONGIG A CAP | B PERIODIC

    MAP_TimerPrescaleSet(TIMERA3_BASE, TIMER_BOTH, 199);//80000000 / 200 = 40 0000 hz = 400khz //PRESCALE 200

    MAP_TimerControlEvent(TIMERA3_BASE, TIMER_A, TIMER_EVENT_BOTH_EDGES);

    MAP_TimerLoadSet(TIMERA3_BASE, TIMER_BOTH, 60000);//150ms
    MAP_TimerEnable(TIMERA3_BASE,TIMER_A);

    while(1)
    {
    }
}

请参考http://www.deyisupport.com/question_answer/wireless_connectivity/wifi/f/105/p/108965/297660.aspx#297660

PIN_50也是普通的IO,和PIN_06没差别,你如果用TIMERA3配上PIN_50可以用吗?

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

网站地图

Top