2 Commits

Author SHA1 Message Date
196398ac6f feat: updated supported interrupt pins 2025-08-17 08:45:52 +03:00
dfebb15213 perf: updated isr handler 2025-08-14 11:54:45 +03:00
5 changed files with 8 additions and 10 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.DS_Store

View File

@@ -9,7 +9,7 @@
## Note
1. Enable interrupt support only if input GPIO's are used.
2. All the INT GPIO's on the extenders must be connected to the one GPIO on AVR. Only PORTD4 - PORTD7 are acceptable!
2. All the INT GPIO's on the extenders must be connected to the one GPIO on AVR. Only PORTD0 - PORTD7 are acceptable!
3. The input GPIO's are always pullup to the power supply.
## Dependencies

View File

@@ -133,7 +133,7 @@ extern "C"
/**
* @brief PCF8574 ISR handler.
*/
void zh_avr_pcf8574_isr_handler(void);
BaseType_t zh_avr_pcf8574_isr_handler(void);
#ifdef __cplusplus
}

View File

@@ -1 +1 @@
1.0.0
1.2.0

View File

@@ -81,7 +81,7 @@ static avr_err_t _zh_avr_pcf8574_validate_config(const zh_avr_pcf8574_init_confi
ZH_ERROR_CHECK(config != NULL, AVR_ERR_INVALID_ARG);
ZH_ERROR_CHECK((config->i2c_address >= 0x20 && config->i2c_address <= 0x27) || (config->i2c_address >= 0x38 && config->i2c_address <= 0x3F), AVR_ERR_INVALID_ARG);
ZH_ERROR_CHECK(config->task_priority > tskIDLE_PRIORITY && config->stack_size >= 124, AVR_ERR_INVALID_ARG);
ZH_ERROR_CHECK(config->interrupt_gpio == 0xFF || config->interrupt_gpio == PORTD4 || config->interrupt_gpio == PORTD5 || config->interrupt_gpio == PORTD6 || config->interrupt_gpio == PORTD7, AVR_ERR_INVALID_ARG);
ZH_ERROR_CHECK(config->interrupt_gpio == 0xFF || (config->interrupt_gpio >= PORTD0 && config->interrupt_gpio <= PORTD7), AVR_ERR_INVALID_ARG);
return AVR_OK;
}
@@ -129,17 +129,14 @@ static avr_err_t _zh_avr_pcf8574_configure_interrupts(const zh_avr_pcf8574_init_
return AVR_OK;
}
void zh_avr_pcf8574_isr_handler(void)
BaseType_t zh_avr_pcf8574_isr_handler(void)
{
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
if ((PIND & (1 << _interrupt_gpio)) == 0)
{
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR(_interrupt_semaphore, &xHigherPriorityTaskWoken);
if (xHigherPriorityTaskWoken == pdTRUE)
{
portYIELD();
};
}
return xHigherPriorityTaskWoken;
}
static void _zh_avr_pcf8574_isr_processing_task(void *pvParameter)