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;
 }
Beispiel #2
0
 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);
         }
     }
 }
Beispiel #5
0
 private bool HitInTheRegisterDictionary(out SVDRegister tmpRegister, ulong offset, int countOfBytes)
 {
     return(registerDictionary.TryGetValue(offset, out tmpRegister) && tmpRegister.Address == offset && tmpRegister.SizeInBytes == countOfBytes);
 }