#pragma once #include #include #include "../TargetSignature.hpp" #include "Family.hpp" namespace Bloom::Targets::Microchip::Avr::Avr8Bit { /** * Holds all parameters that would be required for configuring a debug tool, for an AVR8 target. * * This can usually be extracted from the AVR8 TDF. * See Targets::Microchip::Avr::Avr8Bit::TargetDescription::TargetDescriptionFile::getTargetParameters(); */ struct TargetParameters { std::optional mappedIoSegmentStartAddress; std::optional mappedIoSegmentSize; std::optional bootSectionStartAddress; std::optional gpRegisterStartAddress; std::optional gpRegisterSize; std::optional flashPageSize; std::optional flashSize; std::optional flashStartAddress; std::optional ramStartAddress; std::optional ramSize; std::optional eepromStartAddress; std::optional eepromSize; std::optional eepromPageSize; std::optional eepromAddressRegisterHigh; std::optional eepromAddressRegisterLow; std::optional eepromDataRegisterAddress; std::optional eepromControlRegisterAddress; std::optional ocdRevision; std::optional ocdDataRegister; std::optional statusRegisterStartAddress; std::optional statusRegisterSize; std::optional stackPointerRegisterLowAddress; std::optional stackPointerRegisterSize; std::optional spmcRegisterStartAddress; std::optional osccalAddress; // XMega/PDI/UPDI specific target params std::optional appSectionPdiOffset; std::optional bootSectionSize; std::optional bootSectionPdiOffset; std::optional eepromPdiOffset; std::optional ramPdiOffset; std::optional fuseRegistersPdiOffset; std::optional lockRegistersPdiOffset; std::optional userSignaturesPdiOffset; std::optional productSignaturesPdiOffset; std::optional nvmBaseAddress; // UPDI specific target params std::optional ocdModuleAddress; std::optional programMemoryUpdiStartAddress; std::optional signatureSegmentStartAddress; std::optional signatureSegmentSize; std::optional fuseSegmentStartAddress; std::optional fuseSegmentSize; std::optional lockbitsSegmentStartAddress; }; }