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