You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 年之前
12345678910111213141516171819202122232425
  1. #!/usr/bin/env python
  2. import sys
  3. import yaml
  4. registers = yaml.load(open(sys.argv[1], 'r'))
  5. for register_name, register in registers.iteritems():
  6. print('/* --- %s values %s */' % (register_name, '-' * (50 - len(register_name))))
  7. print
  8. fields = register['fields']
  9. #for field_name, field in sorted(fields.items(), lambda x, y: cmp(x[1]['lsb'], y[1]['lsb'])):
  10. for field_name, field in fields.items():
  11. mask_bits = (1 << field['width']) - 1
  12. print('/* %s: %s */' % (field_name, field['description']))
  13. print('#define %s_%s_SHIFT (%d)' % (
  14. register_name, field_name, field['lsb'],
  15. ))
  16. print('#define %s_%s_MASK (0x%x << %s_%s_SHIFT)' % (
  17. register_name, field_name, mask_bits, register_name, field_name,
  18. ))
  19. print('#define %s_%s(x) ((x) << %s_%s_SHIFT)' % (
  20. register_name, field_name, register_name, field_name,
  21. ))
  22. print