Added PORT peripheral validation for AVR8 TDFs
This commit is contained in:
@@ -484,6 +484,18 @@ class Avr8TargetDescriptionFile extends TargetDescriptionFile
|
||||
}
|
||||
}
|
||||
|
||||
$portPeripheralModule = $this->peripheralModulesByName['port'] ?? null;
|
||||
if (empty($portPeripheralModule)) {
|
||||
$failures[] = 'PORT peripheral module not found.';
|
||||
|
||||
} else {
|
||||
foreach ($portPeripheralModule->instancesMappedByName as $portInstance) {
|
||||
if (empty($portInstance->signals)) {
|
||||
$failures[] = 'No signals defined for port ' . $portInstance->name . ' in PORT peripheral module.';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $failures;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
namespace Bloom\BuildScripts\TargetDescriptionFiles;
|
||||
|
||||
require_once __DIR__ . "/RegisterGroup.php";
|
||||
require_once __DIR__ . "/Signal.php";
|
||||
|
||||
class ModuleInstance
|
||||
{
|
||||
@@ -9,4 +10,7 @@ class ModuleInstance
|
||||
|
||||
/** @var RegisterGroup[] */
|
||||
public array $registerGroupsMappedByName = [];
|
||||
|
||||
/** @var Signal[] */
|
||||
public array $signals = [];
|
||||
}
|
||||
|
||||
9
build/scripts/TargetDescriptionFiles/Signal.php
Normal file
9
build/scripts/TargetDescriptionFiles/Signal.php
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace Bloom\BuildScripts\TargetDescriptionFiles;
|
||||
|
||||
class Signal
|
||||
{
|
||||
public ?string $padName = null;
|
||||
public ?string $function = null;
|
||||
public ?int $index = null;
|
||||
}
|
||||
@@ -9,6 +9,7 @@ require_once __DIR__ . "/AddressSpace.php";
|
||||
require_once __DIR__ . "/PropertyGroup.php";
|
||||
require_once __DIR__ . "/Module.php";
|
||||
require_once __DIR__ . "/PhysicalInterface.php";
|
||||
require_once __DIR__ . "/Signal.php";
|
||||
|
||||
class TargetDescriptionFile
|
||||
{
|
||||
@@ -256,6 +257,18 @@ class TargetDescriptionFile
|
||||
}
|
||||
}
|
||||
|
||||
$signalElements = $instanceElement->xpath('signals/signal');
|
||||
foreach ($signalElements as $signalElement) {
|
||||
$signalAttrs = $signalElement->attributes();
|
||||
$signal = new Signal();
|
||||
|
||||
$signal->padName = isset($signalAttrs['pad']) ? $signalAttrs['pad'] : null;
|
||||
$signal->function = isset($signalAttrs['function']) ? $signalAttrs['function'] : null;
|
||||
$signal->index = isset($signalAttrs['index']) ? $this->rawValueToInt($signalAttrs['index']) : null;
|
||||
|
||||
$moduleInstance->signals[] = $signal;
|
||||
}
|
||||
|
||||
$module->instancesMappedByName[strtolower($moduleInstance->name)] = $moduleInstance;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user