From 23ccd88cdf9ffa20423e9a1f437fdfde5bbd4e20 Mon Sep 17 00:00:00 2001 From: glopesdev Date: Fri, 13 Mar 2026 10:54:01 +0000 Subject: [PATCH 1/2] Add regression test for optional interrupt number --- tests/Metadata/device.ios.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Metadata/device.ios.yml b/tests/Metadata/device.ios.yml index 061b8b2..f5e1ed9 100644 --- a/tests/Metadata/device.ios.yml +++ b/tests/Metadata/device.ios.yml @@ -153,7 +153,6 @@ ADC1_AVAILABLE: pinMode: pulldown triggerMode: toggle interruptPriority: "off" - interruptNumber: 0 description: ADC1 is available on hardware DI3: port: PORTH From 927e775e488f5ce71dd67be840fb89c215a6d1b9 Mon Sep 17 00:00:00 2001 From: glopesdev Date: Fri, 13 Mar 2026 16:15:17 +0000 Subject: [PATCH 2/2] Allow omitting interrupt number When interrupt priority is set to off we allow omitting the interrupt number. If generating implementation code for pins with enabled interrupt priority we raise an error if no number is specified. --- src/AppRegsImpl.tt | 4 +++- src/Firmware.cs | 3 +-- src/Interrupts.tt | 5 ++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/AppRegsImpl.tt b/src/AppRegsImpl.tt index 1c4df39..4c20622 100644 --- a/src/AppRegsImpl.tt +++ b/src/AppRegsImpl.tt @@ -72,8 +72,10 @@ if (inputPins.Count > 0) var pinInfo = pin.Value; var port = pinInfo.Port; var pinNumber = pinInfo.PinNumber.ToString(); - var interruptNumber = pinInfo.InterruptNumber; var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key); + if (!pinInfo.InterruptNumber.HasValue) + Error($"({pinName}) Interrupt number must be specified if interrupt priority is set."); + var interruptNumber = pinInfo.InterruptNumber.GetValueOrDefault(); var interruptPriority = TemplateHelper.GetFirmwareInterruptPriority(pinInfo.InterruptPriority); var descriptionPadding = new string(' ', 36 - port.Length - interruptPriority.Length - pinNumber.Length); #> diff --git a/src/Firmware.cs b/src/Firmware.cs index 235887c..d3e78b0 100644 --- a/src/Firmware.cs +++ b/src/Firmware.cs @@ -218,8 +218,7 @@ public class InputPinInfo : PortPinInfo /// /// Specifies the interrupt number associated with this pin. /// - [YamlMember(DefaultValuesHandling = DefaultValuesHandling.Preserve)] - public int InterruptNumber; + public int? InterruptNumber; } /// diff --git a/src/Interrupts.tt b/src/Interrupts.tt index 05f9115..0317226 100644 --- a/src/Interrupts.tt +++ b/src/Interrupts.tt @@ -43,12 +43,15 @@ foreach (var pin in interruptPins) { var pinInfo = pin.Value; var pinName = FirmwareNamingConvention.Instance.Apply(pin.Key); + if (!pinInfo.InterruptNumber.HasValue) + Error($"({pinName}) Interrupt number must be specified if interrupt priority is set."); + var interruptNumber = pinInfo.InterruptNumber.GetValueOrDefault(); #> /************************************************************************/ /* <#= pinName #><#= new string(' ', 69 - pinName.Length) #>*/ /************************************************************************/ -ISR(<#= pinInfo.Port #>_INT<#= pinInfo.InterruptNumber #>_vect, ISR_NAKED) +ISR(<#= pinInfo.Port #>_INT<#= interruptNumber #>_vect, ISR_NAKED) { reti(); }