QuakeGod
2022-09-29 e1f35018c4dec304b00f50d9dbe12204fd57a623
提交 | 用户 | age
bfc108 1 /**
Q 2   ******************************************************************************
3   * @file    stm32f0xx_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 "stm32f0xx_hal.h"
35 #include "stm32f0xx.h"
36 #include "stm32f0xx_it.h"
37
38 /* USER CODE BEGIN 0 */
39 #include "functions.h"
40 /* USER CODE END 0 */
41
42 /* External variables --------------------------------------------------------*/
43
44 /******************************************************************************/
45 /*            Cortex-M0 Processor Interruption and Exception Handlers         */ 
46 /******************************************************************************/
47
48 /**
49 * @brief This function handles Non maskable interrupt.
50 */
51 void NMI_Handler(void)
52 {
53   /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
54
55   /* USER CODE END NonMaskableInt_IRQn 0 */
56   /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
57
58   /* USER CODE END NonMaskableInt_IRQn 1 */
59 }
60
61 /**
62 * @brief This function handles Hard fault interrupt.
63 */
64 void HardFault_Handler(void)
65 {
66   /* USER CODE BEGIN HardFault_IRQn 0 */
67
68   /* USER CODE END HardFault_IRQn 0 */
69   while (1)
70   {
71     /* USER CODE BEGIN W1_HardFault_IRQn 0 */
72     /* USER CODE END W1_HardFault_IRQn 0 */
73   }
74   /* USER CODE BEGIN HardFault_IRQn 1 */
75
76   /* USER CODE END HardFault_IRQn 1 */
77 }
78
79 /**
80 * @brief This function handles System service call via SWI instruction.
81 */
82 void SVC_Handler(void)
83 {
84   /* USER CODE BEGIN SVC_IRQn 0 */
85
86   /* USER CODE END SVC_IRQn 0 */
87   /* USER CODE BEGIN SVC_IRQn 1 */
88
89   /* USER CODE END SVC_IRQn 1 */
90 }
91
92 /**
93 * @brief This function handles Pendable request for system service.
94 */
95 void PendSV_Handler(void)
96 {
97   /* USER CODE BEGIN PendSV_IRQn 0 */
e1f350 98   SCB->ICSR=SCB_ICSR_PENDSVCLR_Msk; //1<<SCB_ICSR_PENDSVCLR_Pos;
Q 99 //    NVIC_ClearPendingIRQ(PendSV_IRQn);    
bfc108 100     PendSvCount++;
e1f350 101 //    NVIC_DisableIRQ(PendSV_IRQn);
Q 102     PendSvCallBack();
bfc108 103   /* USER CODE END PendSV_IRQn 0 */
Q 104   /* USER CODE BEGIN PendSV_IRQn 1 */
105
106   /* USER CODE END PendSV_IRQn 1 */
107 }
108
109 /**
110 * @brief This function handles System tick timer.
111 */
112 void SysTick_Handler(void)
113 {
114   /* USER CODE BEGIN SysTick_IRQn 0 */
115
116   /* USER CODE END SysTick_IRQn 0 */
117   HAL_IncTick();
118   HAL_SYSTICK_IRQHandler();
119   /* USER CODE BEGIN SysTick_IRQn 1 */
120
121   /* USER CODE END SysTick_IRQn 1 */
122 }
123
124 /******************************************************************************/
125 /* STM32F0xx Peripheral Interrupt Handlers                                    */
126 /* Add here the Interrupt Handlers for the used peripherals.                  */
127 /* For the available peripheral interrupt handler names,                      */
128 /* please refer to the startup file (startup_stm32f0xx.s).                    */
129 /******************************************************************************/
130
131 /**
132 * @brief This function handles DMA1 channel 2 and 3 interrupts.
133 */
134 void DMA1_Channel2_3_IRQHandler(void)
135 {
136   /* USER CODE BEGIN DMA1_Channel2_3_IRQn 0 */
137     Uart1DmaInts++;
138     if (LL_DMA_IsActiveFlag_TC2(DMA1))
139     {
140
141         Uart1Stat.SendBytes+=Uart1Stat.DMASendLen;
142         DelData(&Uart1Stat.QTx,Uart1Stat.DMASendLen);
143         LL_DMA_ClearFlag_TC2(DMA1);
144         
145         if (!IsEmpty(&Uart1Stat.QTx))
146         {
147             int len1=GetContinueData(&Uart1Stat.QTx);
148 //            if (len1>128) len1=128;            
149             LL_DMA_DisableChannel(DMA1,LL_DMA_CHANNEL_2);        
150             LL_DMA_SetMemoryAddress(DMA1,LL_DMA_CHANNEL_2,(uint32_t)GetReadBuffer(&Uart1Stat.QTx));
151             LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_2,len1);
152             LL_DMA_EnableChannel(DMA1,LL_DMA_CHANNEL_2);
153             Uart1Stat.DMASendLen=len1;
154             LL_USART_EnableDMAReq_TX(USART1);
155         }
156         else
157         {
158             Uart1Stat.DMASendLen=0;
159             Uart1Stat.Sending=0;
160         }                
161     }
162   /* USER CODE END DMA1_Channel2_3_IRQn 0 */
163   
164   /* USER CODE BEGIN DMA1_Channel2_3_IRQn 1 */
165     if (LL_DMA_IsActiveFlag_TC3(DMA1))
166     {
167         LL_DMA_ClearFlag_TC3(DMA1);
168
169     }
170   /* USER CODE END DMA1_Channel2_3_IRQn 1 */
171 }
172
173 void DMA1_Channel4_5_IRQHandler(void)
174 {
175   /* USER CODE BEGIN DMA1_Channel4_5_IRQn 0 */
176     Uart2DmaInts++;
177     if (LL_DMA_IsActiveFlag_TC4(DMA1))
178     {
e1f350 179         LL_DMA_ClearFlag_TC4(DMA1);
Q 180 /*        
bfc108 181         Uart2Stat.SendBytes+=Uart2Stat.DMASendLen;
Q 182         DelData(&Uart2Stat.QTx,Uart2Stat.DMASendLen);
e1f350 183
bfc108 184         
Q 185         if (!IsEmpty(&Uart2Stat.QTx))
186         {
187             int len1=GetContinueData(&Uart2Stat.QTx);
188 //            if (len1>128) len1=128;            
189             LL_DMA_DisableChannel(DMA1,LL_DMA_CHANNEL_4);        
190             LL_DMA_SetMemoryAddress(DMA1,LL_DMA_CHANNEL_4,(uint32_t)GetReadBuffer(&Uart2Stat.QTx));
191             LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_4,len1);
192             LL_DMA_EnableChannel(DMA1,LL_DMA_CHANNEL_4);
193             Uart2Stat.DMASendLen=len1;
194             LL_USART_EnableDMAReq_TX(USART2);
195         }
196         else
e1f350 197 */        
bfc108 198         {
Q 199             Uart2Stat.DMASendLen=0;
200             Uart2Stat.Sending=0;
201         }                
202     }
203   /* USER CODE END DMA1_Channel4_5_IRQn 0 */
204   
205   /* USER CODE BEGIN DMA1_Channel4_5_IRQn 1 */
206     if (LL_DMA_IsActiveFlag_TC5(DMA1))
207     {
208         LL_DMA_ClearFlag_TC5(DMA1);
e1f350 209         
bfc108 210
Q 211     }
212   /* USER CODE END DMA1_Channel4_5_IRQn 1 */
213 }
214 /**
215 * @brief This function handles USART1 global interrupt.
216 */
217 void USART1_IRQHandler(void)
218 {
219   /* USER CODE BEGIN USART1_IRQn 0 */
220 //    LL_GPIO_TogglePin(GPIOB,LL_GPIO_PIN_7);
221
222     if (LL_USART_IsActiveFlag_RXNE(USART1))
223     {
224         Uart1BaudGot=1;
225         Uart1BaudFirstGot=1;
226         Uart1Stat.RXNECount++;
227         unsigned char ch=LL_USART_ReceiveData8(USART1);
e1f350 228         // PushOne(&Uart1Stat.QRx,ch);
bfc108 229         Uart1Stat.RecvBytes++;
Q 230         Uart1RecvBuf1[Uart1RecvBuf1DataLen++]=ch;
231         //LL_USART_TransmitData8(USART1,ch);
232     }
233     if (LL_USART_IsActiveFlag_ORE(USART1))
234     {
235         LL_USART_ClearFlag_ORE(USART1);
236         Uart1Stat.OverRunCount++;
237     }
238     if (LL_USART_IsEnabledIT_IDLE(USART1)&&LL_USART_IsActiveFlag_IDLE(USART1))
239     {//接收完成
240         LL_USART_ClearFlag_IDLE(USART1);
241         Uart1RecvDone();
242     }    
243   /* USER CODE END USART1_IRQn 0 */
244   /* USER CODE BEGIN USART1_IRQn 1 */
245     if (LL_USART_IsActiveFlag_TC(USART1))
246     {//发送完成
247         LL_USART_ClearFlag_TC(USART1);
248         Uart1SendDone();
249     }    
250   /* USER CODE END USART1_IRQn 1 */
251 }
252
253 void USART2_IRQHandler(void)
254 {
255   /* USER CODE BEGIN USART2_IRQn 0 */
256 //    LL_GPIO_TogglePin(GPIOB,LL_GPIO_PIN_7);
257
258     if (LL_USART_IsActiveFlag_RXNE(USART2))
259     {
e1f350 260     //    unsigned char ch=LL_USART_ReceiveData8(USART2);
Q 261     //    Uart2Stat.RXNECount++;
262         // PushOne(&Uart2Stat.QRx,ch);
263     //    Uart2Stat.RecvBytes++;
264     //    Uart2RecvBuf1[Uart2RecvBuf1DataLen++]=ch;
bfc108 265
Q 266         //LL_USART_TransmitData8(USART2,ch);
267     }
268     if (LL_USART_IsActiveFlag_ORE(USART2))
269     {
270         LL_USART_ClearFlag_ORE(USART2);
271         Uart2Stat.OverRunCount++;
272     }
273     if (LL_USART_IsEnabledIT_IDLE(USART2)&&LL_USART_IsActiveFlag_IDLE(USART2))
274     {//接收完成
275         LL_USART_ClearFlag_IDLE(USART2);
276         Uart2RecvDone();
277     }    
278   /* USER CODE END USART2_IRQn 0 */
279   /* USER CODE BEGIN USART2_IRQn 1 */
280     if (LL_USART_IsActiveFlag_TC(USART2))
281     {//发送完成
282         LL_USART_ClearFlag_TC(USART2);
283         Uart2SendDone();
284     }    
285   /* USER CODE END USART2_IRQn 1 */
286 }
287
288 /* USER CODE BEGIN 1 */
289
290 /* USER CODE END 1 */
291 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/