TI中文支持网
TI专业的中文技术问题搜集分享网站

关于AM335x处理器的Timer4~Timer7的专用管脚输出问题?

Hi, Ti的技术支持:

AM335x处理器,有专用的定时器输出管脚,分别Timer4~Timer7,总共只有4个,请问这些管脚是不是只有在PWM工作模式下,可以直接输出,

如果我工作于其它模式,比如one-shot模式,是否可以从相应的管脚输出单脉冲?

谢谢!

Jian Zhou:

可以配置成GPIO模式啊,有什么特殊要求么?

shixm.zh:

回复 Jian Zhou:

要求是自动从相应管脚上输出,而不是通过软件去干预,意思就是定时器产生的波形要自动从相应的管脚上输出,如果配置成GPIO模式,是不会输出相应的波形信号的。

目前我只有配置成PWM模式时才自动输出,其它模式输出不了,不知道是不是还有哪里设置不对,还是本来就是这样子的?

Jian Zhou:

回复 shixm.zh:

从datasheet上来看,timer4-time7是有对应管脚可以配置的,应该是可以有定时器PWM输出的,你可以看下TRM20.1这部分怎么配置

shixm.zh:

回复 Jian Zhou:

Jian Zhou,你好

你可能还没有理解我的意思。

Timer有多种工作模式,其中目前我已经证实的是只有在PWM模式下,才能从相应的管脚输出波形,如果设置成其它工作模式却无法输出波形。

我想知道的是:这是芯片本设计就是这样子的,还是我的使用有问题,以住在用单片机时不存在这种问题。

Jian Zhou:

回复 shixm.zh:

TRM上写,timer可以工作在三种模式:

• Timer mode• Capture mode• Compare mode

这三种模式的timer mode和compare mode是可以通过寄存器配置输出各种波形的:

A dedicated output pin (PORTIMERPWM) isprogrammed through TCLR (TRG and PT bits) to generate one positive pulse (prescaler duration) or toinvert the current value (toggle mode) when an overflow occurs

shixm.zh:

回复 Jian Zhou:

Jian Zhou,你好

按照你的意思,我又重新做了各种测试,发现,还是不能到到我的要求。

在timer模式下,我无法实现波形输出,在compare模式下,可以有波形输出。

下面这段程序初始化后可以产生单次定时器中断,只要不断的使能定时器,就可以连续产生,我在中断程序中有监控,功能是正常的,就是相对应的定时器Timer7管脚上没有波形输入,如果改成比较模式就是可以的,很奇怪。

static int heat_timer_init(void){      int ret = 0;

      prn->heat_timer_ptr = omap_dm_timer_request_specific(7);      if(prn->heat_timer_ptr == NULL){            printk("heat_timer_init: No more gp timers available\n");            return -1;      }      omap_dm_timer_set_prescaler(prn->heat_timer_ptr, 0);      omap_dm_timer_set_pwm(prn->heat_timer_ptr, 0, 1, 2);

      prn->heat_timer_irq = omap_dm_timer_get_irq(prn->heat_timer_ptr);      ret = request_irq(prn->heat_timer_irq, heat_irq_handler, IRQF_DISABLED | IRQF_TIMER , "heat_timer_init", heat_irq_handler);      if(ret){            printk("heat_timer_init: request_irq failed (on irq %d)\n", prn->heat_timer_irq);            return ret;     }     omap_dm_timer_set_load(prn->heat_timer_ptr, 0, 0xFFFFFFFF – heat_time_tbl[prn->heat_index] + 1);     omap_dm_timer_write_counter(prn->heat_timer_ptr, 0xFFFFFFFF – heat_time_tbl[prn->heat_index] + 1);      omap_dm_timer_set_int_enable(prn->heat_timer_ptr, OMAP_TIMER_INT_OVERFLOW);     // start the timer!     omap_dm_timer_start(prn->heat_timer_ptr);     // stop the timer!     omap_dm_timer_stop(prn->heat_timer_ptr);     return 0;}

shixm.zh:

回复 Jian Zhou:

按照你的意思,我又重新做了各种测试,发现还是不能达到我的要求。在timer模式下,我无法实现波形输出,在compare模式下,可以有波形输出。下面这段程序初始化后可以产生单次定时器中断,只要不断的使能定时器,就可以连续产生,我在中断程序中有监控,功能是正常的,就是相对应的定时器Timer7管脚上没有波形输出,如果改成比较模式就是可以的,很奇怪。

static int heat_timer_init(void){int ret = 0;

prn->heat_timer_ptr = omap_dm_timer_request_specific(7);if(prn->heat_timer_ptr == NULL){ printk("heat_timer_init: No more gp timers available\n"); return -1;}omap_dm_timer_set_prescaler(prn->heat_timer_ptr, 0);omap_dm_timer_set_pwm(prn->heat_timer_ptr, 0, 1, 2);

prn->heat_timer_irq = omap_dm_timer_get_irq(prn->heat_timer_ptr);ret = request_irq(prn->heat_timer_irq, heat_irq_handler, IRQF_DISABLED | IRQF_TIMER , "heat_timer_init", heat_irq_handler);if(ret){ printk("heat_timer_init: request_irq failed (on irq %d)\n", prn->heat_timer_irq); return ret;}omap_dm_timer_set_load(prn->heat_timer_ptr, 0, 0xFFFFFFFF – heat_time_tbl[prn->heat_index] + 1);omap_dm_timer_write_counter(prn->heat_timer_ptr, 0xFFFFFFFF – heat_time_tbl[prn->heat_index] + 1);

omap_dm_timer_set_int_enable(prn->heat_timer_ptr, OMAP_TIMER_INT_OVERFLOW);// start the timer!omap_dm_timer_start(prn->heat_timer_ptr);// stop the timer!omap_dm_timer_stop(prn->heat_timer_ptr);return 0;}

shixm.zh:

回复 shixm.zh:

最后我确认是Timer7有问题,无论它是什么模式,都不会有输出,但定时器是可以工作的,这是为什么?

联想到网驱动中,将定时器改成Timer7也是不能用的,这是不是说明这个Timer7内部是有bug的,我用的处理器是AM3352。

Jian Zhou:

回复 shixm.zh:

没有看到芯片的errata有关于这部分问题的描述。你确定timer7的管脚的pinmux的设置是对的么?

shixm.zh:

回复 Jian Zhou:

mux肯定是对的,我用同样的方法,去配置其它timer没有问题,而且将timer7配置成普通的gpio模式,工作也没有问题,所以问题就是怪在这个地方。

赞(0)
未经允许不得转载:TI中文支持网 » 关于AM335x处理器的Timer4~Timer7的专用管脚输出问题?
分享到: 更多 (0)