Fixed issue with AVR8 EEPROM address register loading from TDFs
This commit is contained in:
@@ -378,6 +378,20 @@ TargetParameters& Avr8::getTargetParameters() {
|
||||
this->targetParameters->eepromAddressRegisterLow = eepromAddressRegister->offset;
|
||||
this->targetParameters->eepromAddressRegisterHigh = (eepromAddressRegister->size == 2)
|
||||
? eepromAddressRegister->offset + 1 : eepromAddressRegister->offset;
|
||||
|
||||
} else {
|
||||
auto eepromAddressLowRegister = this->targetDescriptionFile->getEepromAddressLowRegister();
|
||||
if (eepromAddressLowRegister.has_value()) {
|
||||
this->targetParameters->eepromAddressRegisterLow = eepromAddressLowRegister->offset;
|
||||
auto eepromAddressHighRegister = this->targetDescriptionFile->getEepromAddressHighRegister();
|
||||
|
||||
if (eepromAddressHighRegister.has_value()) {
|
||||
this->targetParameters->eepromAddressRegisterHigh = eepromAddressHighRegister->offset;
|
||||
|
||||
} else {
|
||||
this->targetParameters->eepromAddressRegisterHigh = eepromAddressLowRegister->offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto eepromDataRegister = this->targetDescriptionFile->getEepromDataRegister();
|
||||
|
||||
@@ -634,6 +634,34 @@ std::optional<Register> TargetDescriptionFile::getEepromAddressRegister() const
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::optional<Register> TargetDescriptionFile::getEepromAddressLowRegister() const {
|
||||
auto eepromRegisterGroup = this->getEepromRegisterGroup();
|
||||
|
||||
if (eepromRegisterGroup.has_value()) {
|
||||
auto eepromAddressRegisterIt = eepromRegisterGroup->registersMappedByName.find("eearl");
|
||||
|
||||
if (eepromAddressRegisterIt != eepromRegisterGroup->registersMappedByName.end()) {
|
||||
return eepromAddressRegisterIt->second;
|
||||
}
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::optional<Register> TargetDescriptionFile::getEepromAddressHighRegister() const {
|
||||
auto eepromRegisterGroup = this->getEepromRegisterGroup();
|
||||
|
||||
if (eepromRegisterGroup.has_value()) {
|
||||
auto eepromAddressRegisterIt = eepromRegisterGroup->registersMappedByName.find("eearh");
|
||||
|
||||
if (eepromAddressRegisterIt != eepromRegisterGroup->registersMappedByName.end()) {
|
||||
return eepromAddressRegisterIt->second;
|
||||
}
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::optional<Register> TargetDescriptionFile::getEepromDataRegister() const {
|
||||
auto eepromRegisterGroup = this->getEepromRegisterGroup();
|
||||
|
||||
|
||||
@@ -121,6 +121,8 @@ namespace Bloom::Targets::TargetDescription
|
||||
std::optional<Register> getSpmcsRegister() const;
|
||||
std::optional<Register> getSpmcRegister() const;
|
||||
std::optional<Register> getEepromAddressRegister() const;
|
||||
std::optional<Register> getEepromAddressLowRegister() const;
|
||||
std::optional<Register> getEepromAddressHighRegister() const;
|
||||
std::optional<Register> getEepromDataRegister() const;
|
||||
std::optional<Register> getEepromControlRegister() const;
|
||||
std::vector<Variant> getVariants() const;
|
||||
|
||||
Reference in New Issue
Block a user