Compare commits
9 Commits
master
...
interrupts
Author | SHA1 | Date |
---|---|---|
|
87cb57bfab | 3 years ago |
|
62daf52da2 | 3 years ago |
|
a08467d8a3 | 3 years ago |
|
856f0278ea | 3 years ago |
|
323ee541ad | 3 years ago |
|
2a5aeb61e8 | 3 years ago |
|
15c0f36e11 | 3 years ago |
|
3e9b0d7cb8 | 3 years ago |
|
89bfc476b9 | 3 years ago |
@ -0,0 +1,97 @@
|
|||||||
|
#include "interrupt.h"
|
||||||
|
|
||||||
|
static void defaultHandler(){};
|
||||||
|
|
||||||
|
// pointers to dedicated interrupt handlers
|
||||||
|
|
||||||
|
void intInit(
|
||||||
|
intrType_t intType,
|
||||||
|
intHandler_t handler,
|
||||||
|
uint8_t priority)
|
||||||
|
{
|
||||||
|
NVIC_SetPriority(interruptTypeIndexList[intType], priority);
|
||||||
|
|
||||||
|
// TODO: add index ceck!
|
||||||
|
intHandlerList[intType] = (uint32_t)handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
void intEnableAll()
|
||||||
|
{
|
||||||
|
__enable_irq();
|
||||||
|
}
|
||||||
|
|
||||||
|
void intDissableAll()
|
||||||
|
{
|
||||||
|
__disable_irq();
|
||||||
|
}
|
||||||
|
|
||||||
|
void intEnable(
|
||||||
|
intrType_t intType)
|
||||||
|
{
|
||||||
|
NVIC_EnableIRQ(interruptTypeIndexList[intType]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void intDissable(
|
||||||
|
intrType_t intType)
|
||||||
|
{
|
||||||
|
NVIC_DisableIRQ(interruptTypeIndexList[intType]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interrupt service routines
|
||||||
|
|
||||||
|
void TIM2_IRQHandler()
|
||||||
|
{
|
||||||
|
|
||||||
|
if(TIM2->SR & TIM_SR_UIF) {
|
||||||
|
// clear flag
|
||||||
|
TIM2-> SR &= ~TIM_SR_UIF;
|
||||||
|
|
||||||
|
//TODO: call handler here
|
||||||
|
((intHandler_t)(intHandlerList[TIM2_UPDATE]))();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TIM2->SR & TIM_SR_CC1IF) {
|
||||||
|
TIM2-> SR &= ~TIM_SR_CC1IF;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TIM2->SR & TIM_SR_CC2IF) {
|
||||||
|
TIM2-> SR &= ~TIM_SR_CC2IF;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TIM2->SR & TIM_SR_CC3IF) {
|
||||||
|
TIM2-> SR &= ~TIM_SR_CC3IF;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TIM2->SR & TIM_SR_CC4IF) {
|
||||||
|
TIM2-> SR &= ~TIM_SR_CC4IF;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TIM2->SR & TIM_SR_TIF) {
|
||||||
|
TIM2-> SR &= ~TIM_SR_TIF;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TIM2->SR & TIM_SR_CC1OF) {
|
||||||
|
TIM2-> SR &= ~TIM_SR_CC1OF;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TIM2->SR & TIM_SR_CC2OF) {
|
||||||
|
TIM2-> SR &= ~TIM_SR_CC2OF;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TIM2->SR & TIM_SR_CC3OF) {
|
||||||
|
TIM2-> SR &= ~TIM_SR_CC3OF;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(TIM2->SR & TIM_SR_CC4OF) {
|
||||||
|
TIM2-> SR &= ~TIM_SR_CC4OF;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
#include "interrupt.h"
|
||||||
|
|
@ -0,0 +1,100 @@
|
|||||||
|
/**
|
||||||
|
**************************************************************************************************
|
||||||
|
* @file interrupt.h
|
||||||
|
* @author Kerem Yollu & Edwin Koch
|
||||||
|
* @date 30.10.2022
|
||||||
|
* @version 1.0
|
||||||
|
**************************************************************************************************
|
||||||
|
* @brief This is the genral interface for interrupts.
|
||||||
|
*
|
||||||
|
* **Detailed Description :**
|
||||||
|
* This the spi interface and belongs to the interface layer.
|
||||||
|
*
|
||||||
|
**************************************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _INTERRUPT_H_
|
||||||
|
#define _INTERRUPT_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "hardwareDescription.h"
|
||||||
|
|
||||||
|
/*! interrupt callback type for the handler */
|
||||||
|
typedef void (*intHandler_t)(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize Interrupt
|
||||||
|
*
|
||||||
|
* Initialize Interrupt by choosing the interrupt type, passing the functionpointer to the handler
|
||||||
|
* and selecting the priority.
|
||||||
|
* The interrupt will be automatically enabled and will be able to run after intEnableAll is
|
||||||
|
* called. If the interrupt should only run at a specific even one can controll it by calling
|
||||||
|
* intDissable prior to calling intEnableAll and calling intEnbale at a specific point and
|
||||||
|
* dissabling it again with intDisable
|
||||||
|
* When the desired interrupt occures the handler will be called.
|
||||||
|
* The interrupt type and priority level is dependent on the architecture of the target MCU.
|
||||||
|
* To find more information on what can be done one must read the documentation specific to the
|
||||||
|
* target MCU.
|
||||||
|
*
|
||||||
|
* @param intType interrupt type
|
||||||
|
* @param handler the interrupthandler
|
||||||
|
* @param priority the interrupt priority
|
||||||
|
*/
|
||||||
|
void intInit(
|
||||||
|
intrType_t intType,
|
||||||
|
intHandler_t handler,
|
||||||
|
uint8_t priority);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable all Interrupts
|
||||||
|
*
|
||||||
|
* Enables all interrupts globally.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void intEnableAll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable all Interrups
|
||||||
|
*
|
||||||
|
* Dissables all interrupts globally exept the non maskable ones given by the architecture of the
|
||||||
|
* MCU.
|
||||||
|
*/
|
||||||
|
void intDisableAll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable one interrupt type
|
||||||
|
*
|
||||||
|
* The Interrupt for the desired interrupt will be enabled. This means that interrupt of that
|
||||||
|
* type will occure. To revert this intDisable musst be called.
|
||||||
|
* It can be called when interrupts are are globally allowed or when disabled.
|
||||||
|
*
|
||||||
|
* @param intType interrupt type
|
||||||
|
*/
|
||||||
|
void intEnable(
|
||||||
|
intrType_t intType);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Dissable one interrupt type
|
||||||
|
*
|
||||||
|
* The Interrupt for the desired interrupt will be disabled. This means that no interrupt of that
|
||||||
|
* type will occure. To revert this intEnable musst be called.
|
||||||
|
* It can be called when interrupts are are globally allowed or when dissabled.
|
||||||
|
* It will not stop other all interrupts in contrast to intDissableAll.
|
||||||
|
*
|
||||||
|
* @param intType interrupt type
|
||||||
|
*/
|
||||||
|
void intDisable(
|
||||||
|
intrType_t intType);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in new issue