162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci.. include:: ../../disclaimer-zh_CN.rst 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci:Original: Documentation/arch/mips/ingenic-tcu.rst 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci:翻译: 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci 司延腾 Yanteng Si <siyanteng@loongson.cn> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci.. _cn_ingenic-tcu: 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci=============================================== 1462306a36Sopenharmony_ci君正 JZ47xx SoC定时器/计数器硬件单元 1562306a36Sopenharmony_ci=============================================== 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci君正 JZ47xx SoC中的定时器/计数器单元(TCU)是一个多功能硬件块。它有多达 1862306a36Sopenharmony_ci8个通道,可以用作计数器,计时器,或脉冲宽度调制器。 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci- JZ4725B, JZ4750, JZ4755 只有6个TCU通道。其它SoC都有8个通道。 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci- JZ4725B引入了一个独立的通道,称为操作系统计时器(OST)。这是一个32位可 2362306a36Sopenharmony_ci 编程定时器。在JZ4760B及以上型号上,它是64位的。 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci- 每个TCU通道都有自己的时钟源,可以通过 TCSR 寄存器设置通道的父级时钟 2662306a36Sopenharmony_ci 源(pclk、ext、rtc)、开关以及分频。 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci - 看门狗和OST硬件模块在它们的寄存器空间中也有相同形式的TCSR寄存器。 2962306a36Sopenharmony_ci - 用于关闭/开启的 TCU 寄存器也可以关闭/开启看门狗和 OST 时钟。 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci- 每个TCU通道在两种模式的其中一种模式下运行: 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci - 模式 TCU1:通道无法在睡眠模式下运行,但更易于操作。 3462306a36Sopenharmony_ci - 模式 TCU2:通道可以在睡眠模式下运行,但操作比 TCU1 通道复杂一些。 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci- 每个 TCU 通道的模式取决于使用的SoC: 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci - 在最老的SoC(高于JZ4740),八个通道都运行在TCU1模式。 3962306a36Sopenharmony_ci - 在 JZ4725B,通道5运行在TCU2,其它通道则运行在TCU1。 4062306a36Sopenharmony_ci - 在最新的SoC(JZ4750及之后),通道1-2运行在TCU2,其它通道则运行 4162306a36Sopenharmony_ci 在TCU1。 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci- 每个通道都可以生成中断。有些通道共享一条中断线,而有些没有,其在SoC型 4462306a36Sopenharmony_ci 号之间的变更: 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci - 在很老的SoC(JZ4740及更低),通道0和通道1有它们自己的中断线;通 4762306a36Sopenharmony_ci 道2-7共享最后一条中断线。 4862306a36Sopenharmony_ci - 在 JZ4725B,通道0有它自己的中断线;通道1-5共享一条中断线;OST 4962306a36Sopenharmony_ci 使用最后一条中断线。 5062306a36Sopenharmony_ci - 在比较新的SoC(JZ4750及以后),通道5有它自己的中断线;通 5162306a36Sopenharmony_ci 道0-4和(如果是8通道)6-7全部共享一条中断线;OST使用最后一条中 5262306a36Sopenharmony_ci 断线。 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci实现 5562306a36Sopenharmony_ci==== 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ciTCU硬件的功能分布在多个驱动程序: 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci============== =================================== 6062306a36Sopenharmony_ci时钟 drivers/clk/ingenic/tcu.c 6162306a36Sopenharmony_ci中断 drivers/irqchip/irq-ingenic-tcu.c 6262306a36Sopenharmony_ci定时器 drivers/clocksource/ingenic-timer.c 6362306a36Sopenharmony_ciOST drivers/clocksource/ingenic-ost.c 6462306a36Sopenharmony_ci脉冲宽度调制器 drivers/pwm/pwm-jz4740.c 6562306a36Sopenharmony_ci看门狗 drivers/watchdog/jz4740_wdt.c 6662306a36Sopenharmony_ci============== =================================== 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci因为可以从相同的寄存器控制属于不同驱动程序和框架的TCU的各种功能,所以 6962306a36Sopenharmony_ci所有这些驱动程序都通过相同的控制总线通用接口访问它们的寄存器。 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci有关TCU驱动程序的设备树绑定的更多信息,请参阅: 7262306a36Sopenharmony_ciDocumentation/devicetree/bindings/timer/ingenic,tcu.yaml. 73