текучка

This commit is contained in:
klassents committed 2024-10-09 11:27:37 +07:00
1 parent b920713163
commit 47ff1ce4eb
7 files changed
+141 -86

No files matched your search

+6 -11
View File
@@ -4,6 +4,7 @@
#include "pins_arduino.h"
#include "wiring_digital.h"
#include "WInterrupts.h"
#include "wiring_LL.h"
extern void ErrorMsgHandler(const char * msg);
@@ -100,33 +101,27 @@ void detachInterrupt(uint8_t interruptNum)
void disableInterrupt(uint8_t interruptNum)
{
if(interruptNum < EXTERNAL_NUM_INTERRUPTS)
{
int irq_line_num = interruptToGpioIntLine(interruptNum) >> GPIO_IRQ_LINE_S;
// disable gpio interrupt line
GPIO_IRQ->ENABLE_CLEAR = (1 << irq_line_num);
}
GPIO_IRQ_LINE_DISABLE(interruptToGpioIntLine(interruptNum));
}
// enable single interrupt
void enableInterrupt(uint8_t interruptNum)
{
if(interruptNum < EXTERNAL_NUM_INTERRUPTS)
{
int irq_line_num = interruptToGpioIntLine(interruptNum) >> GPIO_IRQ_LINE_S;
// enable gpio interrupt line
GPIO_IRQ->ENABLE_SET = (1 << irq_line_num);
}
GPIO_IRQ_LINE_ENABLE(interruptToGpioIntLine(interruptNum));
}
// common gpio interrupt handler
void gpio_interrupts_handler(void) __attribute__((noinline, section(".ram_text")));
void gpio_interrupts_handler(void)
{
// go through all the interrupts and call the handler for the triggered line
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
{
if (HAL_GPIO_LineInterruptState(interruptToGpioIntLine(i)))
if (GPIO_IRQ_LINE_STATE(interruptToGpioIntLine(i)))
intFunc[i]();
}
HAL_GPIO_ClearInterrupts();
GPIO_IRQ_CLEAR_ALL();
}
+1 -8
View File
@@ -1,8 +1,5 @@
#include "mik32_hal_irq.h"
#include "mik32_hal_gpio.h"
// isr functions
extern void serial_handler_wrapper(uint8_t uartNumInt);
extern void gpio_interrupts_handler(void);
@@ -11,16 +8,13 @@ void __attribute__((weak)) wire_handler_wrapper(void)
{
// dummy function for case when wire library is not in use
}
extern void softSerial_handler_wrapper(void);
// ---------------------------------------------- //
void __attribute__((noinline, section(".ram_text"))) trap_handler(void)
{
((GPIO_0)->CLEAR = (GPIO_PIN_0));
// gpio interrupt
if (EPIC_CHECK_GPIO_IRQ())
// gpio_interrupts_handler();
softSerial_handler_wrapper();
gpio_interrupts_handler();
// tone timer interrupt
if (EPIC_CHECK_TIMER16_1())
@@ -40,5 +34,4 @@ void __attribute__((noinline, section(".ram_text"))) trap_handler(void)
// reset all interrupts
HAL_EPIC_Clear(0xFFFFFFFF);
((GPIO_0)->SET = (GPIO_PIN_0));
}
+10 -6
View File
@@ -16,14 +16,18 @@
set_csr(mie, MIE_MEIE)
// ----------------- GPIO ----------------- //
#define GPIO_SET_PIN(GPIO_x, pin) ((GPIO_x)->SET = (pin))
#define GPIO_CLEAR_PIN(GPIO_x, pin) ((GPIO_x)->CLEAR = (pin))
#define GPIO_READ_PIN(GPIO_x, pin) (((GPIO_x)->SET & (pin)) != (uint32_t)GPIO_PIN_LOW ? GPIO_PIN_HIGH : GPIO_PIN_LOW)
#define GPIO_SET_PIN(GPIO_x, pin) ((GPIO_x)->SET = (pin))
#define GPIO_CLEAR_PIN(GPIO_x, pin) ((GPIO_x)->CLEAR = (pin))
#define GPIO_READ_PIN(GPIO_x, pin) (((GPIO_x)->SET & (pin)) != (uint32_t)GPIO_PIN_LOW ? GPIO_PIN_HIGH : GPIO_PIN_LOW)
// ----------------- GPIO IRQ ----------------- //
#define GPIO_IRQ_LINE_ENABLE(lineMask) ( GPIO_IRQ->ENABLE_SET = (1 << (lineMask >> GPIO_IRQ_LINE_S)) )
#define GPIO_IRQ_LINE_DISABLE(lineMask) ( GPIO_IRQ->ENABLE_CLEAR = (1 << (lineMask >> GPIO_IRQ_LINE_S)) )
#define GPIO_IRQ_CLEAR_ALL() (GPIO_IRQ->CLEAR = 0b11111111)
#define GPIO_IRQ_LINE_ENABLE(lineMask) ( GPIO_IRQ->ENABLE_SET = (1 << (lineMask >> GPIO_IRQ_LINE_S)) )
#define GPIO_IRQ_LINE_DISABLE(lineMask) ( GPIO_IRQ->ENABLE_CLEAR = (1 << (lineMask >> GPIO_IRQ_LINE_S)) )
#define GPIO_IRQ_LINE_STATE(lineMask) ((GPIO_IRQ->INTERRUPT & (1 << (lineMask >> GPIO_IRQ_LINE_S))) != 0)
#define GPIO_IRQ_CLEAR_ALL() ( GPIO_IRQ->CLEAR = 0b11111111)
// ----------------- PIN CONFIG ----------------- //
// return config of pin with pinShift(0...16) in portReg (config, pupd, ds for ports 0...2)
#define PIN_GET_PAD_CONFIG(portReg, pinShift) ((PAD_CONFIG->portReg >> (pinShift<<1)) & 0b11)
#endif /* _WIRING_LL_H_ */