Need community suggestions for a new generic GPIO API

Christian MAUDERER christian.mauderer at embedded-brains.de
Tue Jul 11 13:05:30 UTC 2023


Hello Utkarsh,

please be a bit careful with GPIO and pin functions. That's a quite 
difficult topic.

Some controller manufacturers mix these functions. One such example is 
the STM32 family. I'll take the STM32F410 as an example. That chip has a 
GPIO register block with one GPIOx_MODER where you can select whether a 
pin is a Input, GPIO, alternate function or analog mode. There is also a 
GPIOx_OSPEEDR that defines speed and some others that define pull ups / 
downs and so on.

Other controllers - like a lot of the NXP ones - have two completely 
independent modules for that. I'll take the i.MXRT1050 series as an 
example: That chip has an IOMUXC where you can set a pin function for a 
pad. For example, there is a register IOMUXC_SW_MUX_CTL_PAD_GPIO_EMC_26. 
In that register, you can set a pin function of GPIO4_IO26. There is a 
related PAD_CTL register in the IOMUXC where you can set up pull ups / 
downs, drive strength and so on. The GPIO controller where you set up 
levels and interrupts for that pin is a completely unrelated module. On 
the i.MXRT1166 you can even assign some pins to two different GPIO 
controllers. So it's not possible to have a 1:1 mapping between pin and 
GPIO.

If you ask me GPIO and pin function are two separate things and need two 
APIs. That should make it possible to support controllers like the STM32 
(where some of the GPIO registers would be controlled by the GPIO API 
and some by the pin function API) and for controllers like the i.MXRT 
where the two APIs would handle different hardware modules.

If you take a look at Linux or FreeBSD, they usually split that up just 
like that. If you want to dig deeper into that, maybe it would be worth 
to take a look at some other embedded operating systems. For example 
Zephyr or Contiki or any of the ones in Wikipedia "Comparison of 
real-time operating systems". It can even be a good idea to create a 
compatible interface.

Best regards

Christian

On 2023-07-07 21:48, Utkarsh Verma wrote:
> Dear all,
> 
> While working on the Raspberry Pi 4 BSP, I realized that the GPIO API
> could be improved. It seems that last year, a GSoC student worked on
> introducing a new GPIO API, called GPIO2 to RTEMS. However, it did not
> get merged. Discussing this topic with my mentor and on RTEMS Discord
> revealed that it would be a good idea to get it merged. For that, I
> would like to ask the community the following:
> 
> - Moving forward, will GPIO2 API be the community-preferred GPIO API?
> - What would be the recommended way in this new API to select
> alternate pin functions? Will that be left for the BSP to decide?
> 
> Here are the links associated with GPIO2:
> Git Repo: https://github.com/dtbpkmte/GSoC-2022-RTEMS
> GPIO2 commit: https://github.com/dtbpkmte/GSoC-2022-RTEMS/commit/0aec268f1209c
> Blog post about the API:
> https://medium.com/@dtbpkmte/gsoc-2022-rtems-coding-period-week-4-gpio-wiki-1f10e5c4458
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel

-- 
--------------------------------------------
embedded brains GmbH & Co. KG
Herr Christian MAUDERER
Dornierstr. 4
82178 Puchheim
Germany
email:  christian.mauderer at embedded-brains.de
phone:  +49-89-18 94 741 - 18
mobile: +49-176-152 206 08

Registergericht: Amtsgericht München
Registernummer: HRA 117265
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/


More information about the devel mailing list