【求助】【TuyaOS OS】使用 spi dma驱动oled,spi dma初始化后使用逻辑分析仪抓不到信号,初始化有问题。

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


luzhihui
Posts: 26

内容
1)开发包全名(tuyaos-subdev-bt_3.9.0_phy6222_ble_ble-common_1.0.1.tar)
2)问题现象(初始化硬件spi和dma后,使用spi发送,抓io口信号,没有任何信号出来。log发现发送后dma中断回调没有被调用)
3)附件内容(附件中是我写的spi dma初始化及发送代码)

Attachments
oled_spi_dma.h
(3.06 KiB) Downloaded 108 times
oled_spi_dma.c
(3.89 KiB) Downloaded 117 times

Tags:
luzhihui
Posts: 26

Re: 【求助】【TuyaOS OS】使用 spi dma驱动oled,spi dma初始化后使用逻辑分析仪抓不到信号,初始化有问题。

逻辑的院子 2023年 Nov 21日 16:22

建议参考这两个帖子:
(1)viewtopic.php?t=2441&start=10
(2)viewtopic.php?p=8186#p8186

我就是参考的第一个链接写的。也定义了了DMAC_USE.

User avatar
逻辑的院子
Posts: 220
Contact:

Re: 【求助】【TuyaOS OS】使用 spi dma驱动oled,spi dma初始化后使用逻辑分析仪抓不到信号,初始化有问题。

只是驱动OLED的话可以不使用DMA方式,不使用DMA方式的话有写好的例程,可以参考例程:TEST_CID_TX_SPI_DATA,可以配合Logic上位机进行测试基础收发功能

luzhihui
Posts: 26

Re: 【求助】【TuyaOS OS】使用 spi dma驱动oled,spi dma初始化后使用逻辑分析仪抓不到信号,初始化有问题。

逻辑的院子 2023年 Nov 21日 16:59

只是驱动OLED的话可以不使用DMA方式,不使用DMA方式的话有写好的例程,可以参考例程:TEST_CID_TX_SPI_DATA,可以配合Logic上位机进行测试基础收发功能

是可以直接使用软件模拟,但是后面我们也要用SPI DMA驱动WS2811,所以还是要调通。

luzhihui
Posts: 26

Re: 【求助】【TuyaOS OS】使用 spi dma驱动oled,spi dma初始化后使用逻辑分析仪抓不到信号,初始化有问题。

逻辑的院子 2023年 Nov 21日 16:59

只是驱动OLED的话可以不使用DMA方式,不使用DMA方式的话有写好的例程,可以参考例程:TEST_CID_TX_SPI_DATA,可以配合Logic上位机进行测试基础收发功能

用这个测试是可以抓到信号,数据也是对的
但是加上DMA就不行。请帮忙查一下看看,我对比了您给的参考链接,我初始化是一样写的,就是发送按照自己的发送修改了下。

luzhihui
Posts: 26

Re: 【求助】【TuyaOS OS】使用 spi dma驱动oled,spi dma初始化后使用逻辑分析仪抓不到信号,初始化有问题。

这里初始化好像有问题,但我没发现问题

Code: Select all

/* spi init  这样初始化SPI没输出*/
hal_spi_t sg_spim;
spi_Cfg_t sg_spim_cfg;
sg_spim.spi_index = (SPI_INDEX_e)SPI0;
hal_spi_init(sg_spim.spi_index);

sg_spim_cfg.sclk_pin = P31;
//sg_spim_cfg.ssn_pin;
sg_spim_cfg.MOSI = P20;
//sg_spim_cfg.MISO;
sg_spim_cfg.baudrate = 500000;
sg_spim_cfg.spi_tmod = SPI_TXD;
sg_spim_cfg.spi_scmod= SPI_MODE0;/* 相位极性设置*/
sg_spim_cfg.spi_dfsmod = SPI_1BYTE;
#if DMAC_USE
//sg_spim_cfg.dma_tx_enable = 1;
//sg_spim_cfg.dma_rx_enable;
#endif
sg_spim_cfg.int_mode = FALSE;
sg_spim_cfg.force_cs = TRUE;
sg_spim_cfg.evt_handler = NULL;

ret =  hal_spi_bus_init(&sg_spim, sg_spim_cfg);
if(ret != OPRT_OK)
{
	TAL_PR_ERR("oled spi hard eror!!!\r\n");
	return ret;
}

/////////////////////////////////////////////////////////////////////////////////

Code: Select all

/* 这样初始化SPI发送正常*/
TUYA_SPI_BASE_CFG_T test_spi_cfg = 
{
	//.role = 
	.mode = TUYA_SPI_MODE0,
	.type = TUYA_SPI_SOFT_TYPE,
	.databits = TUYA_SPI_DATA_BIT8,
	//.bitorder = ;
	.freq_hz = 500000,
	.spi_dma_flags = TRUE,
};

ret = tal_spi_init(0, &test_spi_cfg);
if(ret != OPRT_OK)
{
	TAL_PR_ERR("oled spi hard eror!!!\r\n");
	return ret;
}

错误的相当于我直接调用的hal底层,结果spi没输出,但是使用tkl层就是可以的。

luzhihui
Posts: 26

Re: 【求助】【TuyaOS OS】使用 spi dma驱动oled,spi dma初始化后使用逻辑分析仪抓不到信号,初始化有问题。

逻辑的院子 2023年 Nov 22日 16:30

我写一个例程,晚一点发给你

感谢,我调通了,我先在奉加上面调通又移植过来就可以了。然后发现直接调用hal库,DMA没有回调,我检查了后发现是底层
spi.c->config_dma_channel4spitx()中的cfgc.enable_int参数默认给的false,然后在hal_dma_config_channel(DMA_CH_0,&cfgc)
中就没有打开dma中断。目前我直接在底层改成true了,目前测试正常。请帮我确认下这里的中断,谢谢。

Post Reply