stm32/boards/make-pins.py: Allow a CPU pin to be hidden.
This change allows a CPU pin to be hidden from the user by prefixing it with a "-" in the pins.csv file for a board. It will still be available in C code, just not exposed to Python. Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
parent
e3eebc329f
commit
a6907c779a
@ -1,5 +1,49 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
"""Creates the pin file for the STM32F4xx."""
|
|
||||||
|
"""
|
||||||
|
Generates pin source files based on an MCU alternate-function definition (eg
|
||||||
|
stm32f405_af.csv) and a board-specific pin definition file, pins.csv.
|
||||||
|
|
||||||
|
The pins.csv file must contain lines of the form:
|
||||||
|
|
||||||
|
board,cpu
|
||||||
|
|
||||||
|
Where "board" is the user-facing name of the pin as specified by the particular
|
||||||
|
board layout and markings, and "cpu" is the corresponding name of the CPU/MCU
|
||||||
|
pin.
|
||||||
|
|
||||||
|
The "board" entry may be absent if the CPU pin has no additional name, and both
|
||||||
|
entries may start with "-" to hide them from the corresponding Python dict of
|
||||||
|
pins, and hence hide them from the user (but they are still accessible in C).
|
||||||
|
|
||||||
|
For example, take the following pins.csv file:
|
||||||
|
|
||||||
|
X1,PA0
|
||||||
|
-X2,PA1
|
||||||
|
X3,-PA2
|
||||||
|
-X4,-PA3
|
||||||
|
,PA4
|
||||||
|
,-PA5
|
||||||
|
|
||||||
|
The first row here configures:
|
||||||
|
- The CPU pin PA0 is labelled X1.
|
||||||
|
- The Python user can access both by the names Pin("X1") and Pin("A0").
|
||||||
|
- The Python user can access both by the members Pin.board.X1 and Pin.cpu.A0.
|
||||||
|
- In C code they are available as pyb_pin_X1 and pin_A0.
|
||||||
|
|
||||||
|
Prefixing the names with "-" hides them from the user. The following table
|
||||||
|
summarises the various possibilities:
|
||||||
|
|
||||||
|
pins.csv entry | board name | cpu name | C board name | C cpu name
|
||||||
|
---------------+------------+----------+--------------+-----------
|
||||||
|
X1,PA0 "X1" "A0" pyb_pin_X1 pin_A0
|
||||||
|
-X2,PA1 - "A1" pyb_pin_X2 pin_A1
|
||||||
|
X3,-PA2 "X3" - pyb_pin_X3 pin_A2
|
||||||
|
-X4,-PA3 - - pyb_pin_X4 pin_A3
|
||||||
|
,PA4 - "A4" - pin_A4
|
||||||
|
,-PA5 - - - pin_A5
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
@ -273,6 +317,9 @@ class NamedPin(object):
|
|||||||
self._name = name
|
self._name = name
|
||||||
self._pin = pin
|
self._pin = pin
|
||||||
|
|
||||||
|
def set_hidden(self, value):
|
||||||
|
self._is_hidden = value
|
||||||
|
|
||||||
def is_hidden(self):
|
def is_hidden(self):
|
||||||
return self._is_hidden
|
return self._is_hidden
|
||||||
|
|
||||||
@ -293,7 +340,7 @@ class Pins(object):
|
|||||||
for named_pin in self.cpu_pins:
|
for named_pin in self.cpu_pins:
|
||||||
pin = named_pin.pin()
|
pin = named_pin.pin()
|
||||||
if pin.port == port_num and pin.pin == pin_num:
|
if pin.port == port_num and pin.pin == pin_num:
|
||||||
return pin
|
return named_pin
|
||||||
|
|
||||||
def parse_af_file(self, filename, pinname_col, af_col):
|
def parse_af_file(self, filename, pinname_col, af_col):
|
||||||
with open(filename, "r") as csvfile:
|
with open(filename, "r") as csvfile:
|
||||||
@ -315,12 +362,19 @@ class Pins(object):
|
|||||||
with open(filename, "r") as csvfile:
|
with open(filename, "r") as csvfile:
|
||||||
rows = csv.reader(csvfile)
|
rows = csv.reader(csvfile)
|
||||||
for row in rows:
|
for row in rows:
|
||||||
|
cpu_pin_name = row[1]
|
||||||
|
cpu_pin_hidden = False
|
||||||
|
if cpu_pin_name.startswith("-"):
|
||||||
|
cpu_pin_name = cpu_pin_name[1:]
|
||||||
|
cpu_pin_hidden = True
|
||||||
try:
|
try:
|
||||||
(port_num, pin_num) = parse_port_pin(row[1])
|
(port_num, pin_num) = parse_port_pin(cpu_pin_name)
|
||||||
except:
|
except:
|
||||||
continue
|
continue
|
||||||
pin = self.find_pin(port_num, pin_num)
|
named_pin = self.find_pin(port_num, pin_num)
|
||||||
if pin:
|
if named_pin:
|
||||||
|
named_pin.set_hidden(cpu_pin_hidden)
|
||||||
|
pin = named_pin.pin()
|
||||||
pin.set_is_board_pin()
|
pin.set_is_board_pin()
|
||||||
if row[0]: # Only add board pins that have a name
|
if row[0]: # Only add board pins that have a name
|
||||||
self.board_pins.append(NamedPin(row[0], pin))
|
self.board_pins.append(NamedPin(row[0], pin))
|
||||||
|
Loading…
Reference in New Issue
Block a user