网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 操作系统 > 嵌入式 >

spi+dma接收,dma失能后不能使能

时间:2025-10-20 15:06

人气:

作者:admin

标签:

导读:/*在调试dma的时候遇到不理解的问题,spi从机模式,接收主机的数据,第一个cs低电平搬运的数据是3个或5个FF 另外使用正常的操作,读取dma剩余字节,关闭dma,处理数据,重新初始化d...

/*在调试dma的时候遇到不理解的问题,spi从机模式,接收主机的数据,第一个cs低电平搬运的数据是3个或5个FF
另外使用正常的操作,读取dma剩余字节,关闭dma,处理数据,重新初始化dma,不要这段数据了,因为每次接收数据不固定
执行这个操作时,dma第一次开启打不开,重新初始化也没用,关掉dma失能,第二次可以看到缓冲区有数据,但是接受字节为0
无法进行依赖的操作
/
/
FF的问题还是没有解决,但是因为只有第一帧,所以把第一帧丢掉了,然后测试功能,
从机额外一根引脚链接片选,检测cs上升沿信号(spi接受完一帧数据)
使用十分平常的方法,进外部中断检测dma还剩多少数据未传输,以计算传输多少数据
失能dma通道,处理接收的数据,然后重新配置dma目标地址,使数据从0地址开始,重复流程已接受处理不同长度的数据
在调试过程中,失能dma通道后无法再次开启dma,尝试失能spidma接收标志,重置dma,重新初始化,重新失能dmamux模块
都没有用,原本想重新写一个初始化,怀疑因为代码重重包装漏掉了那一步,但是查询参考手册,dma章节没有怎么设置目标地址
源地址的递增这些,倒是有地址偏移和接收数据偏移。自己配置并没有成功
于是联系厂家,在厂家调试后告诉我调用一个函数,然后好了
函数里进行如下配置

重置dma*
(void)Dma_ResetChannel(pHWUnitCfg->u8TxDmaChannel);
(void)Dma_ResetChannel(pHWUnitCfg->u8RxDmaChannel);

等待spi空闲,移位寄存器无数据*
while (0U != u32RegVal_SR);

清楚接收和发送fifo*
u32RegVal_FSR = ((Spi_GetFSRConfig()) & (SPI_FSR_TFCNT_U32 | SPI_FSR_RFCNT_U32));

****初始化spi
****使能spi,spidubug标志
****因为使用dma,所以使能spidma接收和发送

  • Discard all frames in FIFO *
    Spi_CRConfig(pSpiDev->pHWUnitCfg->u8HWOffset, SPI_CR_SWRST_U32);
  • Enable SPI *
    Spi_CRConfig(pSpiDev->pHWUnitCfg->u8HWOffset, (SPI_CR_SPEN_U32 | SPI_CR_DBGEN_U32));
  • DMA Transmit and Receive Data Enable *

if (FALSE != pSpiDev->pHWUnitCfg->u16UseDma)
{
SPI_PTR[pSpiDev->pHWUnitCfg->u8HWOffset]->DER = (SPI_DER_RDMEN_U32 | SPI_DER_TDMEN_U32);
}

****再配置dma的接收发送目标地址
****开启spidma发送

相对这个步骤并没有初始化spi,没有清除发送接收缓冲区,另外确实有些中间变量标志位
*/

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信