summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal/make-stmconst.py
diff options
context:
space:
mode:
Diffstat (limited to 'stmhal/make-stmconst.py')
-rw-r--r--stmhal/make-stmconst.py33
1 files changed, 27 insertions, 6 deletions
diff --git a/stmhal/make-stmconst.py b/stmhal/make-stmconst.py
index 79e69a3bf4..e9fbb477c9 100644
--- a/stmhal/make-stmconst.py
+++ b/stmhal/make-stmconst.py
@@ -111,16 +111,27 @@ def parse_file(filename):
return periphs, reg_defs
-def print_periph(periph_name, periph_val, needed_qstrs):
+def print_int_obj(val, needed_mpzs):
+ if -0x40000000 <= val < 0x40000000:
+ print('MP_OBJ_NEW_SMALL_INT(%#x)' % val, end='')
+ else:
+ print('(mp_obj_t)&mpz_%08x' % val, end='')
+ needed_mpzs.add(val)
+
+def print_periph(periph_name, periph_val, needed_qstrs, needed_mpzs):
qstr = periph_name.upper()
- print('{ MP_OBJ_NEW_QSTR(MP_QSTR_%s), MP_OBJ_NEW_SMALL_INT(%#x) },' % (qstr, periph_val))
+ print('{ MP_OBJ_NEW_QSTR(MP_QSTR_%s), ' % qstr, end='')
+ print_int_obj(periph_val, needed_mpzs)
+ print(' },')
needed_qstrs.add(qstr)
-def print_regs(reg_name, reg_defs, needed_qstrs):
+def print_regs(reg_name, reg_defs, needed_qstrs, needed_mpzs):
reg_name = reg_name.upper()
for r in reg_defs:
qstr = reg_name + '_' + r[0]
- print('{ MP_OBJ_NEW_QSTR(MP_QSTR_%s), MP_OBJ_NEW_SMALL_INT(%#x) }, // %s-bits, %s' % (qstr, r[1], r[2], r[3]))
+ print('{ MP_OBJ_NEW_QSTR(MP_QSTR_%s), ' % qstr, end='')
+ print_int_obj(r[1], needed_mpzs)
+ print(' }, // %s-bits, %s' % (r[2], r[3]))
needed_qstrs.add(qstr)
# This version of print regs groups registers together into submodules (eg GPIO submodule).
@@ -161,18 +172,21 @@ def main():
cmd_parser.add_argument('file', nargs=1, help='input file')
cmd_parser.add_argument('-q', '--qstr', dest='qstr_filename', default='build/stmconst_qstr.h',
help='Specified the name of the generated qstr header file')
+ cmd_parser.add_argument('--mpz', dest='mpz_filename', default='build/stmconst_mpz.h',
+ help='the destination file of the generated mpz header')
args = cmd_parser.parse_args()
periphs, reg_defs = parse_file(args.file[0])
modules = []
needed_qstrs = set()
+ needed_mpzs = set()
print("// Automatically generated from %s by make-stmconst.py" % args.file[0])
print("")
for periph_name, periph_val in periphs:
- print_periph(periph_name, periph_val, needed_qstrs)
+ print_periph(periph_name, periph_val, needed_qstrs, needed_mpzs)
for reg in (
'ADC',
@@ -203,7 +217,7 @@ def main():
'RNG',
):
if reg in reg_defs:
- print_regs(reg, reg_defs[reg], needed_qstrs)
+ print_regs(reg, reg_defs[reg], needed_qstrs, needed_mpzs)
#print_regs_as_submodules(reg, reg_defs[reg], modules, needed_qstrs)
#print("#define MOD_STM_CONST_MODULES \\")
@@ -216,5 +230,12 @@ def main():
for qstr in sorted(needed_qstrs):
print('Q({})'.format(qstr), file=qstr_file)
+ with open(args.mpz_filename, 'wt') as mpz_file:
+ for mpz in sorted(needed_mpzs):
+ assert 0 <= mpz <= 0xffffffff
+ print('STATIC const mp_obj_int_t mpz_%08x = {{&mp_type_int}, '
+ '{.neg=0, .fixed_dig=1, .alloc=2, .len=2, ' '.dig=(uint16_t[]){%#x, %#x}}};'
+ % (mpz, mpz & 0xffff, (mpz >> 16) & 0xffff), file=mpz_file)
+
if __name__ == "__main__":
main()