1 files changed, 63 insertions(+), 10 deletions(-)
M src/main.c
M src/main.c => src/main.c +63 -10
@@ 1,25 1,78 @@
#include <stdint.h>
-#include "stm32h747xx.h"
+#include <stm32h747xx.h>
+#include <core_cm7.h>
#define LED1_PIN 12
#define LED2_PIN 13
+void led_toggle()
+{
+ GPIOI->ODR ^= (1 << LED1_PIN);
+}
+
+void led_input()
+{
+ GPIOI->MODER = (1 << LED1_PIN*2);
+}
+
+void led_gpio_en()
+{
+ RCC->AHB4ENR |= (1 << RCC_AHB4ENR_GPIOIEN_Pos);
+ volatile uint32_t dummy;
+ dummy = RCC->AHB4ENR;
+ dummy = RCC->AHB4ENR;
+}
+
+void exti15_10_handler(void)
+{
+ if (EXTI->PR1 & EXTI_PR1_PR13) {
+ led_toggle();
+ EXTI->PR1 &= EXTI_PR1_PR13;
+ }
+}
+
void main()
{
- RCC->AHB4ENR |= (1 << RCC_AHB4ENR_GPIOIEN_Pos);
+ led_gpio_en();
+ led_input();
+ led_toggle();
- // do two dummy reads after enabling the peripheral clock
+ RCC->APB4ENR |= RCC_APB4ENR_SYSCFGEN;
volatile uint32_t dummy;
+ dummy = RCC->APB4ENR;
+ dummy = RCC->APB4ENR;
+
+ RCC->AHB4ENR |= (1 << RCC_AHB4ENR_GPIOCEN_Pos);
dummy = RCC->AHB4ENR;
dummy = RCC->AHB4ENR;
- GPIOI->MODER = (1 << GPIO_MODER_MODE12_Pos) | (1 << GPIO_MODER_MODE13_Pos);
+ // pc13 input
+ GPIOC->MODER &= ~((0x3) << (13*2));
+
+ SYSCFG->EXTICR[3] |= (SYSCFG_EXTICR4_EXTI13_PC);
+ EXTI->RTSR1 |= EXTI_RTSR1_TR13;
+ EXTI->FTSR1 &= ~(EXTI_FTSR1_TR13);
+ EXTI->IMR1 |= EXTI_IMR1_IM13;
- GPIOI->ODR ^= (1 << LED2_PIN);
- while(1)
- {
- GPIOI->ODR ^= (1 << LED1_PIN);
- GPIOI->ODR ^= (1 << LED2_PIN);
- for (uint32_t i = 0; i < 2000000; i++);
+ NVIC_SetPriority(EXTI15_10_IRQn, 2);
+ NVIC_EnableIRQ(EXTI15_10_IRQn);
+ /* NVIC->IPR[EXTI15_10_IRQn] |= 2 << (8U - __NVIC_PRIO_BITS); */
+ /* NVIC->ISER[(((uint32_t)EXTI15_10_IRQn) >> 5UL)] = (1 << (EXTI15_10_IRQn & 0x1FUL)); */
+
+ __enable_irq();
+
+ while(1) {
+ int toggle = (GPIOC->IDR >> 13) & 1;
+
+ if (toggle) {
+ led_toggle();
+ while(1) {}
+ }
}
+ /* void* usb_otg = usb_device_init(USB_OTG_ADDR); */
+ /* usb_device_setup(usb_otg); */
+
+ /* usb_device_wait_for_handshake(usb_otg); */
+
+ /* // do two dummy reads after enabling the peripheral clock */
}