Added PORT peripheral validation for AVR8 TDFs

This commit is contained in:
Nav
2021-06-08 00:31:15 +01:00
parent a42ce9e1e3
commit 23b54eb7c3
4 changed files with 38 additions and 0 deletions

View File

@@ -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; return $failures;
} }
} }

View File

@@ -2,6 +2,7 @@
namespace Bloom\BuildScripts\TargetDescriptionFiles; namespace Bloom\BuildScripts\TargetDescriptionFiles;
require_once __DIR__ . "/RegisterGroup.php"; require_once __DIR__ . "/RegisterGroup.php";
require_once __DIR__ . "/Signal.php";
class ModuleInstance class ModuleInstance
{ {
@@ -9,4 +10,7 @@ class ModuleInstance
/** @var RegisterGroup[] */ /** @var RegisterGroup[] */
public array $registerGroupsMappedByName = []; public array $registerGroupsMappedByName = [];
/** @var Signal[] */
public array $signals = [];
} }

View File

@@ -0,0 +1,9 @@
<?php
namespace Bloom\BuildScripts\TargetDescriptionFiles;
class Signal
{
public ?string $padName = null;
public ?string $function = null;
public ?int $index = null;
}

View File

@@ -9,6 +9,7 @@ require_once __DIR__ . "/AddressSpace.php";
require_once __DIR__ . "/PropertyGroup.php"; require_once __DIR__ . "/PropertyGroup.php";
require_once __DIR__ . "/Module.php"; require_once __DIR__ . "/Module.php";
require_once __DIR__ . "/PhysicalInterface.php"; require_once __DIR__ . "/PhysicalInterface.php";
require_once __DIR__ . "/Signal.php";
class TargetDescriptionFile 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; $module->instancesMappedByName[strtolower($moduleInstance->name)] = $moduleInstance;
} }