private int HowManyRequestsToTheRegister(SVDRegister register, int sizeInBytes, ulong offset, ulong tmpOffset) { var registerLastAddress = register.Address + register.SizeInBytes - 1; var lastReadingAddress = offset + checked((ulong)sizeInBytes) - 1; var diff = (int)(registerLastAddress - lastReadingAddress); int howManyTimes = (int)(registerLastAddress - tmpOffset + 1) - (diff > 0 ? diff : 0); return howManyTimes; }
public void MergeWithRegister(SVDRegister register) { Name = Name + "|" + register.Name; Access |= register.Access; if (!HasReadAccess && register.HasReadAccess) { ResetValue = register.ResetValue; } }
private void ScanRegister(XElement node, RegisterSettings defaultRegisterSettings, SVDPeripheral peripheral) { var address = CalculateOffset( defaultRegisterSettings.Address, GetAddressOffset(node) ); var newRegisterSettings = GetRegisterSettings(node, defaultRegisterSettings, address); var name = GetMandatoryField(node, "name"); var newRegister = new SVDRegister(node, name, newRegisterSettings, peripheral); peripheral.Registers.Add(newRegister); }
private void AppendRegisterToDictionary(SVDRegister register) { var bytes = register.SizeInBytes; for(var i = 0u; i < bytes; i++) { var address = register.Address + i; if(!registerDictionary.ContainsKey(address)) { registerDictionary.Add(address, register); } else { // There is a posibility to set the same address for various registers. // e.g. first register with a read-only permission access but second with a write-only. registerDictionary[address].MergeWithRegister(register); } } }
private bool HitInTheRegisterDictionary(out SVDRegister tmpRegister, ulong offset, int countOfBytes) { return(registerDictionary.TryGetValue(offset, out tmpRegister) && tmpRegister.Address == offset && tmpRegister.SizeInBytes == countOfBytes); }