pico_examples_2.0.0_cd57c29a/blog/03-realtime-blink/src/main.adb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
with RP2040_SVD.RESETS;     use RP2040_SVD.RESETS;
with RP2040_SVD.IO_BANK0;   use RP2040_SVD.IO_BANK0;
with RP2040_SVD.PADS_BANK0; use RP2040_SVD.PADS_BANK0;
with RP2040_SVD.SIO;        use RP2040_SVD.SIO;
with RP2040_SVD.PPB;        use RP2040_SVD.PPB;
with Ada.Real_Time;         use Ada.Real_Time;

procedure Main is
    Pin_Mask   : constant GPIO_OUT_GPIO_OUT_Field := 16#0200_0000#;
    Next_Blink : Time := Clock;
begin
    RESETS_Periph.RESET.io_bank0 := False;
    RESETS_Periph.RESET.pads_bank0 := False;
    while not RESETS_Periph.RESET_DONE.io_bank0 or else
         not RESETS_Periph.RESET_DONE.pads_bank0 loop
      null;
    end loop;

    --  output disable off
    PADS_BANK0_Periph.GPIO25.OD := False;
    --  input enable off
    PADS_BANK0_Periph.GPIO25.IE := False;

    --  function select
    IO_BANK0_Periph.GPIO25_CTRL.FUNCSEL := sio_25;

     --  output enable
    SIO_Periph.GPIO_OE_SET.GPIO_OE_SET := Pin_Mask;

    loop
       SIO_Periph.GPIO_OUT_XOR.GPIO_OUT_XOR := Pin_Mask;
       delay until Next_Blink;
       Next_Blink := Next_Blink + Seconds (1);
    end loop;
end Main;