3 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
8c6460a1d1 doc: update example 2025-08-12 12:13:30 +03:00
5 changed files with 9 additions and 11 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
@@ -118,7 +118,7 @@ int main(void)
return 0;
}
void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) // Required only if used input GPIO interrupts.
void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) // Do not delete! Leave blank if interrupts are not used.
{
printf("Interrupt happened on device address 0x%02X on GPIO number %d at level %d.\n", event->i2c_address, event->gpio_number, event->gpio_level);
printf("Interrupt Task Remaining Stack Size %d.\n", uxTaskGetStackHighWaterMark(NULL));

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)