1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <stdint.h>
#include <stm32h747xx.h>
#include <core_cm7.h>
#include <stdlib.h>
#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 */
}