Ada does not, but the most popular Ada toolkit (GNAT) includes the gnatprep tool (see here ). Other tool kits may include equivalents.
For instance,
RCC.RCC_Periph.AHB1ENR := ($SCL_Enable => 1, others => <>);
$SCL_GPIO.MODER.Arr ($SCL_Pin) := 2; -- alternate function
$SCL_GPIO.OTYPER.OT.Arr ($SCL_Pin) := 1; -- open drain
$SCL_GPIO.OSPEEDR.Arr ($SCL_Pin) := 1; -- medium speed
$SCL_GPIO.PUPDR.Arr ($SCL_Pin) := 0; -- nopullup, no pulldown
#if SCL_Pin < 8 then
$SCL_GPIO.AFRL.Arr ($SCL_Pin) := 4; -- DocID022152 Rev 6 Table 9
#else
$SCL_GPIO.AFRH.Arr ($SCL_Pin) := 4; -- DocID022152 Rev 6 Table 9
#end if;
if it is translated using this Makefile fragment
src/i2c1-device.adb: ../i2c/src/i2c-device.adb.pp $(DEFINITION)
gnatprep \
-c -v \
$< \
$@ \
$(DEFINITION)
where the file $(DEFINITION)contains
SCL_Enable := GPIOBEN
SCL_GPIO := GPIO.GPIOB_Periph
SCL_Pin := 8
leads to
RCC.RCC_Periph.AHB1ENR := (GPIOBEN => 1, others => <>);
GPIO.GPIOB_Periph.MODER.Arr (8) := 2; -- alternate function
GPIO.GPIOB_Periph.OTYPER.OT.Arr (8) := 1; -- open drain
GPIO.GPIOB_Periph.OSPEEDR.Arr (8) := 1; -- medium speed
GPIO.GPIOB_Periph.PUPDR.Arr (8) := 0; -- nopullup, no pulldown
--!
--! $SCL_GPIO.AFRL.Arr ($SCL_Pin) := 4; -- DocID022152 Rev 6 Table 9
--!
GPIO.GPIOB_Periph.AFRH.Arr (8) := 4; -- DocID022152 Rev 6 Table 9
--!
source
share