蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等
-
wxq1123
- Posts: 108
- Joined: 2022年 Sep 21日 11:36
- Location: 深圳市水世界有限公司
Mumu_YU 2023年 Nov 9日 16:46
wxq1123 2023年 Nov 9日 11:34
Mumu_YU 2023年 Nov 9日 10:30
5.3 SPI支持速率
SPI频率有如下注意事项,其中 F ssi_clk为 pclk,F sclk_in为 spi clock。
➢ SPI Master: F ssi_clk >= 2 × (maximum F sclk_out )
➢ SPI Slave (receive only): F ssi_clk >= 6 × (maximum F sclk_in )
➢ SPI Slave: F ssi_clk >= 8 × (maximum F sclk_in)
按你说增加主频,我现在g_system_clk = SYS_CLK_DLL_64M; 还是不能设置为6.4M,设置6.4M后波形就乱套了
主频64M,spi速率30M。我使用逻分看波形确实乱了。我的逻分100m的,但是用示波器来看没有问题。
请问你发送函数用的哪一个接口?我设置成30M直接回卡死
Tags:
-
kangxi
- Posts: 40
- Joined: 2022年 Sep 19日 14:58
有做过ws2811驱动预研,以下代码可以参考:
Code: Select all
int ty_light_driver_spi_init(void)//初始化
{
uint8_t retval = PPlus_SUCCESS;
hal_dma_init();//use dma
ty_spi_ptr.spi_index = SPI1;
hal_spi_init(ty_spi_ptr.spi_index);
ty_spim_cfg.MOSI = TY2_SPI_PIN_MOSI;
ty_spim_cfg.baudrate = 7000000;//1bit --- 151ns
ty_spim_cfg.spi_tmod = SPI_TXD;// only send
ty_spim_cfg.spi_scmod = SPI_MODE0;
ty_spim_cfg.int_mode = false;
ty_spim_cfg.force_cs = true;
ty_spim_cfg.spi_dfsmod = SPI_1BYTE;
ty_spim_cfg.evt_handler = NULL;
retval = hal_spi_bus_init(&ty_spi_ptr, ty_spim_cfg);
if(retval != PPlus_SUCCESS){
TUYA_APP_LOG_ERROR("spi init err!please check it!\n");
return retval;
}
ty_dma_cfg.dma_channel = DMA_CH_0;
ty_dma_cfg.evt_handler = ty_light_driver_dma_int;
retval = hal_dma_init_channel(ty_dma_cfg);
if(retval != PPlus_SUCCESS){
TUYA_APP_LOG_ERROR("dma init err!please check it!\n");
return retval;
}
}
Code: Select all
int ty_light_driver_spi_data_send(void)//发送
{
uint8_t retval = PPlus_SUCCESS;
if(spi_data_tx.spi_data_send_flag){
spi_data_tx.send_cnt = (spi_data_tx.tx_buffer_len/DMA_H0_DATA_MAX_LEN)+1;
hal_spi_dma_set(&ty_spi_ptr,1,0);
if(spi_data_tx.send_cnt==1){
retval = hal_spi_transmit(&ty_spi_ptr,SPI_TXD,spi_data_tx.tx_buffer,NULL,spi_data_tx.tx_buffer_len,0);
}else{
retval = hal_spi_transmit(&ty_spi_ptr,SPI_TXD,spi_data_tx.tx_buffer,NULL,DMA_H0_DATA_MAX_LEN,0);
}
if(retval != PPlus_SUCCESS){
TUYA_APP_LOG_ERROR("ty_light_driver_data_send err!!!");
}
}else{
retval = PPlus_ERR_INVALID_DATA;
TUYA_APP_LOG_ERROR("ty light no data send!!!");
}
return retval;
}
-
wxq1123
- Posts: 108
- Joined: 2022年 Sep 21日 11:36
- Location: 深圳市水世界有限公司
kangxi 2023年 Nov 9日 18:04
有做过ws2811驱动预研,以下代码可以参考:
Code: Select all
int ty_light_driver_spi_init(void)//初始化
{
uint8_t retval = PPlus_SUCCESS;
hal_dma_init();//use dma
ty_spi_ptr.spi_index = SPI1;
hal_spi_init(ty_spi_ptr.spi_index);
ty_spim_cfg.MOSI = TY2_SPI_PIN_MOSI;
ty_spim_cfg.baudrate = 7000000;//1bit --- 151ns
ty_spim_cfg.spi_tmod = SPI_TXD;// only send
ty_spim_cfg.spi_scmod = SPI_MODE0;
ty_spim_cfg.int_mode = false;
ty_spim_cfg.force_cs = true;
ty_spim_cfg.spi_dfsmod = SPI_1BYTE;
ty_spim_cfg.evt_handler = NULL;
retval = hal_spi_bus_init(&ty_spi_ptr, ty_spim_cfg);
if(retval != PPlus_SUCCESS){
TUYA_APP_LOG_ERROR("spi init err!please check it!\n");
return retval;
}
ty_dma_cfg.dma_channel = DMA_CH_0;
ty_dma_cfg.evt_handler = ty_light_driver_dma_int;
retval = hal_dma_init_channel(ty_dma_cfg);
if(retval != PPlus_SUCCESS){
TUYA_APP_LOG_ERROR("dma init err!please check it!\n");
return retval;
}
}
Code: Select all
int ty_light_driver_spi_data_send(void)//发送
{
uint8_t retval = PPlus_SUCCESS;
if(spi_data_tx.spi_data_send_flag){
spi_data_tx.send_cnt = (spi_data_tx.tx_buffer_len/DMA_H0_DATA_MAX_LEN)+1;
hal_spi_dma_set(&ty_spi_ptr,1,0);
if(spi_data_tx.send_cnt==1){
retval = hal_spi_transmit(&ty_spi_ptr,SPI_TXD,spi_data_tx.tx_buffer,NULL,spi_data_tx.tx_buffer_len,0);
}else{
retval = hal_spi_transmit(&ty_spi_ptr,SPI_TXD,spi_data_tx.tx_buffer,NULL,DMA_H0_DATA_MAX_LEN,0);
}
if(retval != PPlus_SUCCESS){
TUYA_APP_LOG_ERROR("ty_light_driver_data_send err!!!");
}
}else{
retval = PPlus_ERR_INVALID_DATA;
TUYA_APP_LOG_ERROR("ty light no data send!!!");
}
return retval;
}
我dma的宏手动打开后编译器找不到“include "dma.h"”,我该如何设置路径