]> mj.ucw.cz Git - home-hw.git/blob - usb/Src/stm32f1xx_it.c
Aircon: basics
[home-hw.git] / usb / Src / stm32f1xx_it.c
1 /**
2   ******************************************************************************
3   * @file    stm32f1xx_it.c
4   * @brief   Interrupt Service Routines.
5   ******************************************************************************
6   *
7   * COPYRIGHT(c) 2018 STMicroelectronics
8   *
9   * Redistribution and use in source and binary forms, with or without modification,
10   * are permitted provided that the following conditions are met:
11   *   1. Redistributions of source code must retain the above copyright notice,
12   *      this list of conditions and the following disclaimer.
13   *   2. Redistributions in binary form must reproduce the above copyright notice,
14   *      this list of conditions and the following disclaimer in the documentation
15   *      and/or other materials provided with the distribution.
16   *   3. Neither the name of STMicroelectronics nor the names of its contributors
17   *      may be used to endorse or promote products derived from this software
18   *      without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30   *
31   ******************************************************************************
32   */
33 /* Includes ------------------------------------------------------------------*/
34 #include "stm32f1xx_hal.h"
35 #include "stm32f1xx.h"
36 #include "stm32f1xx_it.h"
37
38 /* USER CODE BEGIN 0 */
39 #include "util.h"
40 #include "app.h"
41
42 /* USER CODE END 0 */
43
44 /* External variables --------------------------------------------------------*/
45 extern PCD_HandleTypeDef hpcd_USB_FS;
46
47 /******************************************************************************/
48 /*            Cortex-M3 Processor Interruption and Exception Handlers         */ 
49 /******************************************************************************/
50
51 /**
52 * @brief This function handles Non maskable interrupt.
53 */
54 void NMI_Handler(void)
55 {
56   /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
57
58   /* USER CODE END NonMaskableInt_IRQn 0 */
59   /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
60
61   /* USER CODE END NonMaskableInt_IRQn 1 */
62 }
63
64 /**
65 * @brief This function handles Hard fault interrupt.
66 */
67 void HardFault_Handler(void)
68 {
69   /* USER CODE BEGIN HardFault_IRQn 0 */
70
71   /* USER CODE END HardFault_IRQn 0 */
72   while (1)
73   {
74     /* USER CODE BEGIN W1_HardFault_IRQn 0 */
75     /* USER CODE END W1_HardFault_IRQn 0 */
76   }
77   /* USER CODE BEGIN HardFault_IRQn 1 */
78
79   /* USER CODE END HardFault_IRQn 1 */
80 }
81
82 /**
83 * @brief This function handles Memory management fault.
84 */
85 void MemManage_Handler(void)
86 {
87   /* USER CODE BEGIN MemoryManagement_IRQn 0 */
88
89   /* USER CODE END MemoryManagement_IRQn 0 */
90   while (1)
91   {
92     /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
93     /* USER CODE END W1_MemoryManagement_IRQn 0 */
94   }
95   /* USER CODE BEGIN MemoryManagement_IRQn 1 */
96
97   /* USER CODE END MemoryManagement_IRQn 1 */
98 }
99
100 /**
101 * @brief This function handles Prefetch fault, memory access fault.
102 */
103 void BusFault_Handler(void)
104 {
105   /* USER CODE BEGIN BusFault_IRQn 0 */
106
107   /* USER CODE END BusFault_IRQn 0 */
108   while (1)
109   {
110     /* USER CODE BEGIN W1_BusFault_IRQn 0 */
111     /* USER CODE END W1_BusFault_IRQn 0 */
112   }
113   /* USER CODE BEGIN BusFault_IRQn 1 */
114
115   /* USER CODE END BusFault_IRQn 1 */
116 }
117
118 /**
119 * @brief This function handles Undefined instruction or illegal state.
120 */
121 void UsageFault_Handler(void)
122 {
123   /* USER CODE BEGIN UsageFault_IRQn 0 */
124
125   /* USER CODE END UsageFault_IRQn 0 */
126   while (1)
127   {
128     /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
129     /* USER CODE END W1_UsageFault_IRQn 0 */
130   }
131   /* USER CODE BEGIN UsageFault_IRQn 1 */
132
133   /* USER CODE END UsageFault_IRQn 1 */
134 }
135
136 /**
137 * @brief This function handles System service call via SWI instruction.
138 */
139 void SVC_Handler(void)
140 {
141   /* USER CODE BEGIN SVCall_IRQn 0 */
142
143   /* USER CODE END SVCall_IRQn 0 */
144   /* USER CODE BEGIN SVCall_IRQn 1 */
145
146   /* USER CODE END SVCall_IRQn 1 */
147 }
148
149 /**
150 * @brief This function handles Debug monitor.
151 */
152 void DebugMon_Handler(void)
153 {
154   /* USER CODE BEGIN DebugMonitor_IRQn 0 */
155
156   /* USER CODE END DebugMonitor_IRQn 0 */
157   /* USER CODE BEGIN DebugMonitor_IRQn 1 */
158
159   /* USER CODE END DebugMonitor_IRQn 1 */
160 }
161
162 /**
163 * @brief This function handles Pendable request for system service.
164 */
165 void PendSV_Handler(void)
166 {
167   /* USER CODE BEGIN PendSV_IRQn 0 */
168
169   /* USER CODE END PendSV_IRQn 0 */
170   /* USER CODE BEGIN PendSV_IRQn 1 */
171
172   /* USER CODE END PendSV_IRQn 1 */
173 }
174
175 /**
176 * @brief This function handles System tick timer.
177 */
178 void SysTick_Handler(void)
179 {
180   /* USER CODE BEGIN SysTick_IRQn 0 */
181
182   /* USER CODE END SysTick_IRQn 0 */
183   HAL_IncTick();
184   HAL_SYSTICK_IRQHandler();
185   /* USER CODE BEGIN SysTick_IRQn 1 */
186
187   /* USER CODE END SysTick_IRQn 1 */
188 }
189
190 /******************************************************************************/
191 /* STM32F1xx Peripheral Interrupt Handlers                                    */
192 /* Add here the Interrupt Handlers for the used peripherals.                  */
193 /* For the available peripheral interrupt handler names,                      */
194 /* please refer to the startup file (startup_stm32f1xx.s).                    */
195 /******************************************************************************/
196
197 /**
198 * @brief This function handles USB high priority or CAN TX interrupts.
199 */
200 void USB_HP_CAN1_TX_IRQHandler(void)
201 {
202   /* USER CODE BEGIN USB_HP_CAN1_TX_IRQn 0 */
203
204   /* USER CODE END USB_HP_CAN1_TX_IRQn 0 */
205   HAL_PCD_IRQHandler(&hpcd_USB_FS);
206   /* USER CODE BEGIN USB_HP_CAN1_TX_IRQn 1 */
207
208   /* USER CODE END USB_HP_CAN1_TX_IRQn 1 */
209 }
210
211 /**
212 * @brief This function handles USB low priority or CAN RX0 interrupts.
213 */
214 void USB_LP_CAN1_RX0_IRQHandler(void)
215 {
216   /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 0 */
217
218   /* USER CODE END USB_LP_CAN1_RX0_IRQn 0 */
219   HAL_PCD_IRQHandler(&hpcd_USB_FS);
220   /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 1 */
221
222   /* USER CODE END USB_LP_CAN1_RX0_IRQn 1 */
223 }
224
225 /**
226 * @brief This function handles TIM4 global interrupt.
227 */
228 void TIM4_IRQHandler(void)
229 {
230   /* USER CODE BEGIN TIM4_IRQn 0 */
231   if (LL_TIM_IsActiveFlag_UPDATE(TIM4))
232     {
233       // FIXME
234       LL_TIM_ClearFlag_UPDATE(TIM4);
235     }
236
237   /* USER CODE END TIM4_IRQn 0 */
238   /* USER CODE BEGIN TIM4_IRQn 1 */
239
240   /* USER CODE END TIM4_IRQn 1 */
241 }
242
243 /**
244 * @brief This function handles I2C1 event interrupt.
245 */
246 void I2C1_EV_IRQHandler(void)
247 {
248   /* USER CODE BEGIN I2C1_EV_IRQn 0 */
249   u32 sr1 = I2C1->SR1;
250   if (sr1 & I2C_SR1_SB)
251     LL_I2C_TransmitData8(I2C1, bmp_i2c_addr);
252   else if (bmp_i2c_addr & 1)
253     {
254       // Receive
255       if (sr1 & I2C_SR1_ADDR)
256         {
257           LL_I2C_DisableBitPOS(I2C1);
258           if (bmp_i2c_len == 1)
259             LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_NACK);
260           LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_ACK);
261           LL_I2C_ClearFlag_ADDR(I2C1);
262         }
263       else if (sr1 & I2C_SR1_RXNE)
264         {
265           if (bmp_i2c_len > 0)
266             {
267               if (bmp_i2c_len == 1)
268                 {
269                   LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_NACK);
270                   LL_I2C_GenerateStopCondition(I2C1);
271                 }
272               *bmp_i2c_ptr++ = LL_I2C_ReceiveData8(I2C1);
273               bmp_i2c_len--;
274             }
275           else
276             LL_I2C_DisableIT_RX(I2C1);
277         }
278     }
279   else
280     {
281       // Transmit
282       if (sr1 & I2C_SR1_ADDR)
283         LL_I2C_ClearFlag_ADDR(I2C1);
284       else if (sr1 & I2C_SR1_TXE)
285         {
286           if (bmp_i2c_len)
287             {
288               LL_I2C_TransmitData8(I2C1, *bmp_i2c_ptr++);
289               bmp_i2c_len--;
290             }
291           else
292             LL_I2C_DisableIT_TX(I2C1);
293         }
294     }
295
296   /* USER CODE END I2C1_EV_IRQn 0 */
297   
298   /* USER CODE BEGIN I2C1_EV_IRQn 1 */
299
300   /* USER CODE END I2C1_EV_IRQn 1 */
301 }
302
303 /* USER CODE BEGIN 1 */
304
305 /* USER CODE END 1 */
306 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/