Merge duplicate registers into a single record and merge they bitfields.

Этот коммит содержится в:
Dmitriy 2021-11-29 16:26:55 -05:00 коммит произвёл Ron Evans
родитель d2963b153e
коммит c35ce761aa

Просмотреть файл

@ -213,12 +213,15 @@ func readATDF(path string) (*Device, error) {
}) })
} }
if _, ok := allRegisters[regEl.Name]; ok { if firstReg, ok := allRegisters[regEl.Name]; ok {
firstReg := allRegisters[regEl.Name] // merge bit fields with previous register
for i := 0; i < len(firstReg.peripheral.Registers); i++ { merged := append(firstReg.Bitfields, reg.Bitfields...)
if firstReg.peripheral.Registers[i] == firstReg { firstReg.Bitfields = make([]Bitfield, 0, len(merged))
firstReg.peripheral.Registers = append(firstReg.peripheral.Registers[:i], firstReg.peripheral.Registers[i+1:]...) m := make(map[string]interface{})
break for _, field := range merged {
if _, ok := m[field.Name]; !ok {
m[field.Name] = nil
firstReg.Bitfields = append(firstReg.Bitfields, field)
} }
} }
continue continue
@ -381,10 +384,10 @@ var ({{range .peripherals}}
name := fmt.Sprintf("%s%d", bitfield.Name, n) name := fmt.Sprintf("%s%d", bitfield.Name, n)
if _, ok := allBits[name]; !ok { if _, ok := allBits[name]; !ok {
fmt.Fprintf(w, "\t%s = 0x%x", name, 1<<i) fmt.Fprintf(w, "\t%s = 0x%x", name, 1<<i)
if len(bitfield.Caption) != 0 { if len(bitfield.Caption) != 0 {
fmt.Fprintf(w, " // %s", bitfield.Caption) fmt.Fprintf(w, " // %s", bitfield.Caption)
} }
fmt.Fprintf(w, "\n") fmt.Fprintf(w, "\n")
allBits[name] = nil allBits[name] = nil
} }
n++ n++