You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
4.2 KiB
98 lines
4.2 KiB
------------------------------------------------------------------------------
|
|
-- --
|
|
-- Copyright (C) 2017-2020, AdaCore --
|
|
-- --
|
|
-- Redistribution and use in source and binary forms, with or without --
|
|
-- modification, are permitted provided that the following conditions are --
|
|
-- met: --
|
|
-- 1. Redistributions of source code must retain the above copyright --
|
|
-- notice, this list of conditions and the following disclaimer. --
|
|
-- 2. Redistributions in binary form must reproduce the above copyright --
|
|
-- notice, this list of conditions and the following disclaimer in --
|
|
-- the documentation and/or other materials provided with the --
|
|
-- distribution. --
|
|
-- 3. Neither the name of the copyright holder nor the names of its --
|
|
-- contributors may be used to endorse or promote products derived --
|
|
-- from this software without specific prior written permission. --
|
|
-- --
|
|
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS --
|
|
-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT --
|
|
-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR --
|
|
-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT --
|
|
-- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, --
|
|
-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT --
|
|
-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --
|
|
-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --
|
|
-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --
|
|
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE --
|
|
-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
|
|
-- --
|
|
------------------------------------------------------------------------------
|
|
|
|
with nRF.GPIO; use nRF.GPIO;
|
|
|
|
package MicroBit.IOs is
|
|
|
|
type Pin_Id is range 0 .. 20;
|
|
|
|
type IO_Features is (Digital, Analog, Touch);
|
|
|
|
function Supports (Pin : Pin_Id; Feature : IO_Features) return Boolean is
|
|
(case Feature is
|
|
when Digital => (case Pin is
|
|
when 0 .. 16 | 19 .. 20 => True,
|
|
when others => False),
|
|
when Analog => (case Pin is
|
|
when 0 .. 4 | 10 => True,
|
|
when others => False),
|
|
when Touch => (case Pin is
|
|
when 0 | 1 | 2 => True,
|
|
when others => False));
|
|
|
|
procedure Set (Pin : Pin_Id; Value : Boolean)
|
|
with Pre => Supports (Pin, Digital);
|
|
|
|
function Set (Pin : Pin_Id) return Boolean
|
|
with Pre => Supports (Pin, Digital);
|
|
|
|
type Analog_Value is range 0 .. 1023;
|
|
|
|
procedure Set_Analog_Period_Us (Period : Natural);
|
|
-- Set the period (in microseconds) of the PWM signal for all analog output
|
|
-- pins.
|
|
|
|
procedure Write (Pin : Pin_Id; Value : Analog_Value)
|
|
with Pre => Supports (Pin, Analog);
|
|
|
|
function Analog (Pin : Pin_Id) return Analog_Value
|
|
with Pre => Supports (Pin, Analog);
|
|
-- Read the voltagle applied to the pin. 0 means 0V 1023 means 3.3V
|
|
|
|
private
|
|
|
|
-- Mapping between pin id and GPIO_Points
|
|
|
|
Points : array (Pin_Id) of GPIO_Point :=
|
|
(0 => MB_P0,
|
|
1 => MB_P1,
|
|
2 => MB_P2,
|
|
3 => MB_P3,
|
|
4 => MB_P4,
|
|
5 => MB_P5,
|
|
6 => MB_P6,
|
|
7 => MB_P7,
|
|
8 => MB_P8,
|
|
9 => MB_P9,
|
|
10 => MB_P10,
|
|
11 => MB_P11,
|
|
12 => MB_P12,
|
|
13 => MB_P13,
|
|
14 => MB_P14,
|
|
15 => MB_P15,
|
|
16 => MB_P16,
|
|
17 => MB_P0, -- There's no pin17, using P0 to fill in...
|
|
18 => MB_P0, -- There's no pin18, using P0 to fill in...
|
|
19 => MB_P19,
|
|
20 => MB_P20);
|
|
|
|
end MicroBit.IOs;
|
|
|