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.

[参考译文] 66AK2G12:在 DTS 中添加器件 max3107的中断和时钟信息

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1316215/66ak2g12-add-interrupt-and-clock-information-of-a-device-max3107-in-dts

器件型号:66AK2G12

您好!

我们拥有一个使用66AK2G 处理器的电路板和一个 SPI/I2C 转 UART 芯片 MAX3107、如下所示。 我们正在使用 SPI1总线来控制 max3107。

我们不使用 DCAN0和 DCAN1、因此 K2G 的 H21、H22引脚用作简单的 GPIO 输入/输出引脚。

在器件树中有 max3107的几个必要属性、

必需
-兼容-
寄存器
-中断
-时钟-时钟
名称 

我想知道如何将中断信息添加到器件树? 此外,时钟信息  clk_4M 是否正确? 不确定是否足够的条目以红色文本显示。

/dts-v1/;

#include "keystone-k2g.dtsi"

/{
   兼容= "ti、k2g-evm"、"ti、k2g"、"ti、keystone";
   模型="Texas Instruments K2G General Purpose EVM";

   内存@8000000 {
      device_type ="存储器";
      REG =<0x00000008 0x00000000 0x00000000 0x80000000>;
   };

。 。 。 。 。

   CLK_4M:CLK_4M{/*对于 SPI UART max3107 */
       兼容="固定时钟";
       #clock-cells =<0>;
       时钟频率=<4000000>;
   };

};

SPI1{&S}
   pinctrl-names ="默认";
   PINCCTRL-0 =<&SPI1_PINS>;
   状态="可以";

   /* UART 扩展器、MAX3107 */
   max310x_0:max0@0{
      兼容="maxim,max3107";
      SPI-max-frequency =<10000000>;//<125000000>
      寄存器=<0>;
      interrupt-parent = ;/*可选*/
      interrupts = ;       /*必需*/
      时钟=<&clk_4M>;
      时钟名称="osc";
   };
};

汤姆

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

    您好、Tom、  

    感谢您的查询。

    让我来看看我们是否有一个熟悉  max3107的专家和 可以支持的处理器。

    请预计响应会延迟。  

    此致、

    斯里尼瓦萨

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

    您好、Tom、

    我们可在论坛上为有关 TI 硬件或 TI 软件的问题提供支持。 但我们无法回答有关其他公司开发的硬件或软件的问题。

    如果您发现我们的 SPI 外设或 TI SPI 驱动器有任何问题、请联系我们、我们可以提供帮助! 但您需要联系模拟器件、以获取有关如何将其部件与 Linux 处理器配合使用的问题。

    此致、

    尼克

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

    Nick、

    实际上我是在问如何使用 TI K2G 芯片、TI 芯片如何为外部器件分配中断、与 MAX3107无关。 外部芯片可以是 SPI 器件、DDR 或任何具有中断服务要求的器件。

    汤姆

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

    例如、如果正确答案如下所示、您能否告诉我在该 TI K2G 处理器中的中断索引的位置? 必须有一组中断、哪一个更合适呢? ……

    interrupt-parent =<&GPIO>;interrupts
    =<160 1>; 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tom、

    让我来看看这个。 正如免责声明中所述、我从未在这个旧平台上工作、也无法访问它、因此我在这里的评论基于对文档和内核源的查看(未经测试)。

    &SPI1 {
       pinctrl-names ="默认";
       PINCCTRL-0 =<&SPI1_PINS>;
       状态="可以";

       /* UART 扩展器、MAX3107 */
       max310x_0:max0@0{
          兼容="maxim,max3107";
          SPI-max-frequency =<10000000>;//<125000000>
          寄存器=<0>;
          interrupt-parent = ;/*可选*/
          interrupts = ;       /*必需*/
          时钟=<&clk_4M>;
          时钟名称="osc";
       };
    };

    您将需要以下内容...

    interrupts = <GIC_SPI 164 IRQ_TYPE_EDGE_RISING>;

    该特定示例取自  uart0 中的定义  arch/arm/boot/dts/keystone-k2g.dtsi 。 每个外设的 GIC_SPI (共享外设中断)索引可在  SPI 事件编号 的列  表6-2. AINTC 中断源   多核 DSP + ARM KeyStone II 片上系统(SOC) TRM 中的多核射频校准功能。 当您检查该 TRM 表时、您可以找到列于其中的164以指示 UART_0 ,它与上述内容对应。 只需将其视为起点、当然我们在此处处于 GPIO 中断之后。

    进一步看一下 TRM、从 GPIO 获得中断的一种方法是使用 GPIOMUX[0...31 ]输入作为中断源,对应于 GIC_SPI  第448...479章 此外、无论 GPIOMUX[0...31] 需要通过相关的通道配置所选输入的 BOOTCFG_EVENT_MUXCTLx 寄存器、请参阅部分  5.1.3.1.7事件复用控制寄存器 特性。 与此相关的 E2E 博文如下所示: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/943300/ccs-66ak2g12-interrupt-not-working-in-arm-for-mux-event-selection-value-other-than-1 、看起来这需要在裸机环境(引导加载程序)中完成。 替代此方法的一种方法是改用 GPIO 组中断、这会转换为   GIC_SPI  事件编号432...446、在这种情况下、您应该无需配置事件多路复用器控制寄存器即可逃脱。 如果您看到这些中断已经通过 arch/arm/boot/dts/keystone-k2g.dtsi 中的 GPIO 模块分配。

    [报价 userid="521538" url="~/support/processors-group/processors/f/processors-forum/1316215/66ak2g12-add-interrupt-and-clock-information-of-a-device-max3107-in-dts "]    clk_4M:clk_4M{/*对于 SPI UART max3107 */
           兼容="固定时钟";
           #clock-cells =<0>;
           时钟频率=<4000000>;
       };

    这看起来是正确的。

    此致、Andreas

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

    尊敬的 Andreas:

    谢谢详细的解释。 我使用一种简单的方法从 GPIO 获取中断。

    请参阅如何在 EVM k2g 中使用 GPIO1_12引脚:

    https://elixir.bootlin.com/linux/v4.19.94/source/arch/arm/boot/dts/keystone-k2g-evm.dts

    由于在我们的原理图中、MAX3107的 IRQ 引脚连接到 K2G 处理器的 GPIO1_67引脚。 我们只需按如下方式将 MAX3107添加到 DTS:

    GPIO1{(&G)}
       状态="可以";

    };

    SPI1{&S}

       pinctrl-names ="默认";
       PINCCTRL-0 =<&SPI1_PINS>;
       状态="可以";

       /* UART 扩展器、MAX3107 */
       max310x_0:max0@0{
          兼容="maxim,max3107";
          SPI-max-frequency =<5000000>;
          寄存器=<0>;
          INTERRUPT-PARENT =<&GPIO1>
          中断=<67 IRQ_TYPE_EDGE_FALLING>;
          时钟=<&clk_4M>;
          时钟名称="osc";
          GPIO 控制器;
          #GPIO-CELLS =<2>;
       };
    };

    汤姆