2. 君正 JZ47xx SoC 的定時器/計數器單元硬體

君正 JZ47xx SoC 中的定時器/計數器單元 (TCU) 是一個多功能硬體塊。 它具有多達八個通道,可用作計數器、定時器或 PWM。

  • JZ4725B、JZ4750、JZ4755 只有六個 TCU 通道。 其他 SoC 都有八個通道。

  • JZ4725B 引入了一個單獨的通道,稱為作業系統定時器 (OST)。 這是一個 32 位可程式設計定時器。 在 JZ4760B 及更高版本上,它是 64 位的。

  • 每個 TCU 通道都有自己的時鐘,可以透過其 TCSR 暫存器重新分配給三個不同的時鐘(pclk、ext、rtc),進行門控和重新計時。

    • 看門狗和 OST 硬體塊還在其暫存器空間中具有相同格式的 TCSR 暫存器。

    • 用於門控/取消門控的 TCU 暫存器也可以門控/取消門控看門狗和 OST 時鐘。

  • 每個 TCU 通道在以下兩種模式之一中工作

    • 模式 TCU1:通道無法在睡眠模式下工作,但更容易操作。

    • 模式 TCU2:通道可以在睡眠模式下工作,但操作比 TCU1 通道稍微複雜一些。

  • 每個 TCU 通道的模式取決於使用的 SoC

    • 在最舊的 SoC(最高至 JZ4740)上,所有八個通道均以 TCU1 模式執行。

    • 在 JZ4725B 上,通道 5 作為 TCU2 執行,其他通道作為 TCU1 執行。

    • 在最新的 SoC(JZ4750 及更高版本)上,通道 1-2 作為 TCU2 執行,其他通道作為 TCU1 執行。

  • 每個通道都可以生成中斷。 某些通道共享一箇中斷線,某些通道不共享,這在 SoC 版本之間會發生變化

    • 在較舊的 SoC(JZ4740 及更低版本)上,通道 0 和通道 1 具有自己的中斷線;通道 2-7 共享最後一箇中斷線。

    • 在 JZ4725B 上,通道 0 具有自己的中斷;通道 1-5 共享一箇中斷線;OST 使用最後一箇中斷線。

    • 在較新的 SoC(JZ4750 及更高版本)上,通道 5 具有自己的中斷;通道 0-4 和(如果八個通道)6-7 都共享一箇中斷線;OST 使用最後一箇中斷線。

2.1. 實現

TCU 硬體的功能分佈在多個驅動程式中

時鐘

drivers/clk/ingenic/tcu.c

中斷

drivers/irqchip/irq-ingenic-tcu.c

定時器

drivers/clocksource/ingenic-timer.c

OST

drivers/clocksource/ingenic-ost.c

PWM

drivers/pwm/pwm-jz4740.c

看門狗

drivers/watchdog/jz4740_wdt.c

由於屬於不同驅動程式和框架的 TCU 的各種功能可以從相同的暫存器進行控制,因此所有這些驅動程式都透過相同的 regmap 訪問其暫存器。

有關 TCU 驅動程式的裝置樹繫結的更多資訊,請檢視 Documentation/devicetree/bindings/timer/ingenic,tcu.yaml。