From 67e33ac30e51af2980efbf69817530c659785165 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Wed, 12 Sep 2018 22:06:42 +0200 Subject: [PATCH] gen-device-svd: add _Pos and _Msk fields Without these extra fields, it is impossible to read/write some register bits correctly. --- gen-device-svd.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gen-device-svd.py b/gen-device-svd.py index 960b0fc1f..3103ad621 100755 --- a/gen-device-svd.py +++ b/gen-device-svd.py @@ -123,6 +123,18 @@ def parseSVDRegister(peripheralName, regEl, baseAddress, namePrefix=''): continue fieldName = getText(fieldEl.getElementsByTagName('name')[0]) descrEls = fieldEl.getElementsByTagName('description') + lsb = int(getText(fieldEl.getElementsByTagName('lsb')[0])) + msb = int(getText(fieldEl.getElementsByTagName('msb')[0])) + fields.append({ + 'name': '{}_{}{}_{}_Pos'.format(peripheralName, namePrefix, regName, fieldName), + 'description': 'Position of %s field.' % fieldName, + 'value': lsb, + }) + fields.append({ + 'name': '{}_{}{}_{}_Msk'.format(peripheralName, namePrefix, regName, fieldName), + 'description': 'Bit mask of %s field.' % fieldName, + 'value': (0xffffffff >> (31 - (msb - lsb))) << lsb, + }) for enumEl in fieldEl.getElementsByTagName('enumeratedValue'): enumName = getText(enumEl.getElementsByTagName('name')[0]) enumDescription = getText(enumEl.getElementsByTagName('description')[0])