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.

AM335X linux使用DMtimer制作定时器驱动,中断频率无法改变

您好:

在AM335X的linux3.2内核中 使用dmtimer 写一个定时器驱动,无论如何更改

    omap_dm_timer_set_load(timer, 0, 0xFFFFFFFF-500);
    omap_dm_timer_write_counter(timer, 0xFFFFFFFF-500); 这2个函数中的设定值 范围从(0xFFFFFFFF-500)到(0xFFFFFFFF - 0x0000FFFF)输出的GPIO都会看到一个390kHz的波形。

如果设定为(0XFFFFFFFFT-0xFFFF0000)则在示波器下无法看到波形

问题1:

如何修改CPU配置寄存器能够使得定时器正常工作?

问题2

通过omap_dm_timer_get_fclk()和clk_get_rate 能够得到rate为24000000,获取到的rate是否为系统时钟频率?

非常感谢~~

设定代码在驱动的init函数总,代码如下

timer = omap_dm_timer_request_specific(7);    //得到定时器7

    irq =  omap_dm_timer_get_irq(timer);        //得到中断号
    ret = request_irq(irq,mytimer_interrupt, IRQF_DISABLED | IRQF_TIMER , "heat_timer_init",NULL);//注册中断
    omap_dm_timer_set_load(timer, 0, 0xFFFFFFFF-500);
    omap_dm_timer_write_counter(timer, 0xFFFFFFFF-500);

    /* Enable overflow interrupt */
    omap_dm_timer_set_int_enable(timer, OMAP_TIMER_INT_OVERFLOW);
    /*
     * Set counter value to overflow counter after
     * one tick and start timer.
     */
    //omap_dm_timer_set_load_start(timer, 0, load);
    // start the timer!
    omap_dm_timer_start(timer);
    // stop the timer!
    //omap_dm_timer_stop(timer);

  • 您好:

    在AM335X的linux3.2内核中 使用dmtimer 写一个定时器驱动,无论如何更改

        omap_dm_timer_set_load(timer, 0, 0xFFFFFFFF-500);
        omap_dm_timer_write_counter(timer, 0xFFFFFFFF-500); 这2个函数中的设定值 范围从(0xFFFFFFFF-500)到(0xFFFFFFFF - 0x0000FFFF)输出的GPIO都会看到一个390kHz的波形。

    如果设定为(0XFFFFFFFFT-0xFFFF0000)则在示波器下无法看到波形

    问题1:

    如何修改CPU配置寄存器能够使得定时器正常工作?

    问题2

    通过omap_dm_timer_get_fclk()和clk_get_rate 能够得到rate为24000000,获取到的rate是否为系统时钟频率?

    非常感谢~~

    设定代码在驱动的init函数总,代码如下

    timer = omap_dm_timer_request_specific(7);    //得到定时器7

        irq =  omap_dm_timer_get_irq(timer);        //得到中断号
        ret = request_irq(irq,mytimer_interrupt, IRQF_DISABLED | IRQF_TIMER , "heat_timer_init",NULL);//注册中断
        omap_dm_timer_set_load(timer, 0, 0xFFFFFFFF-500);
        omap_dm_timer_write_counter(timer, 0xFFFFFFFF-500);

        /* Enable overflow interrupt */
        omap_dm_timer_set_int_enable(timer, OMAP_TIMER_INT_OVERFLOW);
        /*
         * Set counter value to overflow counter after
         * one tick and start timer.
         */
        //omap_dm_timer_set_load_start(timer, 0, load);
        // start the timer!
        omap_dm_timer_start(timer);
        // stop the timer!
        //omap_dm_timer_stop(timer);

  • 建议把TIMER的寄存器DUMP下来分析一下

x 出现错误。请重试或与管理员联系。