Made AVR8 Physical Interfaces more generic (to include non-debug interfaces such as ISP)
This commit is contained in:
@@ -579,6 +579,7 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit
|
|||||||
|
|
||||||
this->name = this->targetDescriptionFile->getTargetName();
|
this->name = this->targetDescriptionFile->getTargetName();
|
||||||
this->family = this->targetDescriptionFile->getFamily();
|
this->family = this->targetDescriptionFile->getFamily();
|
||||||
|
this->supportedPhysicalInterfaces = this->targetDescriptionFile->getSupportedPhysicalInterfaces();
|
||||||
|
|
||||||
this->targetParameters = this->targetDescriptionFile->getTargetParameters();
|
this->targetParameters = this->targetDescriptionFile->getTargetParameters();
|
||||||
this->padDescriptorsByName = this->targetDescriptionFile->getPadDescriptorsMappedByName();
|
this->padDescriptorsByName = this->targetDescriptionFile->getPadDescriptorsMappedByName();
|
||||||
@@ -736,8 +737,7 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& supportedPhysicalInterfaces = this->targetDescriptionFile->getSupportedDebugPhysicalInterfaces();
|
if (!this->supportedPhysicalInterfaces.contains(PhysicalInterface::DEBUG_WIRE)) {
|
||||||
if (!supportedPhysicalInterfaces.contains(PhysicalInterface::DEBUG_WIRE)) {
|
|
||||||
throw Exception(
|
throw Exception(
|
||||||
"Target does not support debugWire physical interface - check target configuration or "
|
"Target does not support debugWire physical interface - check target configuration or "
|
||||||
"report this issue via " + Paths::homeDomainName() + "/report-issue"
|
"report this issue via " + Paths::homeDomainName() + "/report-issue"
|
||||||
|
|||||||
@@ -140,6 +140,8 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit
|
|||||||
std::optional<Family> family;
|
std::optional<Family> family;
|
||||||
std::optional<TargetDescription::TargetDescriptionFile> targetDescriptionFile;
|
std::optional<TargetDescription::TargetDescriptionFile> targetDescriptionFile;
|
||||||
|
|
||||||
|
std::set<PhysicalInterface> supportedPhysicalInterfaces;
|
||||||
|
|
||||||
std::optional<TargetParameters> targetParameters;
|
std::optional<TargetParameters> targetParameters;
|
||||||
std::map<std::string, PadDescriptor> padDescriptorsByName;
|
std::map<std::string, PadDescriptor> padDescriptorsByName;
|
||||||
std::map<int, TargetVariant> targetVariantsById;
|
std::map<int, TargetVariant> targetVariantsById;
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit
|
|||||||
{
|
{
|
||||||
enum class PhysicalInterface: std::uint8_t
|
enum class PhysicalInterface: std::uint8_t
|
||||||
{
|
{
|
||||||
|
ISP,
|
||||||
JTAG,
|
JTAG,
|
||||||
DEBUG_WIRE,
|
DEBUG_WIRE,
|
||||||
PDI,
|
PDI,
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit::TargetDescription
|
|||||||
void TargetDescriptionFile::init(const QDomDocument& xml) {
|
void TargetDescriptionFile::init(const QDomDocument& xml) {
|
||||||
Targets::TargetDescription::TargetDescriptionFile::init(xml);
|
Targets::TargetDescription::TargetDescriptionFile::init(xml);
|
||||||
|
|
||||||
this->loadDebugPhysicalInterfaces();
|
this->loadSupportedPhysicalInterfaces();
|
||||||
this->loadPadDescriptors();
|
this->loadPadDescriptors();
|
||||||
this->loadTargetVariants();
|
this->loadTargetVariants();
|
||||||
this->loadTargetRegisterDescriptors();
|
this->loadTargetRegisterDescriptors();
|
||||||
@@ -270,7 +270,7 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit::TargetDescription
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& supportedPhysicalInterfaces = this->getSupportedDebugPhysicalInterfaces();
|
const auto& supportedPhysicalInterfaces = this->getSupportedPhysicalInterfaces();
|
||||||
|
|
||||||
if (supportedPhysicalInterfaces.contains(PhysicalInterface::DEBUG_WIRE)
|
if (supportedPhysicalInterfaces.contains(PhysicalInterface::DEBUG_WIRE)
|
||||||
|| supportedPhysicalInterfaces.contains(PhysicalInterface::JTAG)
|
|| supportedPhysicalInterfaces.contains(PhysicalInterface::JTAG)
|
||||||
@@ -396,17 +396,18 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit::TargetDescription
|
|||||||
return this->getFuseBitsDescriptorByName("spien");
|
return this->getFuseBitsDescriptorByName("spien");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TargetDescriptionFile::loadDebugPhysicalInterfaces() {
|
void TargetDescriptionFile::loadSupportedPhysicalInterfaces() {
|
||||||
auto interfaceNamesToInterfaces = std::map<std::string, PhysicalInterface>({
|
auto interfaceNamesToInterfaces = std::map<std::string, PhysicalInterface>({
|
||||||
{"updi", PhysicalInterface::UPDI},
|
{"updi", PhysicalInterface::UPDI},
|
||||||
{"debugwire", PhysicalInterface::DEBUG_WIRE},
|
{"debugwire", PhysicalInterface::DEBUG_WIRE},
|
||||||
{"jtag", PhysicalInterface::DEBUG_WIRE},
|
{"jtag", PhysicalInterface::DEBUG_WIRE},
|
||||||
{"pdi", PhysicalInterface::PDI},
|
{"pdi", PhysicalInterface::PDI},
|
||||||
|
{"isp", PhysicalInterface::ISP},
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const auto& [interfaceName, interface]: this->interfacesByName) {
|
for (const auto& [interfaceName, interface]: this->interfacesByName) {
|
||||||
if (interfaceNamesToInterfaces.contains(interfaceName)) {
|
if (interfaceNamesToInterfaces.contains(interfaceName)) {
|
||||||
this->supportedDebugPhysicalInterfaces.insert(interfaceNamesToInterfaces.at(interfaceName));
|
this->supportedPhysicalInterfaces.insert(interfaceNamesToInterfaces.at(interfaceName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,8 +106,8 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit::TargetDescription
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] const auto& getSupportedDebugPhysicalInterfaces() const {
|
[[nodiscard]] const auto& getSupportedPhysicalInterfaces() const {
|
||||||
return this->supportedDebugPhysicalInterfaces;
|
return this->supportedPhysicalInterfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -161,7 +161,7 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit::TargetDescription
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
std::set<PhysicalInterface> supportedDebugPhysicalInterfaces;
|
std::set<PhysicalInterface> supportedPhysicalInterfaces;
|
||||||
|
|
||||||
std::map<std::string, PadDescriptor> padDescriptorsByName;
|
std::map<std::string, PadDescriptor> padDescriptorsByName;
|
||||||
std::map<int, TargetVariant> targetVariantsById;
|
std::map<int, TargetVariant> targetVariantsById;
|
||||||
@@ -169,9 +169,9 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit::TargetDescription
|
|||||||
std::map<TargetRegisterType, TargetRegisterDescriptors> targetRegisterDescriptorsByType;
|
std::map<TargetRegisterType, TargetRegisterDescriptors> targetRegisterDescriptorsByType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populates this->supportedDebugPhysicalInterfaces with physical interfaces defined in the TDF.
|
* Populates this->supportedPhysicalInterfaces with physical interfaces defined in the TDF.
|
||||||
*/
|
*/
|
||||||
void loadDebugPhysicalInterfaces();
|
void loadSupportedPhysicalInterfaces();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a collection of PadDescriptor objects from data in the TDF and populates this->padDescriptorsByName.
|
* Generates a collection of PadDescriptor objects from data in the TDF and populates this->padDescriptorsByName.
|
||||||
|
|||||||
Reference in New Issue
Block a user