本文主要是介绍RTEMS RPi4B BSP 添加system timer驱动支持,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
RPi4 有两种timer,ARM timer 和 system timer。
The ARM Timer is based on a ARM SP804, but it has a number of differences with the standard SP804.
The clock from the ARM timer is derived from the system clock. This clock can
change dynamically e.g. if the system goes into reduced power or in low power
mode. Thus the clock speed adapts to the overall system performance
capabilities. For accurate timing it is recommended to use the system timers.
RPI4 BSP目前使用的是ARM timer 提供 clock。驱动为 bsps/shared/dev/clock/arm-generic-timer.c。
计划添加system timer驱动,以提供准确计时。
- 查阅数据手册可知,RPi4(BCM2811)的 system timer 与 RPi1-3(BCM2835)相互兼容。将位于 bsps/arm/raspberrypi/clock/clockdrv.c 的 system timer 驱动移植到共享目录 bsps/shared/dev/clock/bcm2835-system-timer.c。 需要修改 rpi1-3 BSP的spec文件。spec/build/bsps/arm/raspberrypi/obj.yml。
- 为 RPi4 BSP 添加 system timer 支持。
- 修改 bsps/aarch64/raspberrypi/include/bsp/irq.h 文件。加入ARM timer中断号。
#define BCM2711_IRQ_VC_PERIPHERAL_BASE 96/* Interrupt Vectors: System Timer */ #define BCM2835_IRQ_ID_GPU_TIMER_M0 (BCM2711_IRQ_VC_PERIPHERAL_BASE + 0) #define BCM2835_IRQ_ID_GPU_TIMER_M1 (BCM2711_IRQ_VC_PERIPHERAL_BASE + 1) #define BCM2835_IRQ_ID_GPU_TIMER_M2 (BCM2711_IRQ_VC_PERIPHERAL_BASE + 2) #define BCM2835_IRQ_ID_GPU_TIMER_M3 (BCM2711_IRQ_VC_PERIPHERAL_BASE + 3)
- 修改 bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h文件。在变量命名方面与BCM2835 system timer兼容。
- 新建 spec/build/bsps/aarch64/raspberrypi/objsystemtimer.yml 文件,将system timer引入。
- 在 spec/build/bsps/aarch64/raspberrypi/objclock.yml 中使用
enabled-by: not:
字段实现ARM timer 和 system timer 的选择。
enabled-by:not: BSP_CLOCK_USE_SYSTEMTIMER
- 新建文件 spec/build/bsps/aarch64/raspberrypi/optsystemtimer.yml ,配置为true则使用system timer,为false则使用 ARM timer。
这篇关于RTEMS RPi4B BSP 添加system timer驱动支持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!