Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bsp][ESP32] add spi custom configuration function and enhance muti object initliz… #9643

Merged
merged 10 commits into from
Nov 14, 2024
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions bsp/ESP32_C3/.ci/attachconfig/ble.attachconfig.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
scons.args: &scons
scons_arg:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个soncs.args没用到可以删了。

- '--strict'
devices.ble:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个放到ci.attachconfig.yml文件内。

kconfig:
- CONFIG_BSP_USING_BLE=y
38 changes: 38 additions & 0 deletions bsp/ESP32_C3/.ci/attachconfig/ci.attachconfig.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
scons.args: &scons
scons_arg:
- '--strict'
devices.gpio:
<<: *scons
kconfig:
- CONFIG_RT_USING_PIN=y
- CONFIG_BSP_USING_GPIO=y
devices.uart:
kconfig:
- CONFIG_RT_USING_SERIAL=y
- CONFIG_RT_USING_SERIAL_V1=y
- CONFIG_BSP_USING_UART=y
devices.i2c:
kconfig:
- CONFIG_RT_USING_I2C=y
- CONFIG_BSP_USING_I2C=y
- CONFIG_BSP_USING_I2C0=y
devices.spi:
kconfig:
- CONFIG_RT_USING_SPI=y
- CONFIG_BSP_USING_SPI=y
- CONFIG_BSP_USING_SPI2=y
devices.hwtimer:
kconfig:
- CONFIG_RT_USING_HWTIMER=y
- CONFIG_BSP_USING_HWTIMER=y
- CONFIG_BSP_USING_TIMER0=y
devices.adc:
kconfig:
- CONFIG_RT_USING_ADC=y
- CONFIG_BSP_USING_ADC=y
- CONFIG_BSP_USING_ADC1=y
devices.pwm:
kconfig:
- CONFIG_RT_USING_PWM=y
- CONFIG_BSP_USING_PWM=y
- CONFIG_BSP_USING_PWM0=y
9 changes: 9 additions & 0 deletions bsp/ESP32_C3/.ci/attachconfig/wifi.attachconfig.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
scons.args: &scons
scons_arg:
- '--strict'
devices.wifi:
kconfig:
- CONFIG_BSP_USING_WIFI=y
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个放到ci.attachconfig.yml内

- CONFIG_RT_USING_WIFI=y
- CONFIG_RT_USING_LWIP=y
- CONFIG_RT_USING_NETDEV=y
118 changes: 90 additions & 28 deletions bsp/ESP32_C3/drivers/drv_spi.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
* Change Logs:
* Date Author Notes
* 2024-10-08 wumingzi first implementation
* 2024-10-08 wumingzi add custom configuration and support muti spi obj
*/

#include <rtthread.h>
#include <rtdevice.h>
#include <time.h>

#include "rtdef.h"
#include "rttypes.h"
Expand All @@ -20,6 +22,7 @@
#include "driver/spi_master.h"

#include "drv_spi.h"
#include "drivers/dev_spi.h"

#ifdef RT_USING_SPI
#ifdef BSP_USING_SPI2
Expand All @@ -29,7 +32,6 @@
static struct rt_spi_bus spi_bus2;

static spi_device_handle_t spi;

static spi_bus_config_t buscfg;

static struct esp32_spi spi_bus_obj[] = {
Expand Down Expand Up @@ -62,20 +64,9 @@ static void esp32_spi_init(struct esp32_spi *esp32_spi)
spi_configure(NULL,NULL);
}

static void spi_pin_mode(rt_base_t pin)
{
gpio_config_t io_conf;
io_conf.intr_type = GPIO_INTR_DISABLE;
io_conf.mode = GPIO_MODE_OUTPUT;
io_conf.pin_bit_mask = (1ULL << pin);
io_conf.pull_down_en = 0;
io_conf.pull_up_en = 1;
}

static rt_err_t spi_configure(struct rt_spi_device* device,
struct rt_spi_configuration* configuration)
{
/* spi_pin_mode(RT_BSP_SPI_CS_PIN);*/
static spi_bus_config_t buscfg =
{
.miso_io_num=SPI2_IOMUX_PIN_NUM_MISO, /*MISO*/
Expand All @@ -89,19 +80,87 @@ static rt_err_t spi_configure(struct rt_spi_device* device,
esp_err_t err = spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO);
ESP_ERROR_CHECK(err);

static spi_device_interface_config_t devcfg={
.clock_speed_hz = SPI_MASTER_FREQ_8M,
.mode = 0,
.spics_io_num = RT_BSP_SPI_CS_PIN,
.queue_size = 7,
};
static spi_device_interface_config_t devcfg;
if(configuration->data_width == 8)
{
size_t length; /*/< Total data length, in bits*/
size_t rxlength; /*/< Total data length received, should be not greater than ``length`` in full-duplex mode (0 defaults this to the value of ``length``)*/
}

LOG_W("configuration->max_hz = %d \n",configuration->max_hz);
if(configuration->max_hz >= SPI_MASTER_FREQ_80M)
{
devcfg.clock_speed_hz = SPI_MASTER_FREQ_80M; /*/< 80MHz*/
}
else if(configuration->max_hz >= SPI_MASTER_FREQ_40M)
{
devcfg.clock_speed_hz = SPI_MASTER_FREQ_40M; /*/< 40MHz*/
}
else if(configuration->max_hz >= SPI_MASTER_FREQ_26M)
{
devcfg.clock_speed_hz = SPI_MASTER_FREQ_26M; /*/< 26.67MHz*/
}
else if(configuration->max_hz >= SPI_MASTER_FREQ_20M)
{
devcfg.clock_speed_hz = SPI_MASTER_FREQ_20M; /*/< 20MHz*/
}
else if(configuration->max_hz >= SPI_MASTER_FREQ_16M)
{
devcfg.clock_speed_hz = SPI_MASTER_FREQ_16M; /*/< 16MHz*/
}
else if(configuration->max_hz >= SPI_MASTER_FREQ_13M)
{
devcfg.clock_speed_hz = SPI_MASTER_FREQ_13M; /*/< 13.33MHz*/
}
else if(configuration->max_hz >= SPI_MASTER_FREQ_11M)
{
devcfg.clock_speed_hz = SPI_MASTER_FREQ_11M; /*/< 11.43MHz*/
}
else if(configuration->max_hz >= SPI_MASTER_FREQ_10M)
{
devcfg.clock_speed_hz = SPI_MASTER_FREQ_10M; /*/< 10MHz*/
}
else if(configuration->max_hz >= SPI_MASTER_FREQ_9M)
{
devcfg.clock_speed_hz = SPI_MASTER_FREQ_9M ; /*/< 8.89MHz*/
}
else
{
devcfg.clock_speed_hz = SPI_MASTER_FREQ_8M ;
}

switch (configuration->mode)
{
case RT_SPI_MODE_0: /*!< CPOL = 0, CPHA = 0 */
devcfg.mode = 0;
case RT_SPI_MODE_1: /*!< CPOL = 0, CPHA = 1 */
devcfg.mode = 1;
case RT_SPI_MODE_2: /*!< CPOL = 1, CPHA = 0 */
devcfg.mode = 2;
case RT_SPI_MODE_3: /*!< CPOL = 1, CPHA = 1 */
devcfg.mode = 3;
default:
devcfg.mode = 0;
}

/* todo: support changing cs_pin,queue_size or specifing spi_device_interface_config_t and
* spi_transaction_t by resever data.Meanwhile finish the initialization of interrupt
* callback function and dma.
*/

devcfg.spics_io_num = RT_BSP_SPI_CS_PIN;
devcfg.queue_size = 7;

err = spi_bus_add_device(SPI2_HOST, &devcfg, &spi);
ESP_ERROR_CHECK(err);

spi_bus_obj[0].bus_name = "spi2";
spi_bus_obj[0].spi_bus = &spi_bus2;
spi_bus_obj[0].esp32_spi_bus_cfg = &buscfg;
/* Although there is only one spi bus object, it will be a template for other bsps of ESP32 series */
for(int i = 0; i < sizeof(spi_bus_obj)/sizeof(spi_bus_obj[0]); i++)
{
spi_bus_obj[i].bus_name = "spi2";
spi_bus_obj[i].spi_bus = &spi_bus2;
spi_bus_obj[i].esp32_spi_bus_cfg = &buscfg;
}

return RT_EOK;
};
Expand All @@ -116,8 +175,8 @@ static rt_ssize_t spixfer(struct rt_spi_device* device, struct rt_spi_message* m

trans.tx_buffer = message->send_buf;
trans.rx_buffer = message->recv_buf;
trans.length = message->length;
trans.rxlength = message->length;
trans.length = (message->length)*8;
trans.rxlength = (message->length)*8;

spi_device_acquire_bus(spi, portMAX_DELAY);
esp_err_t err = spi_device_polling_transmit(spi, &trans);
Expand Down Expand Up @@ -161,17 +220,20 @@ int rt_hw_spi_init(void)
{
int result = 0;

spi_bus_obj[0].spi_bus->parent.user_data = (void *)&spi_bus_obj[0];
result = rt_spi_bus_register(spi_bus_obj[0].spi_bus, spi_bus_obj[0].bus_name, &esp32_spi_ops);
for(int i = 0; i < sizeof(spi_bus_obj)/sizeof(spi_bus_obj[0]); i++)
{
spi_bus_obj[i].spi_bus->parent.user_data = (void *)&spi_bus_obj[i];
result = rt_spi_bus_register(spi_bus_obj[i].spi_bus, spi_bus_obj[i].bus_name, &esp32_spi_ops);

RT_ASSERT(result == RT_EOK);
RT_ASSERT(result == RT_EOK);

LOG_D("%s bus init done", spi_bus_obj[i].bus_name);
LOG_D("%s bus init done", spi_bus_obj[i].bus_name);
}

return result;
}

INIT_BOARD_EXPORT(rt_hw_spi_init);

#endif /* BSP_USING_SPI0 || BSP_USING_SPI1 || BSP_USING_SPI2 || BSP_USING_SPI3 || BSP_USING_SPI4*/
#endif /* RT_USING_SPI */
#endif /* RT_USING_SPI */
10 changes: 10 additions & 0 deletions bsp/ESP32_C3/main/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,16 @@
#include <rtdevice.h>
#include <board.h>

#ifdef BSP_USING_BLE
void app_main()
{
while(1)
{

}
}
#endif /* BSP_USING_BLE */

int main(void)
{
rt_kprintf("Hello!RT-THREAD!\r\n");
Expand Down
Loading