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.

[参考译文] Linux/PROCESSOR-SDK-AM335X:使用具有 IRQ 的 DMTIMER 每100ms 切换一次 GPIO

Guru**** 2538950 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/795194/linux-processor-sdk-am335x-use-dmtimer-with-irq-to-toggle-gpio-every-100ms

器件型号:PROCESSOR-SDK-AM335X

工具/软件:Linux

平台- AM335x 入门套件

Target -使用一个具有 IRQ 的精确定时器来每100ms 切换一次 GPIO。(IRQ 的延迟不应超过一个周期。)

参考- DMTIMER: e2e.ti.com/.../415079

--------------------------

您好!

问题是、我无法使用来请求计时器指针

1. omap_dm_timer_request_specific (7)->请我使用 omap_dm_timer_request_by_cap/node、我认为这是因为我使用的是 DTS (?)

注释。 我正在使用默认的 AM335x-evmsk.dts + am33xx.dtsi

2.omap_dm_timer_request_by _cap ()->获取空指针

我想请求一个特定的计时器、并将其配置为每100ms 中断一次。

我完全不熟悉 TI 平台、请指导我实现目标。

谢谢!

将我的工作发布在下面。

静态 irqreturn_t timer_IRQ_handler (int IRQ、void * dev_id)

INT STATUS = 0;

/*读取当前状态*/
STATUS = OMA_dm_timer_read_status (pTimer);

/*清除计时器中断*/
如果(status =OMAP-TIMER_INT_MATCH)

omap_dm_timer_write_status (pTimer、omap_timer_int_match);

/*表示中断已处理*/
返回 IRQ_Handled;

静态 int dmtimer_init (void)

内部转台= 1;
struct clk *pTimerClk;

/*需要请求计时器7 */
pTimer = OMAP-dm_timer_request_specific (7);
if (pTimer=NULL){
/*没有可用的计时器*/
printk (Kern_info "DM 计时器7不可用!!!\n"\};
返回-1;

/*将时钟源设置为系统时钟*/
RET = OMAP_dm_timer_set_source (pTimer、OMAP_timer_SRC_SYS_CLK);

/*确定计时器触发的 IRQ */
timerIrq = OMA_dm_timer_get_IRQ (pTimer);

/*设置 IRQ 处理程序*/
RET = REQUEST_IRQ (timerIrq、timer_IRQ_handler、IRQF_timer、"ext_WDT"、NULL);

/*设置计时器以在匹配事件上触发 IRQ */
omap_dm_timer_set_int_enable (pTimer、omap_timer_int_match);

/*获取以 Hz 为单位的时钟速率*/
pTimerClk = OMAP-dm_timer_get_fclk (pTimer);
timerRate = clk_get_rate (pTimerClk);

/*启用计时器*/
/*需要在我们可以写入计数器之前完成*/
omap_dm_timer_enable (pTimer);

/*设置初始计数*/
/*根据第20.1.3.5节的脉宽调制,当发生比较情况时,使用溢出或匹配来切换*/
/*因此,我们将几乎立即触发溢出事件,以确保快速生成切换*/
omap_dm_timer_write_counter (pTimer、(0xFFFFFFFF - 5));

/*设置加载寄存器*/
/*设置为自动载入,以便在溢出时将计数器设置回0 */
omap_dm_timer_set_load (pTimer、1、0);

/*将比较寄存器设置为100ms 秒*/
/*这将确保溢出事件发生后100ms 的信号切换*/
omap_dm_timer_set_match (pTimer、1、timerRate/10);

/*启动计时器*/
RET = OMAP-dm_timer_start (pTimer);
printk (Kern_info "定时器启动寄存器%d\n"、ret);

/*
*非0返回意味着对 init_modules 的调用失败;无法加载模块
*
返回0;

arch_initcall (dmtimer_init)

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

    您需要使用 omap_dm_timer_request_By_node (),请参考以下 TI 驱动程序:

    linux-kernel/drivers/net/sethernet/ti/cots.c
    Linux 内核/驱动程序/PWM/PWM-OMAP-dmtimer.c
    linux-kernel/drivers/remoteproc/OMA_remoteproc.c

    另请参阅以下 e2e 线程:

    e2e.ti.com/.../629859
    e2e.ti.com/.../1487385
    e2e.ti.com/.../2243873

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

    您好!

    感谢你的建议。

    我按照 https://e2e.ti.com/support/processors/f/791/p/415079/1487385#1487385中的示例修改我的代码
    使用 OMAP-dm_timer_request_by_node ()、我认为这是 Linux-4.14.79/drivers/clocksource/timer-ti-dm.c 中的内容 -->#include

    但是、它仍然返回 NULL。
    可以获取 pTimerDtsNode、但未能进入"无可用 DM 计时器!!"。

    在跟踪代码之后、我发现了这一点
    list_for_each_entry (t、&OMAP-timer_list、node){...} 不循环任何成员。 (我在内部添加了 pr_warn(),但不打印任何内容。)
    这是否意味着 OMAP-TIMER_LIST 未初始化? (或者没有商品?)

    顺便说一下、我不打算使用 PWM 输出、只想调用另一个函数来设置/复位 GPIO。
    这是否意味着我不需要配置 PWM、例如调用 OMAP-dm_timer_set_pwm()?

    下面是我的修订版代码。 但我认为目前问题的根本原因可能在其他地方。

    EXT_WDT{
    compatible ="cust_ext_WDT";
    status ="确定";
    DMtimer =<&timer7>;
    }; 
    static int initExtWdt (struct platform_device *pdev)
    {
    内部转台= 1;
    struct clk *pTimerClk;
    struct device_node *pTimerDtsNode =空;
    
    /*尝试根据设备节点请求计时器*/
    pTimerDtsNode = of _parse_phandle (pdev->dev.for_node、"DMtimer"、0);
    if (NULL =pTimerDtsNode){
    printk (kern_info "of _parse_phandle() failed!!\n");
    返回-1;
    }
    否则、如果(NULL =(pTimer = OMAP-dm_timer_request_by_node (pTimerDtsNode))){
    /*没有可用的计时器*/
    printk (Kern_info "没有可用的 DM 计时器!!!\n");
    返回-1;
    }
    
    /*将时钟源设置为系统时钟*/
    RET = OMAP_dm_timer_set_source (pTimer、OMAP_timer_SRC_SYS_CLK);
    
    /*确定计时器触发的 IRQ */
    timerIrq = OMA_dm_timer_get_IRQ (pTimer);
    
    /*设置 IRQ 处理程序*/
    RET = REQUEST_IRQ (timerIrq、timerIrqHandler、IRQF_TIMER、"ext_WDT"、NULL);
    
    /*设置计时器以在匹配事件上触发 IRQ */
    omap_dm_timer_set_int_enable (pTimer、omap_timer_int_match);
    
    /*获取以 Hz 为单位的时钟速率*/
    pTimerClk = OMAP-dm_timer_get_fclk (pTimer);
    timerRate = clk_get_rate (pTimerClk);
    
    /*启用计时器*/
    /*需要在我们可以写入计数器之前完成*/
    omap_dm_timer_enable (pTimer);
    
    /*设置初始计数*/
    /*根据第20.1.3.5节的脉宽调制,当发生比较情况时,使用溢出或匹配来切换*/
    /*因此,我们将几乎立即触发溢出事件,以确保快速生成切换*/
    omap_dm_timer_write_counter (pTimer、(0xFFFFFFFF - 5));
    
    /*设置加载寄存器*/
    /*设置为自动载入,以便在溢出时将计数器设置回0 */
    omap_dm_timer_set_load (pTimer、1、0);
    
    /*将比较寄存器设置为100ms 秒*/
    /*这将确保溢出事件发生后100ms 的信号切换*/
    omap_dm_timer_set_match (pTimer、1、timerRate/10);
    
    /*启动计时器*/
    RET = OMAP-dm_timer_start (pTimer);
    printk (Kern_info "定时器启动寄存器%d\n"、ret);
    
    /*
    *非0返回意味着对 init_modules 的调用失败;无法加载模块
    *
    返回0;
    }
    
    static const struct of_device_id extWdtOfMatch[]={
    {.compatible ="cust_ext_WDT"}、
    {},
    };
    
    ...
    
    静态结构 platform_driver extWdtDriver ={
    .driver ={
    .name = driver_name、
    .owner =此模块、
    of_match_table = extWdtOfMatch、
    }、
    .probe = initExtWDT、
    .remove = exitExtWDT、
    };
    
    MODULE_platform_driver (extWdtDriver); 

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

    如果您不打算使用计时器的 PWM 功能、则无需使用 OMAP-dm_timer_set_pwm ()。 您需要与以下示例保持一致:

    e2e.ti.com/.../1487385

    请确保在更新 DTS 文件时、您也在重建该文件、创建新的 DTB 并加载此新的 DTB。

    此外、在构建内核期间检查是否有任何警告。 DTB 和模块。

    您可以尝试的其他操作:

    -将"static struct omap_dm_timer *pTimer = NULL;"添加到代码中
    -检查 devcie PRCM 中是否启用了 timer7
    -检查设置 timer7的 pinmux 是否可以解决问题
    -检查是否请求另一个计时器(非 timer7)将起作用
    -检查在 DTS 中启用 timer7是否可以解决此问题

    &timer7{

    pinctrl-names ="default";

    pinctrl-0 =<&timer7_PINS_DEFAULT>;

    状态="正常";




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

    您好、Pavel、

    非常感谢你的帮助。

    如需您的建议、

    -将"static struct omap_dm_timer *pTimer = NULL;"添加到代码中
    >已添加。 只是没有在这里发布。


    -检查 devcie PRCM 中是否启用了 timer7
    >您能告诉我如何操作?


    -检查设置 timer7的 pinmux 是否可以解决问题
    > AM335x-evmsk.dts 没有计时器配置、这是否意味着入门套件不支持此功能?


    -检查是否请求另一个计时器(非 timer7)将起作用
    >我会尝试。


    -检查在 DTS 中启用 timer7是否可以解决此问题
    >作为第三点。 是的、我没有启用 timer7。 (默认 DTS 不配置任何计时器。)
    因此、我必须添加&timer7{...) 正如您所说的。
    但是、哪个引脚应处于 timer7_PINS_DEFAULT 状态? (我使用的是 AM335x 入门套件)

    谢谢!

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

    Howard、

    [引用 USER="Howard Shih"]-检查在 devcie PRCM 中是否启用了 timer7
    >您能告诉我如何执行此操作吗?

    您可以在请求计时器之前打印 CM_PER_TIMER7_CLKCTRL 寄存器、并检查该值是否正确。

    有关详细信息、请参阅以下 e2e 主题:

    [引用 USER="Howard Shih"]-检查设置 timer7的 pinmux 是否可以解决问题
    > AM335x-evmsk.dts 没有计时器配置、这是否意味着入门套件不支持此功能?[/quot]

    可以、但您可以自己添加 timer7 pinmux

    [引用用户="Howard Shih">但是、哪个引脚应该位于 timer7_pins_default 中? (我使用的是 AM335x 入门套件)
    [/报价]

    您可以覆盖 SW1按钮 pinmux:

    GPIO_keys_s0:GPIO_keys_s0{
          pinctrl-single、pins =<
             AM33XX_IOPAD (0x894、PIN_INPUT_PULLUGDOWN | MUX_MODE7)   /* GPMC_oen_ren。GPIO2_3 *

    您可以将引脚 T7的使用情况从 GPIO2_3 (SW1按钮)(模式7)更改为 timer7 (模式2)。

    此致、
    帕维尔

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

    好的、我在 DTS 中添加了 pinmux 并启用计时器。

    timer7_pins:timer7_pins_default{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x894、PIN_INPUT_PULLUGDOWN | MUX_MODE2)/* GPMC_oen_ren。GPIO2_3 *
    >;
    };

    &timer7{
    pinctrl-names ="default";
    pinctrl-0 =<&timer7_pines>;
    状态="正常";
    };

    我使用 devmem2读取 timer7寄存器0x4804a000、但失败了。
    只能访问 Timer1和 timer2。 (地址是指 am33xx.dtsi。)

    读取 timer7失败。
    ~# devmem2 0x4804a000
    /dev/mem 已打开。[ 89.482790]未处理故障:在 bb6fda000处非线性获取(0x1018)上的外部中止
    [89.491196] PgD = c70b8000
    [89.493929][b6fda000]* PgD=868fd831、* Pte=4804a303、* Ppte=4804aa33

    目标存储器(0x4804A000)映射在地址 bb6fda000。
    总线错误

    读取 timer2正常。
    ~# devmem2 0x48040000
    /dev/mem 已打开。
    目标存储器(0x48040000)映射在地址 bb6f60000。
    地址0x48040000 (0xb6f60000)处的值:0x4FFF1301

    但是、我将 DTS 更改为使用 timer2、它仍然不循环任何内容、并返回 null pTimer。

    我的理解是 AM335x-evmsk.dts 没有关于 Timer1和 timer2的任何配置。
    因此、我不知道为什么默认启用 Timer1和 timer2。 -->我认为 DTS 不配置定时器。
    如果我们只需启用计时器即可启用 am33xx.dtsi、则应启用 Timer1~7、因为它们的代码相同。

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

    Timer2在 u-boot (在下面的文件中)中启用、并在内核和用户空间中保持启用。

    u-boot-2018.01/arch/arm/dts/AM335x-evmsk.dts
    u-boot-2018.01/arch/arm/mach-omap2/am33xx/clock_am33xx.c

    您不能使用 Timer2、因为该计时器是在内核中使用的。

    通常、应通过"status = oke"条目在内核 DTS 文件中启用模块(即 timer7)。 是否可以附加内核 DTS 文件进行审阅?

    您还可以尝试以下操作作为内核 DTS timer7启用过程的变通方法:

    1.在 u-boot 中启用 timer7、类似于 timer2

    2.通过写入 CM_PER_TIMER7_CLKCTRL 寄存器在 Linux 内核中启用 timer7。 您可以使用函数 am33xx_cm_write_reg ()(使用 writel_relaxed ()),也可以直接使用 writel_relaxed 或使用__raW_writel()。 请参阅以下内核文件以供参考:

    Linux-4.14.79/arch/arm/mach-omap2/cm33xx.c
    linux-4.14.79/drivers/clk/ti/adpll.c
    Linux-4.14.79/sound/soc/cu达 芬奇/Davinci-McAP.c

    3.通过时钟框架启用 timer7_fck

    Linux-4.14.79/arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c
    linux-4.14.79/drivers/clk/ti/clk-33xx.c

    processors.wiki.ti.com/.../Clock_Framework_User_Guide

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

    您好!

    在此处附上 DTS 代码。

    //
    *版权所有(C) 2012 Texas Instruments Incorporated - http://www.ti.com/
    *
    此程序是免费软件;您可以根据
    
    免费软件基金会*发布的 GNU 通用公共许可证版本2的条款重新分发和/或修改*。
    */
    
    *
    * AM335x 入门套件
    * www.ti.com/.../tmdssk3358
    */
    
    /DTS-v1/;
    
    #include "am33xx.dtsi"
    #include 
    #include 
    
    /{
    模型="TI AM335x EVM-SK";
    兼容="ti、AM335x-evmsk"、"ti、am33xx";
    
    CPU{
    CPU@0{
    CPU0-supply =<&V vdd1_reg>;
    };
    
    
    存储器@8000000
    
    
    
    
    
    {device_type ="存储器";reg =<0x80000000* regulator={vbd000/ regulatord000*= 0};选择
    
    
    的固定 vbvbd00000/ regulatord000/ regulatord000*= 0;}
    
    
    reguler-min-microvolt =<5000000>;
    reguler-max-microvolt =<5000000>;
    reguler-boot-on;
    };
    
    lis3_reg:fixedregulator1{
    compatible ="regulator-fixed";
    regulator-name ="lis3_reg";
    regulator-boot-on;
    };
    
    wl12xx_VMMC:fixedregulator2{
    pinctrl-names ="default";
    pinctrl-0 =<wl12xx_gp>;
    
    vrulator"="rulator-voltice-regulator"
    ;<w1800"="vrulator-regulator-rulator"="vrator-rulator-r";<
    regulator-max-microvolt =<1800000>;
    GPIO =<&GPIO1 29 0>;
    启动延迟-us =<70000>;
    使能-高电平有效;
    };
    
    VTT_fixed:fixedregulator3{
    compatible ="regulator-fixed";
    regulator-name ="VTT";
    regulator-min-microvolt=<1500000>;gpio-rulator-rulator-ma-rulator
    =<-ma-high>;<gpi-rulator-rulator-rulator-on-gpi-ma-high>;<gpi-rulator-rulator-ma-
    
    
    
    
    
    
    EXT_WDT{
    compatible ="cust_ext_WDT";
    status ="正常";
    DMtimer =<&timer4>;
    }
    
    ;LED{
    pinctrl-names ="默认值";
    pinctrl-0 =<< USER_LED_s0>;
    
    compatible ="GPIO-LED";
    
    /*LED1{
    label ="evmsk"="evmos"
    
    
    
    
    
    
    =";gpio1 ="绿色"gpio1 = 1 = 0 =";gpio1:gpio1 ="高电平;gpio1 =";gpio1:gpio1 = 0 =";gpio1:gpio1 =";gpio1 ="
    高电平;gpio1:gpio_off";gpio1
    };*/
    
    LED3 {
    标签="evmsk:green:mmc0";
    GPIO =<&GPIO1 6 GPIO_ACTIVE_HIGH>;
    Linux、default-trigger ="mmc0";
    default-state ="off";
    };
    
    led4 {
    标签="evmsk:green:heart";
    GPIOs =<&gpot"
    
    
    ;默认值="gpot_off"
    ;"gpot-state";"gpio7 ="active";"gpot"}"gpot"=默认值="gpot";"gpot"="
    
    GPIO_buttons:GPIO_button0{
    compatible ="GPIO-keys";
    #address-cells =<1>;
    #size-cells =<0>;
    
    switch1{
    label ="button0";
    Linux、code =<0x100>;
    GPIO=<&GPIO2 GPIO3 GPIO_ACTIVE_HIGe>;
    
    
    
    
    
    
    };switch2{switch2 ="online_switch2
    
    
    = 0x102";<GPIO2>GPIO2 = 0x101;<in1";<got_code";<GPIO2 = 0x102>
    
    GPIOs =<&GPIO0 30 GPIO_ACTIVE_HIGH_>;
    唤醒源;
    };
    
    switch4{
    label ="button3";
    Linux、code =<0x103>;
    GPIOs =<&GPIO2 5 GPIO_ACTIVE_HIGH_>;
    };
    };
    
    LCD_BL:
    
    
    255{compatible ="PWM-backlight";PWM =<ec90_0>
    ;PWM =<ec1000-86>;PWM 0级;默认值
    = 125-170-100>;}
    
    Sound{
    compatible ="简单音频卡";
    简单音频卡、name ="AM335x-EVMSK";
    简单音频卡、小工具=
    "耳机"、"耳机插孔";
    简单音频卡、路由=
    "耳机插孔"、"HPLOUT"、
    "耳机插孔"、"HPROUT";simple-audi_b"
    格式;simple-card、"pcontrol-gic"
    simple-audio-card、bitclock-master =<&sound_master>;
    simple-audio-card、frame-master =<&sound_master>;
    simple-audio-card、bitclock-倒 转;
    
    simple-audio-card、cpu{
    sound-dai =<&incsp1>;
    }
    
    sound_master:simple-audio-audittrl
    
    
    
    
    
    
    =<&tintrl =</cn/sleep_clock<&trlcd<&nation>;sep>=<&trlcdecnation>=<&trlcdecnation>;默认
    值=<&trl =<&trlcdecnock-clock-pers_clock1;<&trl =<&trl =<&trlcdecningsep>;
    
    
    背光=<&LCD_BL>;
    状态="正常";
    电池板信息{
    AC-BIAS=<255>;
    AC-BIAS -输入=<0>;
    DMA-BURST-SZ=<16>;
    bpp=<32>;
    FDD=<0x80>;
    sync-edge=<0>;
    sync-Ctrl=<1>;
    光栅顺序=<0>;
    fifo-th=<0>;
    };
    显示时序{
    480x272}
    {hactive=<480>;
    vactive=<272>;
    后沿=<43>;
    前沿=<8>;
    HSYNC-len=<4>;
    vback-clarch=<12>;
    vfront-clarch=<4>;
    vsync-len=<10>;
    时钟频率=<9000000;
    HSYNC-active=<0>;
    vsync-active=<0>;
    };
    };
    };
    };
    
    &am33xx_pinmux{
    pinctrl-names ="default";
    pinctrl-0 =<&GPIO_keys_s0 &clkout2_pin &DDR3_VTT_toggle>;
    
    DDR3_VTT_toggle:DDR3_VTT_toggle{
    pinctrl-single、pintrl =
    0x164 (PIN_output| M164)_mc_mc_mv_mc2_decux
    *、0x337_mcintrlcd_out1 *、
    
    
    
    默认值/m_mc_mc_mc_domn_out1 *
    
    、0x33x_mc_mc_mc_mc_mc_mc_domn_out1 *、0x28_m_mc_mc_m_m@n_out1 *、0x33x_mc_m_mc_mc_mc_mc_mc_mcin0_m@n_out1 |
    默认值/m_mc_mc_m_mc0_mc0_/* GPMC_ad10.LCD_data21 */
    AM33XX_IOPAD (0x82c、PIN_OUTPUT | MUX_MODE1)/* GPMC_ad11.LCD_data20 */
    AM33XX_IOPAD (0x830、PIN_OUTPUT | MUX_MODE1)/* GPMC_AD12.LCD_OUTP_0*
    
    
    
    / AM33XX_MR_MODIO0*/AM33_IN_IN_IN_MODIO0*/AM33XX_IN_IN_IN_IN_MODIO0*/AM33xx/AM33_PIN_MODIO0*/AM33xx_IN_MOUX_PIN_MODIO0*/AM33xx_MODIO0*/AM33xx_PIN_MOUX_PIN_MODIOPT_MODIO0_PIN_MODIO0*/AM33xx/AM33xx_PIN_MODIO0_MOUX_PIN_MODIO0*/AM33xx/AM33_PIN_MODIO0*/AM33_MODIO0_
    /* lcd_data1.lcd_data1 */
    AM33XX_IOPAD (0x8a8、PIN_OUTPUT | MUX_MODE0)/* lcd_data2.lcd_data2 */
    AM33XX_IOPAD (0x8ac、PIN_OUTPUT | MUX_MODE0)/* lcd_data3.lcd_output*/0x8XX_mm_mm_0*
    
    
    /AM335_mc0*/AM335_mu_mux.0*/AM335_mux.0_mu_mu_mux.0*/mux.0_m_do0*
    
    /* lcd_data8.lcd_data8 */
    AM33XX_IOPAD (0x8c4、PIN_OUTPUT | MUX_MODE0)/* lcd_data9.lcd_data9 */
    AM33XX_IOPAD (0x8c8、PIN_MODE0)/* lcd_data8
    (0x3310_mud_lcd_output*/AM3308_mud_lcd_m_dux.0*/AM3310_mudpin
    
    
    
    */0x8_mudpin_m_dux.0_mux.0*/0x33_mudpin_mudpin/* lcd_data15.lcd_data15 */
    AM33XX_IOPAD (0x8e0、PIN_OUTPUT | MUX_MODE0)/* lcd_vsync */
    AM33XX_IOPAD (0x8e4、PIN_OUTPUT | MUX_MODE0)/* LCD_SY33nC.LCD_INPUT
    
    
    = 0x8_MOUX_INPUT
    
    
    
    
    */AM33XX_INT_LCD_INPUT_INPUT + 0x8_IN_MODExx *+ LCD_IN_IN_IN_INPUT + 0x8_IN_IN_MODE8 */AM33_IN_MOUX_IN_IN_INPUT = 0x8_IN_IN_MOUX_OPT_LCD_LCD_INPUT + 0x8_INT_LCD_IN_INPUT + 0x8_INT_LCD_IN_IN_INPUT + 0x8_INT_LCD_IN_IN_INPUT_IN_IN_INPUT + 0x8_IN_IN_IN_IN_IN_
    /* GPMC_ad9.LCD_data22 */
    AM33XX_IOPAD (0x828、PIN_INPUT 下拉| MUX_MODE7)/* GPMC_ad10.LCD_data21 */
    AM33XX_IOPAD (0x82c、PIN_INPUT_PULLU_MODE7)/* AM33XX_MODE_INPUT
    
    
    (0x38_MODE_MR_MR_IN_IN_MODE7
    )/AM33_MR_MR_IN_IN_IN_IN_MR_IN_MR_IN_IN_MR_IN_MR_IN_MR_IN_MR_IN_IN_14*/AM33_MR_MR_IN_IN_IN_MR_IN_IN_MR_IN_IN_MR_IN_IN_MR_IN_IN_IN_MR_IN_IN_MR_IN_IN_IN_IN_MR_IN_IN_IN_IN_MR_IN_IN_IN_IN_MR_IN_IN_IN_IN_MR_EN/AM33_MR_MR_MR_MR_
    /* LCD_Data0.LCD_Data0 */
    AM33XX_IOPAD (0x8a4、PULL_DISABLE | MUX_MODE7)/* LCD_data1.LCD_data1 */
    AM33XX_IOPAD (0x8a8、PULL_MODE7)/* AM33XX_MODE_4
    
    
    
    */AM335_LCD_RAC*/AM335*/AM335_MODE_DIO8_RAC*/AM_MODE_MODE_DIO8_RAC*
    /* LCD_data7.LCD_data7 */
    AM33XX_IOPAD (0x8c0、PULL_MODE7)/* LCD_data8.LCD_data8 */
    AM33XX_IOPAD (0x8c4、PUL_MODE7)/* LCD_data8
    (0x8_MODE8)
    
    
    */AM33XX_MODE8_RAC_MODE8 */AM33_RAC_MODE8 */AM33_MODE_MODE8 */AM338_RAC_MODIOXX_MODE_MODE8 *
    /* LCD_data14.LCD_data14 */
    AM33XX_IOPAD (0x8dc、PULL_PULLUX | MUX_MODE7)/* LCD_data15.LCD_data15 */
    AM33XX_IOPAD (0x8e0、PIN_INPUT 下
    拉| MUX_MODE7)/* LCD_SYNC_INPUT
    
    
    (0x33XX_IN_MODE_IN_SYNC_IN_AM33_IN_IN_AM8_INPUT)*/AM33XX_SYNC_LCD_INPUT (0x8_IN_IN_IN_IN_IN_MOUX_SYNC_IN_INPUT)
    
    
    USER_LED_s0{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x810、PIN_OUTPUT 下拉| MUX_MODE7)/* GPMC_AD4.GPIO1_4 *
    / AM33XX_IOPd (0x810、PIN_OUTPUT 下拉| MUX_MODE7)/* GPIO0*
    
    
    
    (0x83_0_MODIO7)*/AM335_OUTP_0_MODIO0*/AM335_0_MODIO0_MODIO0*(0x87_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_PIN_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_PIN_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_PIN_GPIO0
    
    };
    
    GPIO_keys_s0:GPIO_keys_s0{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x890、PIN_INPUT 下拉| MUX_MODE7)/* GPMC_advn_ALe.GPIO2_2 *
    / AM33XX_IOPAD (0x870、PIN_INPUT_PULLUP | M0* GPMC_MODE7)/GPIO0_GPIO0_GPIO0*
    **+ GPMC_GPIO0_GPIO0_GPIO0_GPIO0_PIN_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GPIO0_GP_PIN_GPIO0_GPIO0_GPIO0__
    
    
    
    pinmux_i2c0_pins{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x988、PIN_INPUT_PULLUP | MUX_MODE0)/* i2c0_sda.i2c0_sda *
    AM33XX_IOPAD (0x98c、PIN_INPUT_PUT_PULLUP | M0_MOUART0_MOUART0_MOUART0_PUT0_INUARTx_INUART0_PUT0*
    
    
    
    
    
    
    )*= 0x33x_MOUART0_MOUART0_INPUT0_INPUT_MOUART0_MOUART0_MOUART0_IN_PUT0_MOUARTx_PUT0_MOD_PUT_PUT0*= 0xx_MOUARTON_PUT0_PUT0_MOD_PUT_MOD_MOUARTON_PULPULP ****= 0x_MOD_MO
    
    
    
    pinmux_clkout2_pin{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x9b4、PIN_OUTPUT 下拉| MUX_MODE3)/* xdma_event_intr1.clkout2 *
    ;
    };
    
    ecap2_pins:backlight_pintrl{pinc_modtrl}/mc394*
    
    
    
    
    
    默认
    
    
    
    值= 0x99x_msp_m_decn_mud_inu_intrl *、mcum_intrl = 0x394*、mcum_in_in_mcum_inu_inu_inu_inu_intrl *、mu_intru_mu_mu_mu_mu_mu_intru_mu_inu_mu_inu_mu_mu_inu_inu_mu_inu_mu_mu_inu_mu_inu_inu_mu_inu_inu_mu_inu_mu_in/* mii1_rxdv.rgmii1_rtl */
    AM33XX_IOPAD (0x91c、PIN_OUTPUT 下拉| MUX_mod2)/* mii1_txd3.rgmii1_td3 */
    AM33XX_IOPAD (0x920、PIN_OUTPUT _MOD1*
    )*、AM332_mi20_mi20_mi20_mi_mi20_mi_mi20_mi20_mi_mi_mi_mi20_mu_mu_m1*
    
    输出*
    
    /* mii1_rxd3.rgmii1_rd3 */
    AM33XX_IOPAD (0x938、PIN_INPUT_PULLUD | MUX_MODE2)/* mii1_rtc2_rmi2*/rmi381_rmi_mudpulldown
    
    
    
    
    
    */ rmi_mi_mudo2
    */rm_de4484*/rmi_mi_mi_mi_mudpulldown **/r33xx_mu_mu_mu_mu_mu_mu_mu_mu_mudo2 *
    PIN_OUTPUT 下拉| MUX_MODE2)/* GPMC_A3.rgmii2_td2 */
    AM33XX_IOPAD (0x850、PIN_OUTPUT 下
    
    
    拉| MUX_MODE2)/* GPMC_A4.rgmii2_TD1 * AM33XX_PIN_MODIU*
    
    (0x858_MODE*/AM332_AM_AM804_AM_AM_AM804_AM_AM_RTOUTDOUTDOUTDOUTDOUTDOUTDOUT_AM_R_RTOUTDOUTDOUTDOUTDOUTDOUTDOUT_AM_AM_AM_RESR ****/AM33XX_AM33XX_AM33XX_AM33XX_AM_AM_AM_RTOUTDOUTDOUTDOUTDOUT_AM_AM_RTOUTDOUTDOUTDOUTDOUTDOUT_RESR *****/AM33XX_AM33XX_AM_AM_AM_AM_AM_RESR */AM33XX_AM33XX_AM_
    PIN_INPUT_PULLUX | MUX_MODE2)/* GPMC_A10.rgmii2_RD1 */
    AM33XX_IOPAD (0x86c、PIN_INPUT_PULLUP 下拉| MUX_MODE2)/* GPMC_A11.rgmii2_rd0 *
    >;
    };cpsw_INPAD_INPULLU_M337_MODIOxx
    
    
    (0x928_INPUT_MODIOxx
    
    
    
    
    
    、0x914_INPAD_INPULLU_MODIOxx = 0x9_IN_INPUT_MODIOXX_INPUT_INUX_INPULLUX | AM33XX_INPULLUX 引脚0x914_MODIOPT_INPUT_MODIOxx (0x9_INPULLUX)| AM33XX_INPUT_INPUT_INPUT_INPULLU_MODIODIOXX_INPULLUX (0x9_INPULLUX)| AM33XX_INPULLUX (
    PIN_INPUT 下拉| MUX_MODE7)
    AM33XX_IOPAD (0x92c、PIN_INPUT 下拉| MUX_MODE7)
    AM33XX_IOPAD (0x930、PIN_INPUT 下拉| MUX_MODE7)
    AM33XX_INPUT (0x934、PIN_INPUT_MODEV
    
    )
    
    
    
    
    | AM33XX_MODIOUX_INPUT 下拉| AM33XX_MOUX_INUX_MODIOPAD (0x934、MR_INUX_INUX_MODEV (0x944/MODEV)| AM337_INUX_MODEV (0x944/MODEV)
    | AM33_MODEV (0x83V_MODIOUX_MODEV (0x944/MODEV)| AM33_IN_MODIODIUX_INUX_INPUT (0x944/MODEV)
    
    PIN_INPUT_PULLUX | MUX_MODE7)
    AM33XX_IOPAD (0x854、PIN_INPUT_PULLUP | MUX_MODE7)
    AM33XX_IOPAD (0x858、PIN_INPUT_PUT_PULLUP 下拉| AM33XX_MODE7)
    AM33XX_MODIO_PULLUX
    
    
    (0x864
    )
    
    
    
    | AM33XX_MODIO_PULLU_MODEPULLUX (0x86_MODE_MODEXX)| AM33UX_MODIODIV_MDIODIODIOPAD (0x86_MODEXX)| IN_MODExx (0x86_MODIV_MDIV_MDIV_MDIV_MDIV_MDIUX_MODEP_MODEPULLUX) PULLUX (0x86_MODEP_MODEP_MODEP_MODEP_MODEP_MODEP_MODEPULLU DaVinci_MDIO_DEFAULT{
    pinctrl-single、pins =<
    /* MDIO */
    AM33XX_IOPAD (0x948、PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)/* MDIO_DATA.MDIO_DATA */
    AM33XX_INPLUX (0x94c、PIN_OUT_PULLUP
    )| AMDIO_PULLUX
    
    
    
    = 0xMDIO_Pn
    
    
    
    *、MDIO_RESPON_MDIO = 0x94x *、MDIO_PON_MDIO_PULLUX *;0x94x + MDIO_Pn = 0xMDIO_Pn = 0xMDIO_Pn = 0xMDIO_Pn * MDIO_PULLUX + MDIO_Pn = 0x94x + MDIO_Pn = 0xMDIO_Pn = 0x94x + MDIO_Pn = 0xMDIODIODIO_Pn
    
    
    pinmux_mmc1_pins{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x960、PIN_INPUT | MUX_MODE7)/* spi0_CS1.GPIO0_6 *
    / AM33XX_IOPULLUG_0*/AM33XX_MO0_INPUT
    
    
    
    (0x8_M0_MO0_MR0_PIN_MO0_MO0_MO0*)*/AM330_PIN_MO0_MO0_MO0_PIN_MO0_MO0_MO0_MO0_MR0_PIN_MO0_MR0_PIN_MO0_MO0_MR0_MR0_MR0_PIN_MO0_MO0_MR0_MR0_MR0_MR0_PIN_MR0_MR0_MR0*输入*输入*/AM33_MO0_MO0_MO0_MO0_MR0_MR0_PIN_MO0_MR0_MR0_PIN_MR0_MR0_MR0_PIN_MR0_MR0_MR0_
    PIN_INPULLUP | MUX_MODE0)/* mmc0_clk.mmc0_clk */
    AM33XX_IOPAD (0x9a0、PIN_INPUT| MUX_MODE4)/* McASP0_aclpr.mmc0_sincp *
    ;
    };McA33SP1_PIN_MODEx
    
    
    
    (0x904_MUS_MDIO12_MODE_PIN_AM_MODE*
    /AM804_MR_MR_AM3312_MR_IN_MR_IN_AM33_AM3312_MODE_PULESDULESD*
    */AM33_AM33_AM_AM_AM33_R_R_R_MODULT*
    
    
    };
    
    McASP1引脚_sleep:McASP1引脚_sleep{
    pinctrl-single、引脚=<
    AM33XX_IOPAD (0x90c、PIN_INPUT_PULLUD | MUX_MODE7) AM33XX_PIN_MODE8
    (0x910、PIN_MODE_MOUX_PULLUX
    
    
    
    
    
    
    
    
    
    )| AM33XX_MUS_MOUX_INPULLUX (0x874_MIP_MOUX_PULLUT_MONUX_PULLUP)| AM334*引脚= 0x874_MODIODIO0_MOUX_INPULLU_MOUX_INPULLU_MOUX_PULLUP (0x874_MIP_MIP_MON_MOUX_MON_MOUX_MOUX_MOUX_PULLUP)| AM33UX_PULLUPULLUPON_MOUX_PULLUPULLUP (0x874_MOUV_MOUV_MOUX_PULLUPON_MOUV_M /* GPMC_csn2.mmc1_cmd */
    AM33XX_IOPAD (0x800、PIN_INPUT_PULLUP | MUX_MODE1)/* GPMC_ad0.mmc1_data0 *
    / AM33XX_IOPAD (0x804、PIN_INPUT_PULLUP | MUX_MODE1)/* GPMC_AD3_MOD1*
    
    
    
    
    
    
    
    
    = 0xMC_INPULLU_MO1*/AM33xx_INPULLU_MO1*= 0x801*/AM_MODE_INPULLU_IN_MO1*= 0x801*/AM33xx;0xMC_MODE_IN_INPULLU_IN_MO1* 0x801*+ PULLU_IN_MODE_MODE_MO1*= 0x801*+ PULLU_IN_MODE_MODE_INPULLUP;0x801*= 0xMC_IN_IN_IN_MODE_INPULLUP * 0x801*= 0xMC_MODE_IN_IN_MODE_IN_
    
    
    timer4_PINS_DEFAULT{
    pinctrl-single、PINS =<
    AM33XX_IOPAD (0x894、PIN_INPUT 下拉| MUX_MODE2)/* GPMC_oen_ren。GPIO2_3 */
    >;
    };
    
    
    和&inc4{
    pinctrl-names ="默认";
    pinctrl
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    = 0;="默认";pinc0 = 0 ="默认";pinctrl = 0 = 0;="默认"=";pinctrl"= 0 =";pinctrl = 0 = 0 ="默认";pintrin 0 ="=";="默认"="="=";pinctrin 0 ="="= 0;"="
    时钟频率=<400000>;
    
    TPS:TPS@2D{
    reg =<0x2D>;
    };
    
    LIS331DLH:LIS331DLH@18{
    compatible ="st、LIS331DLH"、"st、lis3lv02d";
    reg =<0x18>;
    Vdd-supply =<&lis3_reg>
    ;Vdd-supply =<&lis3_reg_3_reg>;visio=<&lisi>
    
    St、click-single-x;
    st、click-single-y;
    st、click-single-z;
    st、click-thresh-x =<10>;
    st、click-thresh-y =<10>;
    St、click-thresh-z =<10>;
    st、irq1-click;
    st、irq2-click;
    st、WAKEUP-x-lo;
    st、WAKEUP-x-hi;
    ST、WAKEUP-y-lo;
    st、WAKEUP-y-hi;
    st、WAKEUP-Z-Z-lo;
    st、WAKEUP-Z-Z-HI;
    st、min-limit-x =<120>;
    St、min-limit-y =<120>;
    st、min-limit-z =<140>;
    st、max-limit-x =<550>;
    st、max-limit-y =<550>;
    st、max-limit-z =<750>;
    };
    
    tlv320aic3106:tlv320aic3106@1b{
    #sound-di-cells =<0>;
    compatible ="ti、tlv320aic3106";
    reg =<0x1b>;
    status ="确定";
    
    //稳压器*/
    AVDD-supply =<&vaux2_reg>;
    IOVDD-supply =<&vdvdvdvds-supply
    
    
    =<&vdvdreg;vdvds-reg>;vdvdvdvds-supply =<&vdr =<&vdvdvdvdvdv
    };
    
    &USB{
    status ="确定";
    }
    
    ;&USB_CTRL_mod{
    status ="确定";
    }
    
    ;&usb0_phy{
    status ="确定";
    };
    
    &USB1_phy{
    status ="确定";
    };
    
    &usb0{
    status ="确定";
    };
    
    &USB1{
    status ="确定";
    dr_mode =
    
    
    "
    };"cppima";
    
    
    epwmss2{
    status ="确定";
    
    ecap2:eCAP@48304100{
    status ="确定";
    pinctrl-names ="默认值";
    pinctrl-0 =<&ecap2_PINs>;
    };
    };
    
    wkup_m3_IPC{
    ti、needs-VTT-toggle;
    ti、VTT-GPIO-pin =<7>;
    ti、scale-data-fw ="AM335x-EVM-scale-data.bin";
    }
    
    ;#include "tps65910.dtsi"
    
    &TPS{
    vcc1-supply =<&vccAT>;vccAT=vccAT&supply
    =
    vcc2;vccAT<vccAT>vccAT&supply = vcc&vccAT>vccAT>vccAT<vccAT>vcc&supply = vcc&vccAT<vccAT>vcc&vcc&vcc
    
    
    vcc6-supply =<VBAT>;
    vcc7-supply =<VBAT>;
    vcci-supply =<VBAT>;
    
    regulators{
    vrtc_reg:regulator@0{
    regulator-always-on;
    };
    
    VIO_reg:regulators-always-on@
    
    
    
    @1{vdd1_reg:regulators-forma-d/
    最大值= 1.500V
    
    
    
    、最大值= Vmand-voltagors-on;v-rand-v-rulators-on = 1.52v/v-voltagors-on;v-rand-rand-v-v-rand-v-rand-v-rand-v-v-v-randv-v-v-v-v-randv-randv-v-
    
    };
    
    vdd2_reg:电脑控制器@3{
    /* VDD_CORE 电压限制0.95V - 1.1V、容差为+/-4%*
    /电脑控制器名称="VDD_CORE ";
    电脑控制器最小值微伏=<912500>;
    电脑控制器最大值微伏=<1150000>;
    电脑控制器启动开启;
    电脑控制器始终开启;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    @;vdd3_reg:电脑控制器@4
    
    
    
    
    
    
    
    @电脑控制器常开;};vdig1_reg:电脑控制器@5@电脑控制器常开;};vdig2_reg:电脑控制器@6{电脑控制器常开;};vpll_reg:电脑控制器
    
    
    
    @7
    
    
    
    @电脑控制器常开;}vdac_regul器
    
    
    
    
    = v33x-r稳
    压器常开;vr稳 压器= v33x-r稳 压器= vrm Ω rs = vrm Ω rema-rm Ω;vr稳 压器常开;vr稳 压器= vrm Ω vrm Ω vrm Ω rm Ω rm Ω rm Ω rm Ω@r稳 压器= vrs = vrm Ω rm Ω rm Ω rm Ω rm Ω rm Ω r;vrulator;vrulator
    稳压器常开;
    };
    };
    };
    
    &Mac{
    pinctrl-names ="default"、"sleep";
    pinctrl-0 =<&cpsw_default>;
    pinctrl-1 =<&cpsw_sleep>;
    dual_emac =<1>;
    状态="确定";
    }
    
    ;达芬奇_MDIO{
    pinctrl-names ="默认"、"睡眠";
    pinctrl-0=<&Davinc_MDIO_default>;
    pinctrl-1 =<&Davinc_MDIO_SLEEP>;
    状态="确定";
    };
    
    &cpsw_emac0{
    phy_id =<&Davinci_mdio>、<0>;
    phy-mode ="RGMII-txid";
    dual_EMAC_res_vlan =<1>;
    };
    
    &cpsw_emac1{
    phy_id =<&Davinci_mdio>、<1>;
    phy-mode ="RGMII-txid";
    dual_EMAC_res_vlan =<2>;
    };
    
    &mmc1{
    status ="确定";
    VMMC-supply =<&VMMC_reg>;
    总线宽度=<4>;
    pinctrl-names ="默认值";
    pinctrl-0 =<&mmc1_PINs>;
    CD-GPIOs =<&GPIO0 6 GPIO_ACTIVE_LOW>;
    }
    
    ;&sham{
    status ="oke";
    }
    
    ;&AES{
    status ="oke";
    };
    
    &GPIO0{
    ti、no-reset-on-init;
    };
    
    &mmc2{
    status ="oke";
    VMMC-supply =<&wl12xx
    ;<VMMC-off-cap
    =<&vcap;<&cap =
    非可拆卸电源;VMMC-width 4;VMMC-cap;VMMC-width = 4+
    保持暂停模式下的电源;
    pinctrl-names ="默认值";
    pinctrl-0 =<&mmc2_PINs>;
    
    #address-cells =<1>;
    #size-cells =<0>;
    wlcore:wlcore@2{
    compatible ="ti、wl1271";
    reg =<2>;
    interrupt-parent =<&GPIO0>;
    interrupts =<31 IRQ_TYPE_LEVEL_HIGH>;// GPIO 31 *
    / ref-clock-frequency =<38400000>;
    };
    }
    
    ;&McASP1{
    #sound-type-sep-cells =<cntrltrlings&pers_sep<pintrlings&pers_sepsings=<pintrlings&pinsuls&pers_pinsulsepseps=<pintrl
    
    
    
    
    状态="正常";
    
    运算模式=<0>; /* mcsp_is_mode */
    tdm-slots =<2>;
    /* 4串行器*/
    serial-dir =</* 0:非活动、1:TX、2:Rx */
    0 1 2
    >;
    TX-rx-evt =<32>;
    tsc-num-evt =<32>;
    };
    
    tscadc =<ti
    
    
    
    、t- t- t- tb =<200;t- t- t- t- t- t- t- t- t- t- t- t- t- t- t- t- t- t- t- t- tin =<vs =<name>;<read
    
    TI、wire-config =<0x00 0x11 0x22 0x33>;
    };
    
    
    };&LCDC{
    status ="oke";
    
    蓝线和红线="交叉";
    }
    
    ;&SGX{
    status ="oke";
    }
    
    ;&RTC{
    Clocks =<&clk_32768_clock>、<&clk32k_click>
    ;"int-clk";
    
    
    &pruss_SoC_bus{
    status ="确定";
    
    pruss:pruss@0{
    status ="确定";
    };
    }; 

    我也尝试过 timer4、仍然一样。

    我将尝试您建议的1~3方式。

    另一个问题是、如果我使用 hrtimer 执行同样的操作、中断回调是否会因系统繁忙而延迟?

    如果没有、我可能可以改用 hrtimer。

    霍华德

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

    [引用 USER="Howard Shih"] timer4_PINS:timer4_PINS_DEFAULT{pinctrl-single、PINS =< AM33XX_IOPAD (0x894、PIN_INPUT_PULLUG_MODE2)/* GPMC_oen_quote.GPIO2_3 */>;[/ren ]

    该 pinmux 用于 timer7、而不是 timer4。 对于 timer4 pinmux、您需要:

    - AM33XX_IOPAD (0x890、PIN_INPUT 下拉| MUX_MODE7)   /* GPMC_advn_ALe.GPIO2_2 */

    + AM33XX_IOPAD (0x890、PIN_INPUT_PULLUGDOWN | MUX_MODE2)   /* GPMC_advn_ALE.timer4 *

    [引用用户="Howard Shih"]另一个问题,如果我使用 hrtimer 执行同样的操作,中断回调是否会由于系统繁忙而延迟?

    hrtimers 使用 DM_Timers。 您可以看到与 cat /proc/timer_list.的某些关系

    检查以下 e2e 螺纹:

    此致、
    帕维尔