Got Hub to read from Node on interrupt

This commit is contained in:
AlexanderHD27
2025-01-06 04:17:59 +01:00
parent 1e317adedd
commit 1f5148dcdd
6 changed files with 18 additions and 13 deletions

View File

@@ -20,4 +20,4 @@
#define GOBOTRPC_HEARTBEAT_INTERVAL 3000 #define GOBOTRPC_HEARTBEAT_INTERVAL 3000
#define UART_CORE_MASK 0b01 #define UART_CORE_MASK 0b01
#define I2C_CORE_MASK 0b10 #define I2C_CORE_MASK 0b01

View File

@@ -41,13 +41,13 @@ void GobotRPC_NI_Hardware_RP2040_I2C::onI2CIRQ(I2C_SLAVE_EVENT event, BaseType_t
} }
case I2C_SLAVE_REQUEST: { // I2C Read from Master case I2C_SLAVE_REQUEST: { // I2C Read from Master
if(xQueueIsQueueEmptyFromISR(isrTXQueue) == pdFALSE) { //if(xQueueIsQueueEmptyFromISR(isrTXQueue) == pdTRUE) {
readState = I2C_READ_STAGE_INVALID; // readState = I2C_READ_STAGE_INVALID;
} //}
switch (readState) { switch (readState) {
case I2C_READ_STAGE_INVALID: case I2C_READ_STAGE_INVALID:
i2c_write_byte_raw(i2c_inst, 0x00); i2c_write_byte_raw(i2c_inst, 0x01);
break; break;
case I2C_READ_STAGE_FIRST: case I2C_READ_STAGE_FIRST:
@@ -93,6 +93,7 @@ void GobotRPC_NI_Hardware_RP2040_I2C::preTxTask() {
while (1) { while (1) {
xQueueReceive(isrPreTxQueue, &pkg, portMAX_DELAY); xQueueReceive(isrPreTxQueue, &pkg, portMAX_DELAY);
xQueueSend(isrTXQueue, &pkg, portMAX_DELAY); xQueueSend(isrTXQueue, &pkg, portMAX_DELAY);
vTaskDelay(5 / portTICK_PERIOD_MS);
gpio_put(int_PIN, 1); gpio_put(int_PIN, 1);
} }
} }

View File

@@ -23,8 +23,9 @@ GobotRPC_TI_Hardware_RP2040_I2C::GobotRPC_TI_Hardware_RP2040_I2C(UBaseType_t cor
for(int i=0; i<GOBOTRPC_TI_INT_NUM; i++) { for(int i=0; i<GOBOTRPC_TI_INT_NUM; i++) {
intAddressMap[i] = 0xffffffff; intAddressMap[i] = 0xffffffff;
gpio_init(GOBOTRPC_TI_INT_PIN_START + i); gpio_init(GOBOTRPC_TI_INT_PIN_START + i);
gpio_set_dir(GOBOTRPC_TI_INT_PIN_START< + i, GPIO_IN); gpio_set_dir(GOBOTRPC_TI_INT_PIN_START + i, GPIO_IN);
gpio_pull_down(GOBOTRPC_TI_INT_PIN_START + i); //gpio_pull_down(GOBOTRPC_TI_INT_PIN_START + i);
gpio_set_irq_enabled_with_callback(GOBOTRPC_TI_INT_PIN_START + i, GPIO_IRQ_EDGE_RISE, true, intPin_ISR);
} }
initTasks(); initTasks();
@@ -32,7 +33,6 @@ GobotRPC_TI_Hardware_RP2040_I2C::GobotRPC_TI_Hardware_RP2040_I2C(UBaseType_t cor
//gpio_init(GOBOTRPC_TI_COMBINED_INT_PIN); //gpio_init(GOBOTRPC_TI_COMBINED_INT_PIN);
//gpio_set_dir(GOBOTRPC_TI_COMBINED_INT_PIN, GPIO_IN); //gpio_set_dir(GOBOTRPC_TI_COMBINED_INT_PIN, GPIO_IN);
//gpio_pull_down(GOBOTRPC_TI_COMBINED_INT_PIN); //gpio_pull_down(GOBOTRPC_TI_COMBINED_INT_PIN);
//gpio_set_irq_enabled_with_callback(GOBOTRPC_TI_COMBINED_INT_PIN, GPIO_IRQ_EDGE_RISE , true, &intPin_ISR);
} }

View File

@@ -48,7 +48,10 @@ bool GobotRPC_TI_Hardware_RP2040_I2C::readI2C(GoRPCPackage_Transport * pkg, uint
return false; // I2C error return false; // I2C error
size_t len = pkg->data[1]; size_t len = pkg->data[1];
res = i2c_read_burst_blocking(i2c, addr, ((uint8_t *)pkg->data) + 2, len);
size_t remaining = len >= 2 ? len - 2 : 0;
res = i2c_read_burst_blocking(i2c, addr, ((uint8_t *)pkg->data) + 2, len - 2);
if(res == PICO_ERROR_GENERIC) if(res == PICO_ERROR_GENERIC)
return false; // I2C error return false; // I2C error

View File

@@ -51,14 +51,14 @@ int main() {
GobotRPC_CI_Hardware_RP2040_UART gobotrpc_ci_hardware(uart0, 115200, UART_CORE_MASK); GobotRPC_CI_Hardware_RP2040_UART gobotrpc_ci_hardware(uart0, 115200, UART_CORE_MASK);
GobotRPC_CI gobotRPC_ci(&gobotrpc_ci_hardware, 0b01, appData.ciInstructionQueue); GobotRPC_CI gobotRPC_ci(&gobotrpc_ci_hardware, UART_CORE_MASK, appData.ciInstructionQueue);
gobotRPC_ci.registerCB_TxPacket(onTxPacket, &gobotRPC_ci); gobotRPC_ci.registerCB_TxPacket(onTxPacket, &gobotRPC_ci);
TaskHandle_t taskHandleCore0; TaskHandle_t taskHandleCore0;
TaskHandle_t taskHandleCore1; TaskHandle_t taskHandleCore1;
xTaskCreateAffinitySet(vTaskMain, "Main Task Core 0", 2048, &gobotRPC_ci, 1, UART_CORE_MASK, &taskHandleCore0); xTaskCreateAffinitySet(vTaskMain, "Main Task Core 0", 2048, &gobotRPC_ci, 1, UART_CORE_MASK, &taskHandleCore0);
xTaskCreateAffinitySet(main_core2, "Main Task Core 1", 2048, &gobotRPC_ci, 1, I2C_CORE_MASK, &taskHandleCore1); xTaskCreateAffinitySet(main_core2, "Main Task Core 1", 2048, &gobotRPC_ci, 1, UART_CORE_MASK, &taskHandleCore1);
vTaskStartScheduler(); vTaskStartScheduler();

View File

@@ -27,7 +27,8 @@ void pushCIInstruction(CI_Instruction_Transport * src, void *args) {
void main_core2(void * pvParameters) { void main_core2(void * pvParameters) {
AppData appData = *((AppData *)pvParameters); AppData appData = *((AppData *)pvParameters);
GobotRPC_TI_Hardware_RP2040_I2C gobotrpc_ti_hardware(I2C_CORE_MASK, i2c0); GobotRPC_TI_Hardware_RP2040_I2C gobotrpc_ti_hardware(UART_CORE_MASK, i2c0);
gobotrpc_ti_hardware.setAddrMap(0x21, 2);
gobotrpc_ti_hardware.registerPullPackageCB(pullPackageCB, appData.txQueue); gobotrpc_ti_hardware.registerPullPackageCB(pullPackageCB, appData.txQueue);
gobotrpc_ti_hardware.registerPushPackageCB(pushPackage, appData.rxQueue); gobotrpc_ti_hardware.registerPushPackageCB(pushPackage, appData.rxQueue);