mirror of https://github.com/ARMmbed/mbed-os.git
commit
792c7f286b
|
@ -167,7 +167,7 @@ public:
|
|||
*
|
||||
* @returns
|
||||
* The function object created for 'fptr'
|
||||
*/
|
||||
*/
|
||||
pFunctionPointer_t fall_add(void (*fptr)(void)) {
|
||||
return fall_add_common(fptr);
|
||||
}
|
||||
|
@ -240,6 +240,14 @@ public:
|
|||
*/
|
||||
void mode(PinMode pull);
|
||||
|
||||
/** Enable IRQ
|
||||
*/
|
||||
void enable_irq();
|
||||
|
||||
/** Disable IRQ
|
||||
*/
|
||||
void disable_irq();
|
||||
|
||||
static void _irq_handler(uint32_t id, gpio_irq_event event);
|
||||
|
||||
protected:
|
||||
|
|
|
@ -99,6 +99,14 @@ void InterruptIn::_irq_handler(uint32_t id, gpio_irq_event event) {
|
|||
}
|
||||
}
|
||||
|
||||
void InterruptIn::enable_irq() {
|
||||
gpio_irq_enable(&gpio_irq);
|
||||
}
|
||||
|
||||
void InterruptIn::disable_irq() {
|
||||
gpio_irq_disable(&gpio_irq);
|
||||
}
|
||||
|
||||
#ifdef MBED_OPERATORS
|
||||
InterruptIn::operator int() {
|
||||
return read();
|
||||
|
|
|
@ -37,6 +37,8 @@ typedef void (*gpio_irq_handler)(uint32_t id, gpio_irq_event event);
|
|||
int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id);
|
||||
void gpio_irq_free(gpio_irq_t *obj);
|
||||
void gpio_irq_set (gpio_irq_t *obj, gpio_irq_event event, uint32_t enable);
|
||||
void gpio_irq_enable(gpio_irq_t *obj);
|
||||
void gpio_irq_disable(gpio_irq_t *obj);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -154,3 +154,19 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
// Interrupt configuration and clear interrupt
|
||||
port->PCR[obj->pin] = (port->PCR[obj->pin] & ~PORT_PCR_IRQC_MASK) | irq_settings | PORT_PCR_ISF_MASK;
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
if (obj->port == PortA) {
|
||||
NVIC_EnableIRQ(PORTA_IRQn);
|
||||
} else if (obj->port == PortB) {
|
||||
NVIC_EnableIRQ(PORTB_IRQn);
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
if (obj->port == PortA) {
|
||||
NVIC_DisableIRQ(PORTA_IRQn);
|
||||
} else if (obj->port == PortB) {
|
||||
NVIC_DisableIRQ(PORTB_IRQn);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -143,3 +143,19 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
// Interrupt configuration and clear interrupt
|
||||
port->PCR[obj->pin] = (port->PCR[obj->pin] & ~PORT_PCR_IRQC_MASK) | irq_settings | PORT_PCR_ISF_MASK;
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
if (obj->port == PortA) {
|
||||
NVIC_EnableIRQ(PORTA_IRQn);
|
||||
} else if (obj->port == PortD) {
|
||||
NVIC_EnableIRQ(PORTD_IRQn);
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
if (obj->port == PortA) {
|
||||
NVIC_DisableIRQ(PORTA_IRQn);
|
||||
} else if (obj->port == PortD) {
|
||||
NVIC_DisableIRQ(PORTD_IRQn);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -143,3 +143,19 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
// Interrupt configuration and clear interrupt
|
||||
port->PCR[obj->pin] = (port->PCR[obj->pin] & ~PORT_PCR_IRQC_MASK) | irq_settings | PORT_PCR_ISF_MASK;
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
if (obj->port == PortA) {
|
||||
NVIC_EnableIRQ(PORTA_IRQn);
|
||||
} else if (obj->port == PortD) {
|
||||
NVIC_EnableIRQ(PORTD_IRQn);
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
if (obj->port == PortA) {
|
||||
NVIC_DisableIRQ(PORTA_IRQn);
|
||||
} else if (obj->port == PortD) {
|
||||
NVIC_DisableIRQ(PORTD_IRQn);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -131,3 +131,11 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
NVIC_EnableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
NVIC_DisableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
|
||||
}
|
||||
|
|
|
@ -174,3 +174,43 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
uint32_t port_num = ((obj->pin & 0xF000) >> PORT_SHIFT);
|
||||
switch (port_num) {
|
||||
case 0:
|
||||
NVIC_EnableIRQ(EINT0_IRQn);
|
||||
break;
|
||||
case 1:
|
||||
NVIC_EnableIRQ(EINT1_IRQn);
|
||||
break;
|
||||
case 2:
|
||||
NVIC_EnableIRQ(EINT2_IRQn);
|
||||
break;
|
||||
case 3:
|
||||
NVIC_EnableIRQ(EINT3_IRQn);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
uint32_t port_num = ((obj->pin & 0xF000) >> PORT_SHIFT);
|
||||
switch (port_num) {
|
||||
case 0:
|
||||
NVIC_DisableIRQ(EINT0_IRQn);
|
||||
break;
|
||||
case 1:
|
||||
NVIC_DisableIRQ(EINT1_IRQn);
|
||||
break;
|
||||
case 2:
|
||||
NVIC_DisableIRQ(EINT2_IRQn);
|
||||
break;
|
||||
case 3:
|
||||
NVIC_DisableIRQ(EINT3_IRQn);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -131,3 +131,12 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
NVIC_EnableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
NVIC_DisableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
|
||||
}
|
||||
|
||||
|
|
|
@ -150,3 +150,12 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
NVIC_EnableIRQ(EINT3_IRQn);
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
NVIC_DisableIRQ(EINT3_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
@ -143,3 +143,12 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
NVIC_EnableIRQ(EINT3_IRQn);
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
NVIC_DisableIRQ(EINT3_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
@ -164,3 +164,11 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
NVIC_EnableIRQ(GPIO_IRQn);
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
NVIC_DisableIRQ(GPIO_IRQn);
|
||||
}
|
||||
|
|
|
@ -134,3 +134,19 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
#if !defined(CORE_M0)
|
||||
NVIC_EnableIRQ((IRQn_Type)(PIN_INT0_IRQn + obj->ch));
|
||||
#else
|
||||
NVIC_EnableIRQ((IRQn_Type)(PIN_INT4_IRQn + obj->ch));
|
||||
#endif
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
#if !defined(CORE_M0)
|
||||
NVIC_DisableIRQ((IRQn_Type)(PIN_INT0_IRQn + obj->ch));
|
||||
#else
|
||||
NVIC_DisableIRQ((IRQn_Type)(PIN_INT4_IRQn + obj->ch));
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -125,3 +125,11 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
NVIC_EnableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
|
||||
}
|
||||
|
||||
void gpio_irq_disable(gpio_irq_t *obj) {
|
||||
NVIC_DisableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue