Browse Source
Pin numbers are now the MCU port numbers in the range: PA0..PA31: 0..31 PB0..PB31: 32..63 PC0..PC31: 64..95 PD0..PD31: 96..127 Pins can be denoted by the GPIO port number, the name as defined in pins.csv or a string in the form Pxnn, like "PA16" or "PD03". The pins.c and pins.h files are now obsolete. The pin objects are part of the AF table. As result of a simplification, the code now supports using pin names or numbers instead of pin objects for modules like UART, SPI, PWM, I2C, ADC, pininfo.pull/9753/head
robert-hh
2 years ago
committed by
Damien George
10 changed files with 221 additions and 288 deletions
@ -1,128 +0,0 @@ |
|||
#!/usr/bin/env python |
|||
"""Generates the pins file for the SAMD port.""" |
|||
|
|||
from __future__ import print_function |
|||
|
|||
import argparse |
|||
import sys |
|||
import csv |
|||
|
|||
pins_header_prefix = """// This file was automatically generated by make-pins.py |
|||
// |
|||
typedef struct _machine_pin_obj_t { |
|||
mp_obj_base_t base; |
|||
uint32_t id; |
|||
char *name; |
|||
} machine_pin_obj_t; |
|||
|
|||
int pin_find(mp_obj_t pin, const machine_pin_obj_t machine_pin_obj[], int table_size); |
|||
|
|||
""" |
|||
|
|||
led_header_prefix = """typedef struct _machine_led_obj_t { |
|||
mp_obj_base_t base; |
|||
uint32_t id; |
|||
char *name; |
|||
} machine_led_obj_t; |
|||
|
|||
""" |
|||
|
|||
|
|||
class Pins: |
|||
def __init__(self): |
|||
self.board_pins = [] # list of pin objects |
|||
self.board_leds = [] # list of led objects |
|||
|
|||
def parse_csv_file(self, filename): |
|||
with open(filename, "r") as csvfile: |
|||
rows = csv.reader(csvfile, skipinitialspace=True) |
|||
for row in rows: |
|||
# Pin numbers must start with "PIN_" |
|||
# LED numbers must start with "LED_" |
|||
if len(row) > 0: |
|||
if row[0].startswith("PIN_"): |
|||
if len(row) == 1: |
|||
self.board_pins.append([row[0], row[0][4:]]) |
|||
else: |
|||
self.board_pins.append([row[0], row[1]]) |
|||
elif row[0].startswith("LED_"): |
|||
self.board_leds.append(["PIN_" + row[0][4:], row[1]]) |
|||
elif row[0].startswith("-"): |
|||
self.board_pins.append(["-1", ""]) |
|||
|
|||
def print_pins(self, pins_filename): |
|||
with open(pins_filename, "wt") as pins_file: |
|||
pins_file.write("// This file was automatically generated by make-pins.py\n") |
|||
pins_file.write("//\n") |
|||
pins_file.write('#include "modmachine.h"\n') |
|||
pins_file.write('#include "sam.h"\n') |
|||
pins_file.write('#include "pins.h"\n\n') |
|||
|
|||
pins_file.write("const machine_pin_obj_t machine_pin_obj[] = {\n") |
|||
for pin in self.board_pins: |
|||
pins_file.write(" {{&machine_pin_type}, ") |
|||
pins_file.write(pin[0] + ', "' + pin[1]) |
|||
pins_file.write('"},\n') |
|||
pins_file.write("};\n") |
|||
|
|||
if self.board_leds: |
|||
pins_file.write("\nconst machine_led_obj_t machine_led_obj[] = {\n") |
|||
for pin in self.board_leds: |
|||
pins_file.write(" {{&machine_led_type}, ") |
|||
pins_file.write(pin[0] + ', "' + pin[1]) |
|||
pins_file.write('"},\n') |
|||
pins_file.write("};\n") |
|||
|
|||
def print_header(self, hdr_filename): |
|||
with open(hdr_filename, "wt") as hdr_file: |
|||
hdr_file.write(pins_header_prefix) |
|||
if self.board_leds: |
|||
hdr_file.write(led_header_prefix) |
|||
hdr_file.write( |
|||
"extern const machine_pin_obj_t machine_pin_obj[%d];\n" % len(self.board_pins) |
|||
) |
|||
if self.board_leds: |
|||
hdr_file.write( |
|||
"extern const machine_led_obj_t machine_led_obj[%d];\n" % len(self.board_leds) |
|||
) |
|||
|
|||
|
|||
def main(): |
|||
parser = argparse.ArgumentParser( |
|||
prog="make-pins.py", |
|||
usage="%(prog)s [options] [command]", |
|||
description="Generate board specific pin file", |
|||
) |
|||
parser.add_argument( |
|||
"-b", |
|||
"--board", |
|||
dest="csv_filename", |
|||
help="Specifies the pins.csv filename", |
|||
) |
|||
parser.add_argument( |
|||
"-p", |
|||
"--pins", |
|||
dest="pins_filename", |
|||
help="Specifies the name of the generated pins.c file", |
|||
) |
|||
parser.add_argument( |
|||
"-i", |
|||
"--inc", |
|||
dest="hdr_filename", |
|||
help="Specifies name of generated pin header file", |
|||
) |
|||
args = parser.parse_args(sys.argv[1:]) |
|||
|
|||
pins = Pins() |
|||
|
|||
if args.csv_filename: |
|||
pins.parse_csv_file(args.csv_filename) |
|||
|
|||
if args.pins_filename: |
|||
pins.print_pins(args.pins_filename) |
|||
|
|||
pins.print_header(args.hdr_filename) |
|||
|
|||
|
|||
if __name__ == "__main__": |
|||
main() |
Loading…
Reference in new issue