Fixed issue with AVR8 EEPROM address register loading from TDFs

This commit is contained in:
Nav
2021-06-05 22:35:24 +01:00
parent 0948135c21
commit 91b40133a1
3 changed files with 44 additions and 0 deletions

View File

@@ -378,6 +378,20 @@ TargetParameters& Avr8::getTargetParameters() {
this->targetParameters->eepromAddressRegisterLow = eepromAddressRegister->offset; this->targetParameters->eepromAddressRegisterLow = eepromAddressRegister->offset;
this->targetParameters->eepromAddressRegisterHigh = (eepromAddressRegister->size == 2) this->targetParameters->eepromAddressRegisterHigh = (eepromAddressRegister->size == 2)
? eepromAddressRegister->offset + 1 : eepromAddressRegister->offset; ? 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(); auto eepromDataRegister = this->targetDescriptionFile->getEepromDataRegister();

View File

@@ -634,6 +634,34 @@ std::optional<Register> TargetDescriptionFile::getEepromAddressRegister() const
return std::nullopt; 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 { std::optional<Register> TargetDescriptionFile::getEepromDataRegister() const {
auto eepromRegisterGroup = this->getEepromRegisterGroup(); auto eepromRegisterGroup = this->getEepromRegisterGroup();

View File

@@ -121,6 +121,8 @@ namespace Bloom::Targets::TargetDescription
std::optional<Register> getSpmcsRegister() const; std::optional<Register> getSpmcsRegister() const;
std::optional<Register> getSpmcRegister() const; std::optional<Register> getSpmcRegister() const;
std::optional<Register> getEepromAddressRegister() const; std::optional<Register> getEepromAddressRegister() const;
std::optional<Register> getEepromAddressLowRegister() const;
std::optional<Register> getEepromAddressHighRegister() const;
std::optional<Register> getEepromDataRegister() const; std::optional<Register> getEepromDataRegister() const;
std::optional<Register> getEepromControlRegister() const; std::optional<Register> getEepromControlRegister() const;
std::vector<Variant> getVariants() const; std::vector<Variant> getVariants() const;