Hi, Ti的技术支持:
AM335x处理器,有专用的定时器输出管脚,分别Timer4~Timer7,总共只有4个,请问这些管脚是不是只有在PWM工作模式下,可以直接输出,
如果我工作于其它模式,比如one-shot模式,是否可以从相应的管脚输出单脉冲?
谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi, Ti的技术支持:
AM335x处理器,有专用的定时器输出管脚,分别Timer4~Timer7,总共只有4个,请问这些管脚是不是只有在PWM工作模式下,可以直接输出,
如果我工作于其它模式,比如one-shot模式,是否可以从相应的管脚输出单脉冲?
谢谢!
TRM上写,timer可以工作在三种模式:
• Timer mode
• Capture mode
• Compare mode
这三种模式的timer mode和compare mode是可以通过寄存器配置输出各种波形的:
A dedicated output pin (PORTIMERPWM) is
programmed through TCLR (TRG and PT bits) to generate one positive pulse (prescaler duration) or to
invert the current value (toggle mode) when an overflow occurs
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;
}
按照你的意思,我又重新做了各种测试,发现还是不能达到我的要求。
在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;
}