]> jspc29.x-matter.uni-frankfurt.de Git - mvd_firmware.git/commitdiff
fix: add missing firmware/src/exti.{h,c} source files latchup_detection
authorPhilipp Klaus <klaus@physik.uni-frankfurt.de>
Wed, 3 Aug 2016 15:25:41 +0000 (17:25 +0200)
committerPhilipp Klaus <klaus@physik.uni-frankfurt.de>
Wed, 3 Aug 2016 15:25:41 +0000 (17:25 +0200)
firmware/src/exti.c [new file with mode: 0644]
firmware/src/exti.h [new file with mode: 0644]

diff --git a/firmware/src/exti.c b/firmware/src/exti.c
new file mode 100644 (file)
index 0000000..03deb04
--- /dev/null
@@ -0,0 +1,157 @@
+#include "stm32f10x_exti.h"
+#include "stm32f10x_conf.h"
+#include "stm32f10x_gpio.h"
+#include "stm32f10x_rcc.h"
+#include "periph_conf.h"
+#include "exti.h"
+#include "misc_utils.h"
+
+
+//initialization of external interrupts for overcurrent discriminators
+void init_GPIO_EXTI(void)
+{
+       irq_stateD0 = 0;
+       irq_stateA0 = 0;
+       irq_stateD1 = 0;
+       irq_stateA1 = 0;
+
+       GPIO_InitTypeDef GPIO_InitStructure;
+       EXTI_InitTypeDef EXTI_InitStructure;
+       NVIC_InitTypeDef NVIC_InitStructure;
+
+       /* Enable the GPIOB Clock */
+       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
+
+
+       /* Configure the GPIO_LED pin */
+       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_10 | GPIO_Pin_11;
+       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
+       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+       GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+       //enable AFIO clock
+       RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,  ENABLE);
+
+       //Connect EXTI Lines to Pins
+       GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);
+       GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);
+       GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource10);
+       GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource11);
+       //select EXTI line0
+       EXTI_InitStructure.EXTI_Line = EXTI_Line0;
+       //select interrupt mode
+       EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
+       //generate interrupt on rising edge
+       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
+       //enable EXTI line
+       EXTI_InitStructure.EXTI_LineCmd = ENABLE;
+       //send values to registers
+       EXTI_Init(&EXTI_InitStructure);
+       //select EXTI lines
+       EXTI_InitStructure.EXTI_Line = EXTI_Line1;
+       EXTI_Init(&EXTI_InitStructure);
+       EXTI_InitStructure.EXTI_Line = EXTI_Line10;
+       EXTI_Init(&EXTI_InitStructure);
+       EXTI_InitStructure.EXTI_Line = EXTI_Line11;
+       EXTI_Init(&EXTI_InitStructure);
+       //disable AFIO clock
+       RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,  DISABLE);
+       //configure NVIC
+       //select NVIC channel to configure
+       NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
+       //set priority to lowest
+       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
+       //set subpriority to lowest
+       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
+       //enable IRQ channel
+       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+       //update NVIC registers
+       NVIC_Init(&NVIC_InitStructure);
+       //select NVIC channel to configure
+       NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
+       NVIC_Init(&NVIC_InitStructure);
+       NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
+       NVIC_Init(&NVIC_InitStructure);
+       //   NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
+       //   NVIC_Init(&NVIC_InitStructure);
+       EXTI_ClearITPendingBit(EXTI_Line0);
+       EXTI_ClearITPendingBit(EXTI_Line1);
+       EXTI_ClearITPendingBit(EXTI_Line10);
+       EXTI_ClearITPendingBit(EXTI_Line11);
+       NVIC_ClearPendingIRQ(EXTI0_IRQn);
+       NVIC_ClearPendingIRQ(EXTI1_IRQn);
+       NVIC_ClearPendingIRQ(EXTI15_10_IRQn);
+}
+
+void EXTI0_IRQHandler(void)
+{
+    //Check if EXTI_Line0 is asserted
+    if(EXTI_GetITStatus(EXTI_Line0) != RESET)
+    {
+       //CB_GPIO_Out_Toggle(LED4);
+       CB_GPIO_Out_Hi(DISD1);
+       CB_GPIO_Out_Lo(ENAD1);
+       CB_GPIO_Out_Hi(DISA1);
+       CB_GPIO_Out_Lo(ENAA1);
+       CB_GPIO_Out_Lo(SENSOREN1);
+       CB_GPIO_Out_Lo(JTAGEN1);
+       irq_stateD1 = 1;
+    }
+    //we need to clear line pending bit manually
+    EXTI_ClearITPendingBit(EXTI_Line0);
+    NVIC_ClearPendingIRQ(EXTI0_IRQn);
+}
+
+void EXTI1_IRQHandler(void)
+{
+    //Check if EXTI_Line1 is asserted
+    if(EXTI_GetITStatus(EXTI_Line1) != RESET)
+    {
+       //CB_GPIO_Out_Toggle(LED3);
+        CB_GPIO_Out_Hi(DISD1);
+        CB_GPIO_Out_Lo(ENAD1);
+        CB_GPIO_Out_Hi(DISA1);
+        CB_GPIO_Out_Lo(ENAA1);
+        CB_GPIO_Out_Lo(SENSOREN1);
+        CB_GPIO_Out_Lo(JTAGEN1);
+        irq_stateA1 = 1;
+    }
+    //we need to clear line pending bit manually
+    EXTI_ClearITPendingBit(EXTI_Line1);
+    NVIC_ClearPendingIRQ(EXTI1_IRQn);
+}
+
+void EXTI15_10_IRQHandler(void)
+{
+    //Check if EXTI_Line1 is asserted
+    if(EXTI_GetITStatus(EXTI_Line10) != RESET)
+    {
+       //CB_GPIO_Out_Toggle(LED2);
+       CB_GPIO_Out_Hi(DISD0);
+       CB_GPIO_Out_Lo(ENAD0);
+       CB_GPIO_Out_Hi(DISA0);
+       CB_GPIO_Out_Lo(ENAA0);
+       CB_GPIO_Out_Lo(SENSOREN0);
+       CB_GPIO_Out_Lo(JTAGEN0);
+       irq_stateD0 = 1;
+    }
+    //we need to clear line pending bit manually
+    EXTI_ClearITPendingBit(EXTI_Line10);
+
+    //Check if EXTI_Line1 is asserted
+    if(EXTI_GetITStatus(EXTI_Line11) != RESET)
+    {
+       //CB_GPIO_Out_Toggle(LED1);
+       CB_GPIO_Out_Hi(DISD0);
+       CB_GPIO_Out_Lo(ENAD0);
+       CB_GPIO_Out_Hi(DISA0);
+       CB_GPIO_Out_Lo(ENAA0);
+       CB_GPIO_Out_Lo(SENSOREN0);
+       CB_GPIO_Out_Lo(JTAGEN0);
+       irq_stateA0 = 1;
+    }
+    //we need to clear line pending bit manually
+    EXTI_ClearITPendingBit(EXTI_Line11);
+
+    NVIC_ClearPendingIRQ(EXTI15_10_IRQn);
+}
diff --git a/firmware/src/exti.h b/firmware/src/exti.h
new file mode 100644 (file)
index 0000000..fba91dd
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * exti.h
+ *
+ *  Created on: Sep 3, 2015
+ *      Author: lukasz
+ */
+
+#ifndef SRC_EXTI_H_
+#define SRC_EXTI_H_
+
+void init_GPIO_EXTI(void);
+
+uint8_t irq_stateD0;
+uint8_t irq_stateA0;
+uint8_t irq_stateD1;
+uint8_t irq_stateA1;
+
+#endif /* SRC_EXTI_H_ */