diff --git a/.cproject b/.cproject
--- a/.cproject
+++ b/.cproject
@@ -45,7 +45,7 @@
-
+
diff --git a/inc/gpio.h b/inc/gpio.h
--- a/inc/gpio.h
+++ b/inc/gpio.h
@@ -14,6 +14,17 @@
#define GATE_DRIVE_GPIO_Port GPIOA
#define GATE_DRIVE GATE_DRIVE_GPIO_Port , GATE_DRIVE_Pin
+#define SW_A_Pin GPIO_PIN_6
+#define SW_A_GPIO_Port GPIOA
+#define SW_BTN_Pin GPIO_PIN_8
+#define SW_BTN_GPIO_Port GPIOA
+#define SW_C_Pin GPIO_PIN_9
+#define SW_C_GPIO_Port GPIOA
+#define SW_D_Pin GPIO_PIN_10
+#define SW_D_GPIO_Port GPIOA
+#define SW_B_Pin GPIO_PIN_15
+#define SW_B_GPIO_Port GPIOA
+
void gpio_init(void);
void gpio_led_blueblink(uint8_t num_blinks);
diff --git a/src/gpio.c b/src/gpio.c
--- a/src/gpio.c
+++ b/src/gpio.c
@@ -32,8 +32,22 @@ void gpio_init(void)
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GATE_DRIVE_GPIO_Port, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = SW_A_Pin|SW_BTN_Pin|SW_C_Pin|SW_D_Pin
+ |SW_B_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /* EXTI interrupt init*/
+ HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
+
+ HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
+
// Define startup State
- HAL_GPIO_WritePin(LED_RED, 1);
- HAL_GPIO_WritePin(GATE_DRIVE, 1);
+ HAL_GPIO_WritePin(LED_RED, 0);
+ HAL_GPIO_WritePin(GATE_DRIVE, 0);
}
diff --git a/src/interrupts.c b/src/interrupts.c
--- a/src/interrupts.c
+++ b/src/interrupts.c
@@ -7,6 +7,7 @@
#include "interrupts.h"
+#include "gpio.h"
// Systick interrupt
void SysTick_Handler(void)
@@ -15,3 +16,44 @@ void SysTick_Handler(void)
HAL_SYSTICK_IRQHandler();
}
+void EXTI9_5_IRQHandler(void)
+{
+ /* USER CODE BEGIN EXTI9_5_IRQn 0 */
+
+ /* USER CODE END EXTI9_5_IRQn 0 */
+ HAL_GPIO_EXTI_IRQHandler(SW_A_Pin);
+ HAL_GPIO_EXTI_IRQHandler(SW_BTN_Pin);
+ HAL_GPIO_EXTI_IRQHandler(SW_C_Pin);
+ /* USER CODE BEGIN EXTI9_5_IRQn 1 */
+
+ /* USER CODE END EXTI9_5_IRQn 1 */
+}
+
+void EXTI15_10_IRQHandler(void)
+{
+ /* USER CODE BEGIN EXTI15_10_IRQn 0 */
+
+ /* USER CODE END EXTI15_10_IRQn 0 */
+ HAL_GPIO_EXTI_IRQHandler(SW_D_Pin);
+ HAL_GPIO_EXTI_IRQHandler(SW_B_Pin);
+ /* USER CODE BEGIN EXTI15_10_IRQn 1 */
+
+ /* USER CODE END EXTI15_10_IRQn 1 */
+}
+
+uint32_t last_button_press = 0;
+
+void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
+{
+ switch(GPIO_Pin)
+ {
+ case SW_BTN_Pin:
+ {
+ if(HAL_GetTick() > last_button_press + 100)
+ {
+ HAL_GPIO_TogglePin(LED_RED);
+ last_button_press = HAL_GetTick();
+ }
+ } break;
+ }
+}
diff --git a/src/main.c b/src/main.c
--- a/src/main.c
+++ b/src/main.c
@@ -24,13 +24,11 @@ int main(void)
ssd1306_clearscreen();
// ssd1306_drawstring(const char *dataPtr, unsigned char row, unsigned char xPos)
- ssd1306_drawstring("Freaking test", 0, 0);
-
- int32_t my_variable = -123;
+ ssd1306_drawstring("[ ProtoFuse ]", 0, 0);
+ ssd1306_drawstring("HW v1.0 SW v0.1", 1, 0);
- char buffer[256];
- snprintf(buffer, 256, "My Variable: %d", my_variable);
- ssd1306_drawstring(buffer, 2, 0);
+ int32_t battery_adc_count = 0;
+
flash_init();
watchdog_init();
@@ -41,13 +39,16 @@ int main(void)
while (1)
{
// Grab and transmit data
- if(HAL_GetTick() - last_blink_time > 100)
+ if(HAL_GetTick() - last_blink_time > 1000)
{
- HAL_GPIO_TogglePin(LED_RED);
+ char buffer[256];
+ snprintf(buffer, 256, "My Variable: %d", battery_adc_count);
+ ssd1306_drawstring(buffer, 2, 0);
+// HAL_GPIO_TogglePin(LED_RED);
+ battery_adc_count++;
last_blink_time = HAL_GetTick();
}
- // Process CAN messages and LED state
watchdog_feed();
}
}
diff --git a/src/ssd1306.c b/src/ssd1306.c
--- a/src/ssd1306.c
+++ b/src/ssd1306.c
@@ -89,10 +89,10 @@ void ssd1306_init(void)
WriteCommand(0x14); //10 or 14 if not externalvcc
WriteCommand(0x20);
WriteCommand(0x00);
-// WriteCommand(0xA0 | 0x1); // segremap (normal)
- WriteCommand(0xA0); // segremap (flip)
-// WriteCommand(0xC8); // comscandec (normal)
- WriteCommand(0xC0); // comscandec (flip)
+ WriteCommand(0xA0 | 0x1); // segremap (normal)
+// WriteCommand(0xA0); // segremap (flip)
+ WriteCommand(0xC8); // comscandec (normal)
+// WriteCommand(0xC0); // comscandec (flip)
WriteCommand(0xDA); // setcompins
WriteCommand(0x02);
WriteCommand(0x81); // contrast