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