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.

[参考译文] SK-AM64:使用扩展连接器的计时器的引脚配置

Guru**** 2455560 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1288641/sk-am64-pin-configuration-for-timers-using-expansion-connector

器件型号:SK-AM64

您好!  

我正在尝试配置 SK-AM64板上的 TIMER_IO4和 TIMER_IO5。 我已按如下方式配置计时器引脚排列。  

timer4_pins_default:timer4-pins 缺省{ //捕获脉冲输入的计时器
PINCCTRL-SINGLE、PINS =<
AM64X_IOPAD (0x0258、PIN_INPUT、4)/*(C17) MCAN1_TX.TIMER_IO4 */
>;
};
timer5_pins_default:timer5-pins 默认{//计时器用于生成脉冲输出
PINCCTRL-SINGLE、PINS =<
AM64X_IOPAD (0x025c、PIN_OUTPUT、4)/*(D17) MCAN1_RX.TIMER_IO5 */
>;
};

此处是脉冲输入代码、将计时器设置 为捕获模式

static int timer_set_capture (struct dmtimer *timer、
INT CAP_MODE、EDG_t 边沿、内部自动重新加载)
{
结构设备*dev;
内部 RC;
u32 l;

如果(不太可能(!TIMER))
返回-EINVAL;

dev =&timer->pdev->dev;
RC = pm_runtime_resume_and_get (dev);
IF (RC)
返回 RC;

L = TIMER_READ (TIMER、OMAP_TIMER_CTRL_REG);

L &=~(OMAP_TIMER_CTRL_GPOCFG | OMAP_TIMER_CTRL_CAPTMODE |
OMAP_TIMER_CTRL_TCM_HIGHTOLOW | OMAP_TIMER_CTRL_PT |
OMAP_TIMER_CTRL_TCM_LOWTOHIGH|(0x03 << 10)|
OMAP_TIMER_CTRL_AR | OMAP_TIMER_CTRL_TCM_BOTHEDGES);

/*定时器 IO 引脚用作触发输入*/
L |= OMAP_TIMER_CTRL_GPOCFG;

/*在第二次事件时捕获:捕获第二次启用的捕获
TIMER_TCAR1中的事件和 TIMER_TCAR1中的第二个启用的捕获事件
Timer_TCAR2。
*/
如果(CAP_MODE)
L |= OMAP_TIMER_CTRL_CAPTMODE;

切换(边线){
案例 NO_CAP:
L &=~(OMAP_TIMER_CTRL_TCM_HIGHTOLOW |
OMAP_TIMER_CTRL_TCM_LOWTOHIGH |
OMAP_TIMER_CTRL_TCM_BOTHEDGES);
中断;
案例上升:L |= OMAP_TIMER_CTRL_TCM_LOWTOHIGH;break;
案例下降:L |= OMAP_TIMER_CTRL_TCM_HIGHTOLOW;break;
同时运行:L |= OMAP_TIMER_CTRL_TCM_BOTHEDGES;break;
默认值:break;



IF (自动回放)
L |= OMAP_TIMER_CTRL_AR;
Timer_write (timer、OMAP_timer_CTRL_REG、l);

PM_runtime_put_sync (dev);

返回0;

以下是我的主要计时器节点、

&main_timer4{
状态="可以";
兼容="elpro、el-pulse-in1";
pintctrl-names ="默认";
pintctrl-0 =<&timer4_pins_default>;

};

&main_timer5{
状态="可以";
兼容="elpro、el-pulse-OU1";
pintctrl-names ="默认";
pintctrl-0 =<&timer5_pins_default>;


};

我可以看到 timer5发生了中断、PIN 上未显示任何内容。 当我将脉冲发生器连接到 timer4引脚时、即使没有发生中断。 看起来引脚配置不正确。  

我还需要配置什么其他东西才能使它正常工作。 两个管脚始终有效(高电平)。 如果 timer4引脚配置正确、则不应在配置为输入的分配引脚上显示置位信号。  

这是我用于配置计时器的 C 代码

/*将设置和启动定时器作为输入(捕获模式)或输出(PWM 模式)*/
静态 int setup_timer(struct dmtimer * timer, bool is_input ){

无符号长整型速率;

if (定时器){
Timer_ENABLE (计时器);
Request_IRQ (TIMER->IRQ、TIMER_IRQ_Handler、IRQF_TIMER、TIMER->NAME、NULL);

if (is_input){
Timer_SET_int_enable (timer、OMAP_timer_INT_capture);
Timer_SET_CAPTURE (定时器、1、上升、1);
}其他{
Timer_SET_int_enable (timer、OMAP_timer_INT_match);
Timer_SET_PWM (timer、0、1、OMAP_timer_trigger_overflow_and_compare、1);
Timer_SET_LOAD (定时器、0);

rate = clk_get_rate (timer->fclk);
Timer_Set_Match (定时器、1、速率*10);//(*:更多时间;/:更少时间) FIX 使其可配置

Timer_start (定时器);
返回1;
}其他
pr_err ("无法设置计时器\n");

返回0;

这里是 TIMER_SET_PWM 函数

static int timer_set_pwm (struct dmtimer *timer、int def_on、
Int 切换、int 触发器、int 自动回放)
{
结构设备*dev;
内部 RC;
u32 l;

如果(不太可能(!TIMER))
返回-EINVAL;

dev =&timer->pdev->dev;
RC = pm_runtime_resume_and_get (dev);
IF (RC)
返回 RC;

L = TIMER_READ (TIMER、OMAP_TIMER_CTRL_REG);
L &=~(OMAP_TIMER_CTRL_GPOCFG | OMAP_TIMER_CTRL_SCPWM | OMAP_TIMER_CTRL_PRE |
OMAP_TIMER_CTRL_PT |(0x03 << 10)|(0x03 << 2)| OMAP_TIMER_CTRL_AR);
如果(DEF_ON)
L |= OMAP_TIMER_CTRL_SCPWM;
if (切换)
L |= OMAP_TIMER_CTRL_PT;
L |=触发<< 10;
IF (自动回放)
L |= OMAP_TIMER_CTRL_AR;

// l |=(0x03 << 2);//预分频器
// l |= OMAP_TIMER_CTRL_PRE;
Timer_write (timer、OMAP_timer_CTRL_REG、l);

PM_runtime_put_sync (dev);

返回0;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Abdul:

    我迷路了

     

    。 为什么要使用兼容的=" elpro,el-pulse-in1";? 我在我们的文档中没有看到提到这一点。 实际上、这个线程看起来是你在这里的其他线程的延续:e2e.ti.com/.../am6442-how-to-enable-and-configure-dmtimer-in-linux 我们先讨论您的另一个主题、然后如果需要、我们可以继续在此对话。 此致、 尼克
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    elpro、el-pulse-in1是自定义驱动程序、用于使用定时器的时间几乎与 timer-ti-dm 相同、因为我无法在内核驱动程序中使用 timer-ti-dm、所以我仅将一些必需的函数复制到 el-pulse-in1驱动程序中。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我懂了。 就会得到我对上面链接的主题的下一个响应。

    此致、

    尼克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我运行正常、问题是设备树节点中出现语法错误

    pintctrl-names ="默认";
    pintctrl-0 =<&timer5_pins_default>;

    pintctrl-name 应为 pinctrl-name