~ruther/stm32h747i-disco-usb-image-viewer

ref: d0823eecd4dee0c7e2f3ee08534b89477526b6ad stm32h747i-disco-usb-image-viewer/src/main.c -rw-r--r-- 1.9 KiB
d0823eec — Rutherther feat: add registers, pin, exti, usb_device skeleton 5 months ago
                                                                                
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 */
}
Do not follow this link