5483|0

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于omap-l138的定时器的问题 [复制链接]

最近入手OMAP-138,我想用DSP核实现一个定时中断功能。参考SEED提供的开发包,写了一个测试代码。发现,将TIMER0配置成32位,非关联模式后,TIMER3:4运行正常,但是TIMER1:2不运行。
我的代码设置代码如下:
uint32_t USTIMER0_init(void)
{
    // configure timer 0 for free run.
    // 32-bit unchained mode, timer3:4 /12 prescaler.

    // enable muxed pins as gpio outputs and disable all related interrupts.
    // would need to also setup the pinmux register to select the gpio
    // function of these pins in order to use as gpio.
//   TMR0->GPINT_GPEN = GPENO12 | GPENI12;
 //  TMR0->GPDATA_GPDIR = GPDIRO12 | GPDIRI12;

   // stop and reset timer.
   TMR0->TGCR = 0x00000000;
   TMR0->TCR = 0x00000000;

   // disable interrupts and set emulation to free run.
   TMR0->INTCTLSTAT = 0;
   SETBIT(TMR0->EMUMGT, SOFT | FREE);

   // config timer0 in 32-bit unchained mode.
   // remove timer0 - 3:4 from reset.
   SETBIT(TMR0->TGCR, PRESCALER(TIMER_DIV - 1) | TIMMODE_32BIT_UNCHAINED /*| TIM34RS*/ );

   // init timer0 - 1:2 period....use full range of counter.
   TMR0->TIM34 = 0x00000000;
   TMR0->PRD34 = 0x00000000;
// TMR0->PRD34 = 0xFFFFFFFF;

   TMR0->TIM12 = 0x00000000;
   TMR0->PRD12 = 0x00000000;
   // start timer0 - 3:4.
// SETBIT(TMR0->TCR, ENAMODE34_CONT);

   return (ERR_NO_ERROR);
}


void USTIMER0_delay(uint32_t in_delay)
{
    uint32_t regData;
#if 0

    // stop the timer, clear int stat, and clear timer value.
    CLRBIT(TMR0->TGCR, TIM34RS);
    TMR0->TCR = 0x00000000;
    SETBIT(TMR0->INTCTLSTAT, PRDINTSTAT34);
    TMR0->TIM34 = 0x00000000;

    // setup compare time.
 
    TMR0->PRD34 = TICKS_PER_US * in_delay;

    // start timer1 - 3:4 to run once up to the period.
    SETBIT(TMR0->TCR, ENAMODE34_ONETIME);
    SETBIT(TMR0->TGCR, TIM34RS);

    // wait for the signal that we have hit our period.
    while (!CHKBIT(TMR0->INTCTLSTAT, PRDINTSTAT34));
#else
    // stop the timer, clear int stat, and clear timer value.
    CLRBIT(TMR0->TGCR, TIM12RS);
    TMR0->TCR = 0x00000000;
    SETBIT(TMR0->INTCTLSTAT, PRDINTSTAT12);
    TMR0->TIM12 = 0x00000000;

    // setup compare time.
    TMR0->PRD12 = TICKS_PER_US * in_delay;

    CLRBIT(TMR0->TCR,CLKSRC12);
    CLRBIT(TMR0->TCR,TIEN12);

    // start timer1 - 3:4 to run once up to the period.
    SETBIT(TMR0->TCR, ENAMODE12_ONETIME);
    SETBIT(TMR0->TGCR, TIM12RS);

    // wait for the signal that we have hit our period.
    while (!CHKBIT(TMR0->INTCTLSTAT, PRDINTSTAT12));
#endif
}

主函数

main()
{
    USTIMER0_init();
    printf("the timer0 test start\n" );
    USTIMER0_delay(100);
    printf("the timer0 test end\n");
 }

如果使用timer3:4来实现,这个测试函数就可以走完,如果用timer1:2来做的话,函数就始终画红语句处。
我也根据TI,定时器的 资料上配置了内部时钟源,禁止了内部时钟源开关,(画蓝处)但就是始终停在那里,不往下运行!
请教一下,这是什么问题啊!!,还需要配置什么位置吗?
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表