#include #include #include #include #define LED1_PIN 12 #define LED2_PIN 13 void hard_fault_handler() { while(1) {} } void usage_fault_handler() { while(1) {} } void nmi_handler() { while(1) {} } void bus_fault_handler() { while(1) {} } 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() { uint32_t *i1 = malloc(sizeof(uint32_t)); uint32_t *i2 = malloc(sizeof(uint32_t)); free(i1); uint32_t *i3 = malloc(sizeof(uint32_t)); led_gpio_en(); led_input(); led_toggle(); 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; // 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; 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 */ }