diff options
Diffstat (limited to 'stmhal/boards')
| -rwxr-xr-x | stmhal/boards/make-pins.py | 70 | ||||
| -rw-r--r-- | stmhal/boards/stm32f4xx_af.csv (renamed from stmhal/boards/stm32f4xx-af.csv) | 0 | ||||
| -rw-r--r-- | stmhal/boards/stm32f4xx_prefix.c (renamed from stmhal/boards/stm32f4xx-prefix.c) | 5 |
3 files changed, 68 insertions, 7 deletions
diff --git a/stmhal/boards/make-pins.py b/stmhal/boards/make-pins.py index e3a3f583a..cc580f7cd 100755 --- a/stmhal/boards/make-pins.py +++ b/stmhal/boards/make-pins.py @@ -72,6 +72,9 @@ class AlternateFunction(object): return self.func return '{:s}{:d}'.format(self.func, self.fn_num) + def mux_name(self): + return 'AF{:d}_{:s}'.format(self.idx, self.ptr()) + def print(self): """Prints the C representation of this AF.""" if self.supported: @@ -84,6 +87,9 @@ class AlternateFunction(object): print('({:2d}, {:8s}, {:2d}, {:10s}, {:8s}), // {:s}'.format(self.idx, self.func, fn_num, self.pin_type, self.ptr(), self.af_str)) + def qstr_list(self): + return [self.mux_name()] + class Pin(object): """Holds the information associated with a pin.""" @@ -170,6 +176,14 @@ class Pin(object): hdr_file.write('extern const pin_af_obj_t pin_{:s}_af[];\n'. format(self.cpu_pin_name())) + def qstr_list(self): + result = [] + for alt_fn in self.alt_fn: + if alt_fn.is_supported(): + result += alt_fn.qstr_list() + return result + + class NamedPin(object): def __init__(self, name, pin): @@ -225,13 +239,13 @@ class Pins(object): self.board_pins.append(NamedPin(row[0], pin)) def print_named(self, label, named_pins): - print('const pin_named_pin_t pin_{:s}_pins[] = {{'.format(label)) + print('STATIC const mp_map_elem_t pin_{:s}_pins_locals_dict_table[] = {{'.format(label)) for named_pin in named_pins: pin = named_pin.pin() if pin.is_board_pin(): - print(' {{ "{:s}", &pin_{:s} }},'.format(named_pin.name(), pin.cpu_pin_name())) - print(' { NULL, NULL }') + print(' {{ MP_OBJ_NEW_QSTR(MP_QSTR_{:s}), (mp_obj_t)&pin_{:s} }},'.format(named_pin.name(), pin.cpu_pin_name())) print('};') + print('MP_DEFINE_CONST_DICT(pin_{:s}_pins_locals_dict, pin_{:s}_pins_locals_dict_table);'.format(label, label)); def print(self): for named_pin in self.cpu_pins: @@ -269,6 +283,38 @@ class Pins(object): hdr_file.write('extern const pin_obj_t * const pin_adc2[];\n') hdr_file.write('extern const pin_obj_t * const pin_adc3[];\n') + def print_qstr(self, qstr_filename): + with open(qstr_filename, 'wt') as qstr_file: + qstr_set = set([]) + for named_pin in self.cpu_pins: + pin = named_pin.pin() + if pin.is_board_pin(): + qstr_set |= set(pin.qstr_list()) + qstr_set |= set([named_pin.name()]) + for named_pin in self.board_pins: + qstr_set |= set([named_pin.name()]) + for qstr in sorted(qstr_set): + print('Q({})'.format(qstr), file=qstr_file) + + def print_af_hdr(self, af_const_filename): + with open(af_const_filename, 'wt') as af_const_file: + af_hdr_set = set([]) + mux_name_width = 0 + for named_pin in self.cpu_pins: + pin = named_pin.pin() + if pin.is_board_pin(): + for af in pin.alt_fn: + if af.is_supported(): + mux_name = af.mux_name() + af_hdr_set |= set([mux_name]) + if len(mux_name) > mux_name_width: + mux_name_width = len(mux_name) + for mux_name in sorted(af_hdr_set): + key = 'MP_OBJ_NEW_QSTR(MP_QSTR_{}),'.format(mux_name) + val = 'MP_OBJ_NEW_SMALL_INT(GPIO_{})'.format(mux_name) + print(' { %-*s %s },' % (mux_name_width + 26, key, val), + file=af_const_file) + def main(): parser = argparse.ArgumentParser( @@ -280,7 +326,13 @@ def main(): "-a", "--af", dest="af_filename", help="Specifies the alternate function file for the chip", - default="stm32f4xx-af.csv" + default="stm32f4xx_af.csv" + ) + parser.add_argument( + "--af-const", + dest="af_const_filename", + help="Specifies header file for alternate function constants.", + default="build/pins_af_const.h" ) parser.add_argument( "-b", "--board", @@ -291,7 +343,13 @@ def main(): "-p", "--prefix", dest="prefix_filename", help="Specifies beginning portion of generated pins file", - default="stm32f4xx-prefix.c" + default="stm32f4xx_prefix.c" + ) + parser.add_argument( + "-q", "--qstr", + dest="qstr_filename", + help="Specifies name of generated qstr header file", + default="build/pins_qstr.h" ) parser.add_argument( "-r", "--hdr", @@ -323,6 +381,8 @@ def main(): pins.print_adc(2) pins.print_adc(3) pins.print_header(args.hdr_filename) + pins.print_qstr(args.qstr_filename) + pins.print_af_hdr(args.af_const_filename) if __name__ == "__main__": diff --git a/stmhal/boards/stm32f4xx-af.csv b/stmhal/boards/stm32f4xx_af.csv index b9a308a82..b9a308a82 100644 --- a/stmhal/boards/stm32f4xx-af.csv +++ b/stmhal/boards/stm32f4xx_af.csv diff --git a/stmhal/boards/stm32f4xx-prefix.c b/stmhal/boards/stm32f4xx_prefix.c index 3bbb6bda0..c20030172 100644 --- a/stmhal/boards/stm32f4xx-prefix.c +++ b/stmhal/boards/stm32f4xx_prefix.c @@ -1,4 +1,4 @@ -// stm32fxx-prefix.c becomes the initial portion of the generated pins file. +// stm32f4xx_prefix.c becomes the initial portion of the generated pins file. #include <stdio.h> #include <stdint.h> @@ -14,6 +14,7 @@ #define AF(af_idx, af_fn, af_unit, af_type, af_ptr) \ { \ { &pin_af_type }, \ + .name = MP_QSTR_AF ## af_idx ## _ ## af_fn ## af_unit, \ .idx = (af_idx), \ .fn = AF_FN_ ## af_fn, \ .unit = (af_unit), \ @@ -24,7 +25,7 @@ #define PIN(p_port, p_pin, p_num_af, p_af, p_adc_num, p_adc_channel) \ { \ { &pin_type }, \ - .name = #p_port #p_pin, \ + .name = MP_QSTR_ ## p_port ## p_pin, \ .port = PORT_ ## p_port, \ .pin = (p_pin), \ .num_af = (p_num_af), \ |
