diff --git a/firmware/iot-risk-data-logger-nfc-samd21.X/iot-risk-data-logger-nfc-samd21.mc3 b/firmware/iot-risk-data-logger-nfc-samd21.X/iot-risk-data-logger-nfc-samd21.mc3
index 7e1b330..78ebf42 100644
--- a/firmware/iot-risk-data-logger-nfc-samd21.X/iot-risk-data-logger-nfc-samd21.mc3
+++ b/firmware/iot-risk-data-logger-nfc-samd21.X/iot-risk-data-logger-nfc-samd21.mc3
@@ -3627,10 +3627,10 @@
<?xml version="1.0" encoding="UTF-8"?><UserData>
<UserData dnOrder="0">
- <GraphSettings canvasHeight="695" canvasWidth="826" dnOrder="0"/>
+ <GraphSettings canvasHeight="717" canvasWidth="826" dnOrder="0"/>
<ComponentGraph dnOrder="1" id="__ROOTVIEW">
<ElementPositions dnOrder="0">
- <ElementPosition dnOrder="0" id="FreeRTOS" x="688" y="8"/>
+ <ElementPosition dnOrder="0" id="FreeRTOS" x="550" y="5"/>
<ElementPosition dnOrder="1" id="HarmonyCore" x="23" y="584"/>
<ElementPosition dnOrder="2" id="cmsis" x="307" y="82"/>
<ElementPosition dnOrder="3" id="core" x="306" y="48"/>
@@ -3643,7 +3643,7 @@
<ElementPosition dnOrder="10" id="eic" x="166" y="18"/>
<ElementPosition dnOrder="11" id="evsys" x="163" y="70"/>
<ElementPosition dnOrder="12" id="nvmctrl" x="20" y="20"/>
- <ElementPosition dnOrder="13" id="pm" x="549" y="6"/>
+ <ElementPosition dnOrder="13" id="pm" x="687" y="7"/>
<ElementPosition dnOrder="14" id="rtc" x="550" y="79"/>
<ElementPosition dnOrder="15" id="sercom0" x="22" y="133"/>
<ElementPosition dnOrder="16" id="sercom1" x="17" y="324"/>
@@ -3836,6 +3836,50 @@
</Values>
</core>
</core>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><core>
+ <core dnOrder="0" id="EIC_INTERRUPT_ENABLE">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="true"/>
+ </Values>
+ </core>
+</core>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><core>
+ <core dnOrder="0" id="EIC_INTERRUPT_ENABLE_UPDATE">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="core" value="false"/>
+ </Values>
+ </core>
+</core>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><core>
+ <core dnOrder="0" id="EIC_INTERRUPT_HANDLER">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="EIC_InterruptHandler"/>
+ </Values>
+ </core>
+</core>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><core>
+ <core dnOrder="0" id="EIC_INTERRUPT_HANDLER_LOCK">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="true"/>
+ </Values>
+ </core>
+</core>
@@ -4574,6 +4618,39 @@
</Values>
</core>
</core>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><core>
+ <core dnOrder="0" id="NVIC_4_0_ENABLE">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="core" value="true"/>
+ </Values>
+ </core>
+</core>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><core>
+ <core dnOrder="0" id="NVIC_4_0_HANDLER">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="core" value="EIC_InterruptHandler"/>
+ </Values>
+ </core>
+</core>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><core>
+ <core dnOrder="0" id="NVIC_4_0_HANDLER_LOCK">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="core" value="true"/>
+ </Values>
+ </core>
+</core>
@@ -7366,7 +7443,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CHAN_10">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="true"/>
+ </Values>
</eic>
</eic>
@@ -7411,7 +7490,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CHAN_15">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="false"/>
+ </Values>
</eic>
</eic>
@@ -7429,7 +7510,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CHAN_3">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="true"/>
+ </Values>
</eic>
</eic>
@@ -7447,7 +7530,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CHAN_5">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="true"/>
+ </Values>
</eic>
</eic>
@@ -7456,7 +7541,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CHAN_6">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="true"/>
+ </Values>
</eic>
</eic>
@@ -7465,7 +7552,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CHAN_7">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="true"/>
+ </Values>
</eic>
</eic>
@@ -7654,7 +7743,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CONFIG_SENSE_10">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="5"/>
+ </Values>
</eic>
</eic>
@@ -7699,7 +7790,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CONFIG_SENSE_15">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="1"/>
+ </Values>
</eic>
</eic>
@@ -7717,7 +7810,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CONFIG_SENSE_3">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="2"/>
+ </Values>
</eic>
</eic>
@@ -7735,7 +7830,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CONFIG_SENSE_5">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="1"/>
+ </Values>
</eic>
</eic>
@@ -7744,7 +7841,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CONFIG_SENSE_6">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="1"/>
+ </Values>
</eic>
</eic>
@@ -7753,7 +7852,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_CONFIG_SENSE_7">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="1"/>
+ </Values>
</eic>
</eic>
@@ -7774,6 +7875,17 @@
<Values dnOrder="0"/>
</eic>
</eic>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><eic>
+ <eic dnOrder="0" id="EIC_EXTINTEO">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="0"/>
+ </Values>
+ </eic>
+</eic>
@@ -7927,6 +8039,17 @@
<Values dnOrder="0"/>
</eic>
</eic>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><eic>
+ <eic dnOrder="0" id="EIC_INT">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="1192"/>
+ </Values>
+ </eic>
+</eic>
@@ -7951,7 +8074,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_INT_10">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="true"/>
+ </Values>
</eic>
</eic>
@@ -7996,7 +8121,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_INT_15">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="true"/>
+ </Values>
</eic>
</eic>
@@ -8014,7 +8141,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_INT_3">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="true"/>
+ </Values>
</eic>
</eic>
@@ -8032,7 +8161,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_INT_5">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="true"/>
+ </Values>
</eic>
</eic>
@@ -8050,7 +8181,9 @@
<?xml version="1.0" encoding="UTF-8"?><eic>
<eic dnOrder="0" id="EIC_INT_7">
- <Values dnOrder="0"/>
+ <Values dnOrder="0">
+ <User dnOrder="0" value="true"/>
+ </Values>
</eic>
</eic>
@@ -8080,6 +8213,17 @@
<Values dnOrder="0"/>
</eic>
</eic>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><eic>
+ <eic dnOrder="0" id="EIC_WAKEUP">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="0"/>
+ </Values>
+ </eic>
+</eic>
@@ -8387,6 +8531,72 @@
</Values>
</evsys>
</evsys>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><evsys>
+ <evsys dnOrder="0" id="GENERATOR_EIC_EXTINT_10_ACTIVE">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="true"/>
+ </Values>
+ </evsys>
+</evsys>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><evsys>
+ <evsys dnOrder="0" id="GENERATOR_EIC_EXTINT_15_ACTIVE">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="false"/>
+ </Values>
+ </evsys>
+</evsys>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><evsys>
+ <evsys dnOrder="0" id="GENERATOR_EIC_EXTINT_3_ACTIVE">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="true"/>
+ </Values>
+ </evsys>
+</evsys>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><evsys>
+ <evsys dnOrder="0" id="GENERATOR_EIC_EXTINT_5_ACTIVE">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="true"/>
+ </Values>
+ </evsys>
+</evsys>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><evsys>
+ <evsys dnOrder="0" id="GENERATOR_EIC_EXTINT_6_ACTIVE">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="false"/>
+ </Values>
+ </evsys>
+</evsys>
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?><evsys>
+ <evsys dnOrder="0" id="GENERATOR_EIC_EXTINT_7_ACTIVE">
+ <Values dnOrder="0">
+ <Dynamic dnOrder="0" id="eic" value="true"/>
+ </Values>
+ </evsys>
+</evsys>
@@ -12850,7 +13060,7 @@
../src/config/default/interrupts.c
- 4cdd7847f06a8cf3cd01b8c77af2025943404e4030df81bf864bea00111e8b44
+ fad4ce58b2c8d50b3f25f309e8d55753b879ba78752246e3317ce302459bae24
../src/packs/ATSAMD21E18A_DFP/component/usb.h
@@ -12862,7 +13072,7 @@
../src/config/default/interrupts.h
- 4f12e83aa1bd95100f2760d1324e50464c6b923f79fbbbdbb8686263d3d3c01d
+ a8bba7fe086f6040e635c3a5afeb89f61a3e41ad1e38699c9f9c3d7b7057ffae
../src/config/default/system/int/src/sys_int.c
@@ -13146,7 +13356,7 @@
../src/config/default/peripheral/eic/plib_eic.h
- 98c08f8b7dba115ace37a8272878083352c59b6ecd49e23dbe2e79f21eafec7b
+ 32fe9eae1aa7ae8885f452a823ce2febf236124cecf1fcb586595e73b5d37d43
../src/packs/ATSAMD21E18A_DFP/instance/tcc1.h
@@ -13170,7 +13380,7 @@
../src/config/default/peripheral/eic/plib_eic.c
- e40e91ed3e153e30ebee0d6c9675899e9df57f731b809c4989266264f97ff5aa
+ a477674705cfe4024c8c3e3c060b04a4759d85a5ab116e54ca8d9388cca4a370
../src/third_party/rtos/FreeRTOS/Source/include/task.h
@@ -13734,7 +13944,7 @@
../src/config/default/peripheral/nvic/plib_nvic.c
- b19eae30e11ecb76216fbdbcf37a48a81845f81f09c6f07c1c123140cfe61434
+ 9586cb4761bc02aaefc5412caf98e60dc1245c1cba988e8cf4d07d1164753344
../src/packs/ATSAMD21E18A_DFP/instance/pac2.h
diff --git a/firmware/iot-risk-data-logger-nfc-samd21.X/nbproject/Makefile-genesis.properties b/firmware/iot-risk-data-logger-nfc-samd21.X/nbproject/Makefile-genesis.properties
index 0db335a..67be1e3 100644
--- a/firmware/iot-risk-data-logger-nfc-samd21.X/nbproject/Makefile-genesis.properties
+++ b/firmware/iot-risk-data-logger-nfc-samd21.X/nbproject/Makefile-genesis.properties
@@ -1,5 +1,5 @@
#
-#Sun Nov 19 20:07:57 TRT 2023
+#Sun Nov 19 20:16:43 TRT 2023
default.languagetoolchain.version=4.35
default.Pack.dfplocation=/Applications/microchip/mplabx/v6.15/packs/Microchip/SAMD21_DFP/3.6.144
default.com-microchip-mplab-mdbcore-simulator-Simulator.md5=aa9d1097190a66d1314d421a6f2603b4
diff --git a/firmware/src/config/default/harmony-manifest-success.yml b/firmware/src/config/default/harmony-manifest-success.yml
index cb10dec..de7c40d 100644
--- a/firmware/src/config/default/harmony-manifest-success.yml
+++ b/firmware/src/config/default/harmony-manifest-success.yml
@@ -4,7 +4,7 @@
project: iot-risk-data-logger-nfc-samd21
-creation_date: 2023-11-19T20:07:56.611+03:00[Europe/Istanbul] # ISO 8601 format: https://www.w3.org/TR/NOTE-datetime
+creation_date: 2023-11-19T20:16:42.617+03:00[Europe/Istanbul] # ISO 8601 format: https://www.w3.org/TR/NOTE-datetime
operating_system: Mac OS X
mcc_mode: IDE # [IDE|Standalone|Headless]
mcc_version: v5.3.7
diff --git a/firmware/src/config/default/interrupts.c b/firmware/src/config/default/interrupts.c
index 678e0e4..74fa07b 100644
--- a/firmware/src/config/default/interrupts.c
+++ b/firmware/src/config/default/interrupts.c
@@ -76,12 +76,11 @@ void __attribute__((optimize("-O1"), long_call, noreturn, used))Dummy_Handler(vo
}
/* MISRAC 2012 deviation block start */
-/* MISRA C-2012 Rule 8.6 deviated 19 times. Deviation record ID - H3_MISRAC_2012_R_8_6_DR_1 */
+/* MISRA C-2012 Rule 8.6 deviated 18 times. Deviation record ID - H3_MISRAC_2012_R_8_6_DR_1 */
/* Device vectors list dummy definition*/
extern void PM_Handler ( void ) __attribute__((weak, alias("Dummy_Handler")));
extern void SYSCTRL_Handler ( void ) __attribute__((weak, alias("Dummy_Handler")));
extern void WDT_Handler ( void ) __attribute__((weak, alias("Dummy_Handler")));
-extern void EIC_Handler ( void ) __attribute__((weak, alias("Dummy_Handler")));
extern void NVMCTRL_Handler ( void ) __attribute__((weak, alias("Dummy_Handler")));
extern void DMAC_Handler ( void ) __attribute__((weak, alias("Dummy_Handler")));
extern void EVSYS_Handler ( void ) __attribute__((weak, alias("Dummy_Handler")));
@@ -121,7 +120,7 @@ const H3DeviceVectors exception_table=
.pfnSYSCTRL_Handler = SYSCTRL_Handler,
.pfnWDT_Handler = WDT_Handler,
.pfnRTC_Handler = RTC_InterruptHandler,
- .pfnEIC_Handler = EIC_Handler,
+ .pfnEIC_Handler = EIC_InterruptHandler,
.pfnNVMCTRL_Handler = NVMCTRL_Handler,
.pfnDMAC_Handler = DMAC_Handler,
.pfnUSB_Handler = DRV_USBFSV1_USB_Handler,
diff --git a/firmware/src/config/default/interrupts.h b/firmware/src/config/default/interrupts.h
index 0d1628a..536a7ce 100644
--- a/firmware/src/config/default/interrupts.h
+++ b/firmware/src/config/default/interrupts.h
@@ -64,6 +64,7 @@ void vPortSVCHandler (void);
void xPortPendSVHandler (void);
void xPortSysTickHandler (void);
void RTC_InterruptHandler (void);
+void EIC_InterruptHandler (void);
void DRV_USBFSV1_USB_Handler (void);
void SERCOM0_I2C_InterruptHandler (void);
void SERCOM1_SPI_InterruptHandler (void);
diff --git a/firmware/src/config/default/peripheral/eic/plib_eic.c b/firmware/src/config/default/peripheral/eic/plib_eic.c
index dc96705..7488ab3 100644
--- a/firmware/src/config/default/peripheral/eic/plib_eic.c
+++ b/firmware/src/config/default/peripheral/eic/plib_eic.c
@@ -61,6 +61,9 @@
// Section: Global Data
// *****************************************************************************
// *****************************************************************************
+/* EIC Channel Callback object */
+volatile static EIC_CALLBACK_OBJ eicCallbackObject[EXTINT_COUNT];
+
void EIC_Initialize(void)
{
@@ -79,22 +82,42 @@ void EIC_Initialize(void)
EIC_REGS->EIC_CONFIG[0] = EIC_CONFIG_SENSE0_NONE |
EIC_CONFIG_SENSE1_NONE |
EIC_CONFIG_SENSE2_NONE |
- EIC_CONFIG_SENSE3_NONE |
+ EIC_CONFIG_SENSE3_FALL |
EIC_CONFIG_SENSE4_NONE |
- EIC_CONFIG_SENSE5_NONE |
- EIC_CONFIG_SENSE6_NONE |
- EIC_CONFIG_SENSE7_NONE ;
+ EIC_CONFIG_SENSE5_RISE |
+ EIC_CONFIG_SENSE6_RISE |
+ EIC_CONFIG_SENSE7_RISE ;
/* Interrupt sense type and filter control for EXTINT channels 8 to 15 */
EIC_REGS->EIC_CONFIG[1] = EIC_CONFIG_SENSE0_NONE |
EIC_CONFIG_SENSE1_NONE |
- EIC_CONFIG_SENSE2_NONE |
+ EIC_CONFIG_SENSE2_LOW |
EIC_CONFIG_SENSE3_NONE |
EIC_CONFIG_SENSE4_NONE |
EIC_CONFIG_SENSE5_NONE |
EIC_CONFIG_SENSE6_NONE |
- EIC_CONFIG_SENSE7_NONE ;
-
+ EIC_CONFIG_SENSE7_RISE ;
+
+ /* External Interrupt enable*/
+ EIC_REGS->EIC_INTENSET = 0x4a8;
+
+ /* Callbacks for enabled interrupts */
+ eicCallbackObject[0].eicPinNo = EIC_PIN_MAX;
+ eicCallbackObject[1].eicPinNo = EIC_PIN_MAX;
+ eicCallbackObject[2].eicPinNo = EIC_PIN_MAX;
+ eicCallbackObject[3].eicPinNo = EIC_PIN_3;
+ eicCallbackObject[4].eicPinNo = EIC_PIN_MAX;
+ eicCallbackObject[5].eicPinNo = EIC_PIN_5;
+ eicCallbackObject[6].eicPinNo = EIC_PIN_6;
+ eicCallbackObject[7].eicPinNo = EIC_PIN_7;
+ eicCallbackObject[8].eicPinNo = EIC_PIN_MAX;
+ eicCallbackObject[9].eicPinNo = EIC_PIN_MAX;
+ eicCallbackObject[10].eicPinNo = EIC_PIN_10;
+ eicCallbackObject[11].eicPinNo = EIC_PIN_MAX;
+ eicCallbackObject[12].eicPinNo = EIC_PIN_MAX;
+ eicCallbackObject[13].eicPinNo = EIC_PIN_MAX;
+ eicCallbackObject[14].eicPinNo = EIC_PIN_MAX;
+ eicCallbackObject[15].eicPinNo = EIC_PIN_MAX;
/* Enable the EIC */
EIC_REGS->EIC_CTRL |= EIC_CTRL_ENABLE_Msk;
@@ -105,3 +128,53 @@ void EIC_Initialize(void)
}
}
+void EIC_InterruptEnable(EIC_PIN pin)
+{
+ EIC_REGS->EIC_INTENSET = (1UL << (uint32_t)pin);
+}
+
+void EIC_InterruptDisable(EIC_PIN pin)
+{
+ EIC_REGS->EIC_INTENCLR = (1UL << (uint32_t)pin);
+}
+
+void EIC_CallbackRegister(EIC_PIN pin, EIC_CALLBACK callback, uintptr_t context)
+{
+ if (eicCallbackObject[pin].eicPinNo == pin)
+ {
+ eicCallbackObject[pin].callback = callback;
+
+ eicCallbackObject[pin].context = context;
+ }
+}
+
+void __attribute__((used)) EIC_InterruptHandler(void)
+{
+ uint8_t currentChannel;
+ uint32_t eicIntFlagStatus;
+
+ /* Find any triggered channels, run associated callback handlers */
+ for (currentChannel = 0; currentChannel < EXTINT_COUNT; currentChannel++)
+ {
+ /* Verify if the EXTINT x Interrupt Pin is enabled */
+ if (((uint8_t)eicCallbackObject[currentChannel].eicPinNo == currentChannel))
+ {
+ /* Read the interrupt flag status */
+ eicIntFlagStatus = EIC_REGS->EIC_INTFLAG & (1UL << currentChannel);
+
+ if (eicIntFlagStatus != 0U)
+ {
+ /* Find any associated callback entries in the callback table */
+ if ((eicCallbackObject[currentChannel].callback != NULL))
+ {
+ uintptr_t context = eicCallbackObject[currentChannel].context;
+ eicCallbackObject[currentChannel].callback(context);
+ }
+
+ /* Clear interrupt flag */
+ EIC_REGS->EIC_INTFLAG = (1UL << currentChannel);
+ }
+ }
+ }
+}
+
diff --git a/firmware/src/config/default/peripheral/eic/plib_eic.h b/firmware/src/config/default/peripheral/eic/plib_eic.h
index 5d5ce19..4e4d971 100644
--- a/firmware/src/config/default/peripheral/eic/plib_eic.h
+++ b/firmware/src/config/default/peripheral/eic/plib_eic.h
@@ -77,11 +77,41 @@
typedef enum
{
+ /* External Interrupt Controller Pin 3 */
+ EIC_PIN_3 = 3,
+
+ /* External Interrupt Controller Pin 5 */
+ EIC_PIN_5 = 5,
+
+ /* External Interrupt Controller Pin 6 */
+ EIC_PIN_6 = 6,
+
+ /* External Interrupt Controller Pin 7 */
+ EIC_PIN_7 = 7,
+
+ /* External Interrupt Controller Pin 10 */
+ EIC_PIN_10 = 10,
+
EIC_PIN_MAX = 16
} EIC_PIN;
+typedef void (*EIC_CALLBACK) (uintptr_t context);
+
+typedef struct
+{
+ /* External Interrupt Pin Callback Handler */
+ EIC_CALLBACK callback;
+
+ /* External Interrupt Pin Client context */
+ uintptr_t context;
+
+ /* External Interrupt Pin number */
+ EIC_PIN eicPinNo;
+
+} EIC_CALLBACK_OBJ;
+
// *****************************************************************************
// *****************************************************************************
@@ -91,6 +121,12 @@ typedef enum
void EIC_Initialize(void);
+void EIC_InterruptEnable(EIC_PIN pin);
+
+void EIC_InterruptDisable(EIC_PIN pin);
+
+void EIC_CallbackRegister(EIC_PIN pin, EIC_CALLBACK callback, uintptr_t context);
+
#ifdef __cplusplus // Provide C++ Compatibility
diff --git a/firmware/src/config/default/peripheral/nvic/plib_nvic.c b/firmware/src/config/default/peripheral/nvic/plib_nvic.c
index a211731..d31f2d9 100644
--- a/firmware/src/config/default/peripheral/nvic/plib_nvic.c
+++ b/firmware/src/config/default/peripheral/nvic/plib_nvic.c
@@ -59,6 +59,8 @@ void NVIC_Initialize( void )
* from within the "Interrupt Manager" of MHC. */
NVIC_SetPriority(RTC_IRQn, 3);
NVIC_EnableIRQ(RTC_IRQn);
+ NVIC_SetPriority(EIC_IRQn, 3);
+ NVIC_EnableIRQ(EIC_IRQn);
NVIC_SetPriority(USB_IRQn, 3);
NVIC_EnableIRQ(USB_IRQn);
NVIC_SetPriority(SERCOM0_IRQn, 3);