Implement Multi-Bus CAN Interfaces
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
#ifdef ESP_PLATFORM
|
||||
#include "freertos/FreeRTOS.h"
|
||||
|
||||
#include "mcp2521_hardware_esp_bus.hpp"
|
||||
#include "mcp2521_hardware_esp.hpp"
|
||||
|
||||
MCP2521_HardwareHandle_ESPBus::MCP2521_HardwareHandle_ESPBus(
|
||||
QueueHandle_t send_queue,
|
||||
spi_host_device_t spi_host,
|
||||
spi_bus_config_t * bus_config,
|
||||
gpio_num_t cs,
|
||||
gpio_num_t int_pin
|
||||
) : MCP2521_HardwareHandle_ESP(spi_host, bus_config, cs, int_pin) {
|
||||
this->send_queue = send_queue;
|
||||
this->receive_queue = xQueueCreate(3, sizeof(spi_message_t));
|
||||
}
|
||||
|
||||
void MCP2521_HardwareHandle_ESPBus::spi_transmit(spi_transaction_t *t) {
|
||||
spi_message_t message = {
|
||||
.transaction = t,
|
||||
.queue = send_queue,
|
||||
.spi_device_handle = spi_device_handle
|
||||
};
|
||||
|
||||
xQueueSend(send_queue, &message, portMAX_DELAY);
|
||||
xQueueReceive(receive_queue, &message, portMAX_DELAY);
|
||||
}
|
||||
|
||||
void MCP2521_HardwareHandle_ESPBus::initPins(
|
||||
gpio_num_t int_pin
|
||||
) {
|
||||
canInterruptSemaphore = xSemaphoreCreateBinary();
|
||||
|
||||
gpio_config_t io_conf;
|
||||
io_conf.intr_type = GPIO_INTR_NEGEDGE;
|
||||
io_conf.mode = GPIO_MODE_INPUT;
|
||||
io_conf.pin_bit_mask = 1 << int_pin;
|
||||
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
|
||||
io_conf.pull_up_en = GPIO_PULLUP_ENABLE;
|
||||
gpio_config(&io_conf);
|
||||
|
||||
gpio_isr_handler_add(int_pin, gpio_isr_can_handler, this);
|
||||
|
||||
char taskName[32];
|
||||
sprintf(taskName, "canInterruptTask_%d", int_pin);
|
||||
|
||||
xTaskCreatePinnedToCore(
|
||||
(TaskFunction_t)&handleInteruptTaskCallerFn,
|
||||
taskName,
|
||||
2048,
|
||||
this,
|
||||
5,
|
||||
&canInterruptTaskHandle,
|
||||
0
|
||||
);
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user