Add *_Msk for each bit field and avoid duplicate fields in the output file

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

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

@ -358,6 +358,7 @@ var ({{range .peripherals}}
} }
fmt.Fprintf(w, "\n") fmt.Fprintf(w, "\n")
} }
allBits := map[string]interface{}{}
for _, bitfield := range register.Bitfields { for _, bitfield := range register.Bitfields {
if bits.OnesCount(bitfield.Mask) == 1 { if bits.OnesCount(bitfield.Mask) == 1 {
fmt.Fprintf(w, "\t%s = 0x%x", bitfield.Name, bitfield.Mask) fmt.Fprintf(w, "\t%s = 0x%x", bitfield.Name, bitfield.Mask)
@ -365,19 +366,34 @@ var ({{range .peripherals}}
fmt.Fprintf(w, " // %s", bitfield.Caption) fmt.Fprintf(w, " // %s", bitfield.Caption)
} }
fmt.Fprintf(w, "\n") fmt.Fprintf(w, "\n")
fmt.Fprintf(w, "\t%s_Msk = 0x%x", bitfield.Name, bitfield.Mask)
if len(bitfield.Caption) != 0 {
fmt.Fprintf(w, " // %s", bitfield.Caption)
}
fmt.Fprintf(w, "\n")
allBits[bitfield.Name] = nil
} else { } else {
n := 0 n := 0
for i := uint(0); i < 8; i++ { for i := uint(0); i < 8; i++ {
if (bitfield.Mask>>i)&1 == 0 { if (bitfield.Mask>>i)&1 == 0 {
continue continue
} }
fmt.Fprintf(w, "\t%s%d = 0x%x", bitfield.Name, n, 1<<i) name := fmt.Sprintf("%s%d", bitfield.Name, n)
if _, ok := allBits[name]; !ok {
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)
} }
n++
fmt.Fprintf(w, "\n") fmt.Fprintf(w, "\n")
allBits[name] = nil
}
n++
} }
fmt.Fprintf(w, "\t%s_Msk = 0x%x", bitfield.Name, bitfield.Mask)
if len(bitfield.Caption) != 0 {
fmt.Fprintf(w, " // %s", bitfield.Caption)
}
fmt.Fprintf(w, "\n")
} }
} }
} }