9b7cd4a39f5d7ecc0b7269d474195a8fd85ae1d9
[gnuk/gnuk.git] / boards / STBEE_MINI / board.c
1 #include "config.h"
2 #include "ch.h"
3 #include "hal.h"
4
5 #include "../common/hwinit.c"
6
7 void
8 hwinit0 (void)
9 {
10   hwinit0_common ();
11 }
12
13 void
14 hwinit1 (void)
15 {
16   hwinit1_common ();
17
18 #if defined(PINPAD_SUPPORT)
19   palWritePort(IOPORT2, 0x7fff); /* Only clear GPIOB_7SEG_DP */
20   while (palReadPad (IOPORT2, GPIOB_BUTTON) != 0)
21     ;                           /* Wait for JTAG debugger connection */
22   palWritePort(IOPORT2, 0xffff); /* All set */
23
24   /* EXTI0 <= PB0 */
25   AFIO->EXTICR[0] = AFIO_EXTICR1_EXTI0_PB;
26   EXTI->IMR = 0;
27 #if 0
28   EXTI->RTSR = EXTI_RTSR_TR0;
29 #else
30   EXTI->FTSR = EXTI_FTSR_TR0;
31 #endif
32   NVICEnableVector(EXTI0_IRQn,
33                    CORTEX_PRIORITY_MASK(CORTEX_MINIMUM_PRIORITY));
34
35   /* TIM3 */
36   RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
37   RCC->APB1RSTR = RCC_APB1RSTR_TIM3RST;
38   RCC->APB1RSTR = 0;
39   NVICEnableVector(TIM3_IRQn,
40                    CORTEX_PRIORITY_MASK(CORTEX_MINIMUM_PRIORITY));
41   TIM3->CR1 = TIM_CR1_URS | TIM_CR1_ARPE; /* Don't enable TIM3 for now */
42   TIM3->CR2 = TIM_CR2_TI1S;
43   TIM3->SMCR = TIM_SMCR_TS_0 | TIM_SMCR_TS_2 | TIM_SMCR_SMS_2;
44   TIM3->DIER = 0;               /* Disable interrupt for now */
45   TIM3->CCMR1 = TIM_CCMR1_CC1S_0 | TIM_CCMR1_IC1F_0 | TIM_CCMR1_IC1F_3
46     | TIM_CCMR1_CC2S_1 | TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_3;
47   TIM3->CCMR2 = 0;
48   TIM3->CCER =  TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC2P;
49   TIM3->PSC = 72 - 1;           /* 1 MHz */
50   TIM3->ARR = 18000;            /* 18 ms */
51   /* Generate UEV to upload PSC and ARR */
52   TIM3->EGR = TIM_EGR_UG;       
53 #endif
54   /*
55    * Disable JTAG and SWD, done after hwinit1_common as HAL resets AFIO
56    */
57   AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_DISABLE;
58   /* We use LED2 as optional "error" indicator */
59   palSetPad (IOPORT1, GPIOA_LED2);
60 }
61
62 void
63 USB_Cable_Config (FunctionalState NewState)
64 {
65   if (NewState != DISABLE)
66     palSetPad (IOPORT1, GPIOA_USB_ENABLE);
67   else
68     palClearPad (IOPORT1, GPIOA_USB_ENABLE);
69 }
70
71 void
72 set_led (int value)
73 {
74   if (value)
75     palClearPad (IOPORT1, GPIOA_LED1);
76   else
77     palSetPad (IOPORT1, GPIOA_LED1);
78 }
79
80 #if defined(PINPAD_SUPPORT)
81 void
82 cir_ext_disable (void)
83 {
84   EXTI->PR = EXTI_PR_PR0;
85   EXTI->IMR &= ~EXTI_IMR_MR0;
86 }
87
88 void
89 cir_ext_enable (void)
90 {
91   EXTI->IMR |= EXTI_IMR_MR0;
92 }
93
94 extern void cir_ext_interrupt (void);
95 extern void cir_timer_interrupt (void);
96
97 CH_IRQ_HANDLER (EXTI0_IRQHandler)
98 {
99   CH_IRQ_PROLOGUE ();
100   chSysLockFromIsr ();
101
102   cir_ext_interrupt ();
103
104   chSysUnlockFromIsr ();
105   CH_IRQ_EPILOGUE ();
106 }
107
108 CH_IRQ_HANDLER (TIM3_IRQHandler)
109 {
110   CH_IRQ_PROLOGUE();
111   chSysLockFromIsr();
112
113   cir_timer_interrupt ();
114
115   chSysUnlockFromIsr();
116   CH_IRQ_EPILOGUE();
117 }
118 #endif