изменила название дефайна про кол-во прерываний. В wiring_private.h подтягиваю дефайн из pins_arduino
This commit is contained in:
parent
65d07edece
commit
a8b2cf3b0c
@ -27,24 +27,24 @@ void noInterrupts(void)
|
||||
}
|
||||
|
||||
// we can provide no more than 8 interrupts on gpio at the same time
|
||||
static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS] =
|
||||
static volatile voidFuncPtr intFunc[EXTERNAL_INTERRUPTS_QTY] =
|
||||
{
|
||||
#if EXTERNAL_NUM_INTERRUPTS > 7
|
||||
#if EXTERNAL_INTERRUPTS_QTY > 7
|
||||
nothing,
|
||||
#endif
|
||||
#if EXTERNAL_NUM_INTERRUPTS > 6
|
||||
#if EXTERNAL_INTERRUPTS_QTY > 6
|
||||
nothing,
|
||||
#endif
|
||||
#if EXTERNAL_NUM_INTERRUPTS > 5
|
||||
#if EXTERNAL_INTERRUPTS_QTY > 5
|
||||
nothing,
|
||||
#endif
|
||||
#if EXTERNAL_NUM_INTERRUPTS > 4
|
||||
#if EXTERNAL_INTERRUPTS_QTY > 4
|
||||
nothing,
|
||||
#endif
|
||||
#if EXTERNAL_NUM_INTERRUPTS > 3
|
||||
#if EXTERNAL_INTERRUPTS_QTY > 3
|
||||
nothing,
|
||||
#endif
|
||||
#if EXTERNAL_NUM_INTERRUPTS > 2
|
||||
#if EXTERNAL_INTERRUPTS_QTY > 2
|
||||
nothing,
|
||||
#endif
|
||||
nothing,
|
||||
@ -54,7 +54,7 @@ static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS] =
|
||||
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)
|
||||
{
|
||||
// if the interrupt number does not exceed the total number
|
||||
if(interruptNum < EXTERNAL_NUM_INTERRUPTS)
|
||||
if(interruptNum < EXTERNAL_INTERRUPTS_QTY)
|
||||
{
|
||||
intFunc[interruptNum] = userFunc; // save pointer to irq handler
|
||||
|
||||
@ -85,7 +85,7 @@ void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)
|
||||
|
||||
void detachInterrupt(uint8_t interruptNum)
|
||||
{
|
||||
if(interruptNum < EXTERNAL_NUM_INTERRUPTS)
|
||||
if(interruptNum < EXTERNAL_INTERRUPTS_QTY)
|
||||
{
|
||||
// disable the interrupt in line
|
||||
HAL_GPIO_DeInitInterruptLine(interruptToGpioIntLine(interruptNum));
|
||||
@ -98,7 +98,7 @@ void detachInterrupt(uint8_t interruptNum)
|
||||
// disable single interrupt
|
||||
void disableInterrupt(uint8_t interruptNum)
|
||||
{
|
||||
if(interruptNum < EXTERNAL_NUM_INTERRUPTS)
|
||||
if(interruptNum < EXTERNAL_INTERRUPTS_QTY)
|
||||
// disable gpio interrupt line
|
||||
GPIO_IRQ_LINE_DISABLE(interruptToGpioIntLine(interruptNum));
|
||||
}
|
||||
@ -106,7 +106,7 @@ void disableInterrupt(uint8_t interruptNum)
|
||||
// enable single interrupt
|
||||
void enableInterrupt(uint8_t interruptNum)
|
||||
{
|
||||
if(interruptNum < EXTERNAL_NUM_INTERRUPTS)
|
||||
if(interruptNum < EXTERNAL_INTERRUPTS_QTY)
|
||||
// enable gpio interrupt line
|
||||
GPIO_IRQ_LINE_ENABLE(interruptToGpioIntLine(interruptNum));
|
||||
}
|
||||
@ -115,7 +115,7 @@ void enableInterrupt(uint8_t interruptNum)
|
||||
void __attribute__((noinline, section(".ram_text"), optimize("O3"))) gpio_interrupt_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++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (GPIO_IRQ_LINE_STATE(interruptToGpioIntLine(i)))
|
||||
intFunc[i]();
|
||||
|
||||
@ -11,7 +11,7 @@ extern "C"{
|
||||
#endif
|
||||
|
||||
// available interrupts number
|
||||
#define EXTERNAL_NUM_INTERRUPTS 7
|
||||
#define EXTERNAL_NUM_INTERRUPTS EXTERNAL_INTERRUPTS_QTY
|
||||
|
||||
typedef void (*voidFuncPtr)(void);
|
||||
|
||||
|
||||
@ -95,7 +95,7 @@ void SPIClass::end()
|
||||
|
||||
void SPIClass::usingInterrupt(uint8_t interruptNumber)
|
||||
{
|
||||
if(interruptNumber < EXTERNAL_NUM_INTERRUPTS)
|
||||
if(interruptNumber < EXTERNAL_INTERRUPTS_QTY)
|
||||
{
|
||||
noInterrupts(); // prevent transactionBegin
|
||||
interruptMask |= (1 << interruptNumber); // add new interrupt to mask
|
||||
@ -107,7 +107,7 @@ void SPIClass::usingInterrupt(uint8_t interruptNumber)
|
||||
|
||||
void SPIClass::notUsingInterrupt(uint8_t interruptNumber)
|
||||
{
|
||||
if(interruptNumber < EXTERNAL_NUM_INTERRUPTS)
|
||||
if(interruptNumber < EXTERNAL_INTERRUPTS_QTY)
|
||||
{
|
||||
noInterrupts(); // prevent transactionBegin
|
||||
interruptMask &= ~(1<<interruptNumber); // delete interrupt from mask
|
||||
@ -122,7 +122,7 @@ void SPIClass::beginTransaction(SPISettings settings)
|
||||
// disable interrupts in use if necessary
|
||||
if (spiInUse && (interruptMode > 0))
|
||||
{
|
||||
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (interruptMask & (1 << i))
|
||||
// disable every interrupt by it's number
|
||||
@ -234,7 +234,7 @@ void SPIClass::endTransaction(void)
|
||||
// enable interrupts in use
|
||||
if (spiInUse && (interruptMode > 0))
|
||||
{
|
||||
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (interruptMask & (1 << i))
|
||||
// enable every interrupt in use by it's number
|
||||
|
||||
@ -111,7 +111,8 @@ static const uint8_t SCL = PIN_WIRE_SCL;
|
||||
#define WIRE_FREQ_1000K 1000000
|
||||
|
||||
// interrupts
|
||||
extern uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3];
|
||||
#define EXTERNAL_INTERRUPTS_QTY 7
|
||||
extern uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3];
|
||||
// determines the board pin number by interrupt number
|
||||
#define interruptToDigitalPin(interruptNum) (interruptInfo[interruptNum][0])
|
||||
// determines gpio interrupt line by interrupt number
|
||||
|
||||
@ -224,7 +224,7 @@ HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber)
|
||||
// ---------------------- interrupts ---------------------- //
|
||||
// interrupt table is stored in ram to improve performance
|
||||
// index = interrupt number. In each row {digitalPinNumber, IntLineValue, IntMuxValue}
|
||||
uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3] =
|
||||
uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3] =
|
||||
{
|
||||
{ 2, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT0
|
||||
{ 3, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_0}, // INT1
|
||||
@ -237,7 +237,7 @@ uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3] =
|
||||
|
||||
int8_t digitalPinToGpioIntMux(uint8_t digPinNumber)
|
||||
{
|
||||
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (interruptInfo[i][0] == digPinNumber)
|
||||
return interruptInfo[i][2];
|
||||
@ -246,7 +246,7 @@ int8_t digitalPinToGpioIntMux(uint8_t digPinNumber)
|
||||
}
|
||||
int8_t digitalPinToGpioIntLine(uint8_t digPinNumber)
|
||||
{
|
||||
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (interruptInfo[i][0] == digPinNumber)
|
||||
return interruptInfo[i][1];
|
||||
@ -256,7 +256,7 @@ int8_t digitalPinToGpioIntLine(uint8_t digPinNumber)
|
||||
|
||||
int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine)
|
||||
{
|
||||
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (interruptInfo[i][1] == gpioIntLine)
|
||||
return i;
|
||||
@ -266,7 +266,7 @@ int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine)
|
||||
|
||||
int8_t digitalPinToInterrupt(uint32_t digPinNumber)
|
||||
{
|
||||
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (interruptInfo[i][0] == digPinNumber)
|
||||
return i;
|
||||
|
||||
@ -158,7 +158,8 @@ static const uint8_t SCL = PIN_WIRE_SCL;
|
||||
#define WIRE_FREQ_1000K 1000000
|
||||
|
||||
// interrupts
|
||||
extern uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3];
|
||||
#define EXTERNAL_INTERRUPTS_QTY 7
|
||||
extern uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3];
|
||||
// determines the board pin number by interrupt number
|
||||
#define interruptToDigitalPin(interruptNum) (interruptInfo[interruptNum][0])
|
||||
// determines gpio interrupt line by interrupt number
|
||||
|
||||
@ -164,27 +164,27 @@ HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber)
|
||||
case 3:
|
||||
return TIMER32_CHANNEL_3;
|
||||
default:
|
||||
return 255;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------- interrupts ---------------------- //
|
||||
// interrupt table is stored in ram to improve performance
|
||||
// index = interrupt number. In each row {digitalPinNumber, IntLineValue, IntMuxValue}
|
||||
uint8_t interruptInfo[EXTERNAL_NUM_INTERRUPTS][3] =
|
||||
{
|
||||
{2, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT0
|
||||
{3, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_0}, // INT1
|
||||
{4, GPIO_LINE_4, GPIO_MUX_LINE_4_PORT0_8}, // INT2
|
||||
{5, GPIO_LINE_1, GPIO_MUX_LINE_1_PORT0_1}, // INT3
|
||||
{8, GPIO_LINE_5, GPIO_MUX_LINE_5_PORT1_9}, // INT4
|
||||
{9, GPIO_LINE_3, GPIO_MUX_LINE_3_PORT0_3}, // INT5
|
||||
{BTN_BUILTIN, GPIO_LINE_6, GPIO_MUX_LINE_6_PORT2_6}, // INT6 (button)
|
||||
uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3] =
|
||||
{
|
||||
{2, GPIO_LINE_2, GPIO_MUX_LINE_2_PORT0_10}, // INT0
|
||||
{3, GPIO_LINE_0, GPIO_MUX_LINE_0_PORT0_0}, // INT1
|
||||
{4, GPIO_LINE_4, GPIO_MUX_LINE_4_PORT0_8}, // INT2
|
||||
{5, GPIO_LINE_1, GPIO_MUX_LINE_1_PORT0_1}, // INT3
|
||||
{8, GPIO_LINE_5, GPIO_MUX_LINE_5_PORT1_9}, // INT4
|
||||
{9, GPIO_LINE_3, GPIO_MUX_LINE_3_PORT0_3}, // INT5
|
||||
{BTN_BUILTIN, GPIO_LINE_6, GPIO_MUX_LINE_6_PORT2_6}, // INT6 (button) // todo кнопка на этом пине??
|
||||
};
|
||||
|
||||
int8_t digitalPinToGpioIntMux(uint8_t digPinNumber)
|
||||
{
|
||||
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (interruptInfo[i][0] == digPinNumber)
|
||||
return interruptInfo[i][2];
|
||||
@ -193,7 +193,7 @@ int8_t digitalPinToGpioIntMux(uint8_t digPinNumber)
|
||||
}
|
||||
int8_t digitalPinToGpioIntLine(uint8_t digPinNumber)
|
||||
{
|
||||
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (interruptInfo[i][0] == digPinNumber)
|
||||
return interruptInfo[i][1];
|
||||
@ -203,7 +203,7 @@ int8_t digitalPinToGpioIntLine(uint8_t digPinNumber)
|
||||
|
||||
int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine)
|
||||
{
|
||||
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (interruptInfo[i][1] == gpioIntLine)
|
||||
return i;
|
||||
@ -213,7 +213,7 @@ int8_t gpioIntLineToInterrupt(uint32_t gpioIntLine)
|
||||
|
||||
int8_t digitalPinToInterrupt(uint32_t digPinNumber)
|
||||
{
|
||||
for (uint8_t i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++)
|
||||
for (uint8_t i = 0; i < EXTERNAL_INTERRUPTS_QTY; i++)
|
||||
{
|
||||
if (interruptInfo[i][0] == digPinNumber)
|
||||
return i;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user