From 696e7462794a01661e33924cdbb35c8287618c97 Mon Sep 17 00:00:00 2001 From: Nav Date: Wed, 16 Mar 2022 17:13:40 +0000 Subject: [PATCH] Added target power cycling post AVR8 DWEN fuse bit update --- src/Targets/Microchip/AVR/AVR8/Avr8.cpp | 11 +++++++++++ src/Targets/Microchip/AVR/AVR8/Avr8.hpp | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/Targets/Microchip/AVR/AVR8/Avr8.cpp b/src/Targets/Microchip/AVR/AVR8/Avr8.cpp index 8a998ec7..e72fa4d8 100644 --- a/src/Targets/Microchip/AVR/AVR8/Avr8.cpp +++ b/src/Targets/Microchip/AVR/AVR8/Avr8.cpp @@ -153,6 +153,17 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit ); this->writeDwenFuseBit(true); + // If the debug tool provides a TargetPowerManagementInterface, attempt to cycle the target power + if (this->targetPowerManagementInterface != nullptr) { + Logger::info("Cycling target power"); + Logger::debug("Disabling target power"); + this->targetPowerManagementInterface->disableTargetPower(); + Logger::debug("Holding power off for ~250 ms"); + std::this_thread::sleep_for(std::chrono::milliseconds(250)); + Logger::debug("Enabling target power"); + this->targetPowerManagementInterface->enableTargetPower(); + } + } catch (const Exception& exception) { throw Exception( "Failed to access/update DWEN fuse bit via ISP interface - " + exception.getMessage() diff --git a/src/Targets/Microchip/AVR/AVR8/Avr8.hpp b/src/Targets/Microchip/AVR/AVR8/Avr8.hpp index 207ba273..2d986630 100644 --- a/src/Targets/Microchip/AVR/AVR8/Avr8.hpp +++ b/src/Targets/Microchip/AVR/AVR8/Avr8.hpp @@ -56,6 +56,7 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit } void setDebugTool(DebugTool* debugTool) override { + this->targetPowerManagementInterface = debugTool->getTargetPowerManagementInterface(); this->avr8DebugInterface = debugTool->getAvr8DebugInterface(); this->avrIspInterface = debugTool->getAvrIspInterface(); } @@ -122,6 +123,7 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit ) override; protected: + DebugToolDrivers::TargetInterfaces::TargetPowerManagementInterface* targetPowerManagementInterface = nullptr; DebugToolDrivers::TargetInterfaces::Microchip::Avr::Avr8::Avr8DebugInterface* avr8DebugInterface = nullptr; DebugToolDrivers::TargetInterfaces::Microchip::Avr::AvrIspInterface* avrIspInterface = nullptr;