 Okay, now we have the button, we have the callback. You now know where to find the callback, the IRQ handler, this is everything perfect. Now, we can, for example, play with the IRQ and I show you new feature. For example, I now decided that I don't want to leave this IRQ handler. I will, I want here after I press the button, stay in this callback forever. And I want to toggle with the delay here inside, inside this function every each one second. Then I here put the while, sorry, let's stop the debugging a little bit better. I turn to my perspective. Put here the while one and I put here the delay function. Here put 1000 to create the one second delay. Then what we expect from this function, we expect that if we press the button, we jump here into, into this certain and we will toggle with the left each one, one second. Then we can try this. We will save the file, put my file, and jump with the bugger. Yes, and I need that, what that means? All right, I press it, and what happens? The let is only on, it's not blinking. Now why? This can happen because this function, this delay function using how the delay works, it's used with the SysStick. The SysStick keeps the one millisecond time base for the delay, but the SysStick operates through the interrupt. If you remember, the SysStick is here. Then what happened? That why the SysStick not entering the interrupt? The problem is that we can have only one, we're running interrupt at the time. This means only one interrupt can be active. This mean that if we are in this interrupt, we cannot enter the SysStick interrupt. Then we are blocked and this delay function not work because we are stuck here waiting for the SysStick to count up. Then what is happening? And what to solve this? For this, the NVIC Sys have the second functionality. We can hear, we can hear the priorities. We can hear, we can have here the pension priorities and the sub priorities. And also on some M3 and M4 core devices, you can set also how many bits are used for the pension priorities and how many bits for the sub priorities. In our case, we will use all the four bits for the pension priorities. What is different? The pension priority mean that if you enter if the interrupt, which is with the lower number, it wants to pan or wants to be active, it will stop the interrupt with the lower number and start executing the interrupt with the higher number. This mean the pension. The sub priority means that only when the interrupts start in the same time, it will be decided that the first interrupt will be the interrupt with the lower number. In our case, we have the X-tay and you can see all the priorities have the same number. Also the C-stake here, that's also number. Then to allow the C-stake to run, the C-stake need to have lower number than our X-tay. And here have the C-stake have the zero. This is the lowest value. In our case, we can put number between one to 15 because we have only two interrupts, I select one. Okay, I click to apply. Okay, I generate my code to open my folder. I open this one. Okay, we can start everything, we can build it. We can expect what will happen. If everything will work as we expected, then after I change these priorities, the X-tay, the C-stake have now the higher pension parity. This means that when I am in the lower priority interrupt, which is this one, I'm painting here, then still the C-stake have the lower priority. It's the higher priority for him, lower number is higher priority. Then I can always access this C-stake interrupt. I hear the successful in my project. I run the debugger, I'll go to the perspective, I run my code, and when I press the button, I can see that my light is blinking. This means our configuration is working. Then don't please not forget on the interrupt priorities because it's sometimes very, very important that one interrupt can have the higher priority than the other interrupts. And you always need to check during your design of your application, which interrupt will be higher. And you need to ensure that you cannot block your application in the interrupt. On the end, put the delay into interrupt. It's not clear solution, it's not recommended. The interrupts may be as short as possible, then never put the delays into interrupt.