From c35ce761aaee4a602a20b3414437880875d00b54 Mon Sep 17 00:00:00 2001 From: Dmitriy Date: Mon, 29 Nov 2021 16:26:55 -0500 Subject: [PATCH] Merge duplicate registers into a single record and merge they bitfields. --- tools/gen-device-avr/gen-device-avr.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/tools/gen-device-avr/gen-device-avr.go b/tools/gen-device-avr/gen-device-avr.go index 2fd040b9..cdcf9112 100755 --- a/tools/gen-device-avr/gen-device-avr.go +++ b/tools/gen-device-avr/gen-device-avr.go @@ -213,12 +213,15 @@ func readATDF(path string) (*Device, error) { }) } - if _, ok := allRegisters[regEl.Name]; ok { - firstReg := allRegisters[regEl.Name] - for i := 0; i < len(firstReg.peripheral.Registers); i++ { - if firstReg.peripheral.Registers[i] == firstReg { - firstReg.peripheral.Registers = append(firstReg.peripheral.Registers[:i], firstReg.peripheral.Registers[i+1:]...) - break + if firstReg, ok := allRegisters[regEl.Name]; ok { + // merge bit fields with previous register + merged := append(firstReg.Bitfields, reg.Bitfields...) + firstReg.Bitfields = make([]Bitfield, 0, len(merged)) + m := make(map[string]interface{}) + for _, field := range merged { + if _, ok := m[field.Name]; !ok { + m[field.Name] = nil + firstReg.Bitfields = append(firstReg.Bitfields, field) } } continue @@ -381,10 +384,10 @@ var ({{range .peripherals}} name := fmt.Sprintf("%s%d", bitfield.Name, n) if _, ok := allBits[name]; !ok { fmt.Fprintf(w, "\t%s = 0x%x", name, 1<