DSP与STM32的SPI通信调试及浮点数据传输调试

本文详细介绍了在DSP(C672x)与STM32之间如何通过SPI进行全双工通信,并重点阐述了浮点数的DMA数据传输。DSP作为从机,当数据准备好时,通过DataReady引脚触发STM32的外部中断,STM32开启DMA进行数据传输。在DSP侧,配置SPI和DMA,避免使用CSL库,以简化驱动编写。在STM32侧,提供相应的SPI驱动代码。在调试过程中,注意SPI引脚状态对Parallel Flash启动的影响,通过延时解决启动问题。
摘要由CSDN通过智能技术生成

        硬件环境:DSP为TMS320C6722,STM32为STM32F103ZG,两控制芯片为SPI三线连接,即SPI_SOMI,SPI_SIMO,SPI_CLK三线.

        首先整体简述下传输过程,DSP与STM32为SPI三线连接,无片选信号;DSP有一GPIO引脚连接至STM32外部中断引脚(在此处称为DataReady引脚);SPI虽然为全双工,但是在此项目中只需要DSP传输给STM32的数据,而不关心STM32传输给DSP的数据。STM32作为主机,DSP作为从机。为了节约CPU,从主机均使用SPI的DMA传输。数据传输的整体流程是这样的:DSP准备好数据后,会通过DataReady引脚由低电平变为高电平来触发STM32的外部中断,STM32在外部中断中将DMA开启,然后数据开始传输,STM32传输完成进入DMA传输完成中断,关闭DMA,STM32对收到的数据进行处理。

        下面简述DSP这边需要做的工作:

        熟悉C672x系列的人都知道,DMA在此系列芯片中占有相当大的作用(在C672x中称为dMAX)。DMA在C672x中可以进行数据传输、接收外部中断信号、触发CPU中断等等。

        对SPI及DMA进行配置:先对SPI进行配置,具体流程参考C672x的SPI手册(下面我也会贴出代码);然后对DMA的事件入口及传输入口进行配置。

        

#define   SPIGCR0       0x0000
#define   SPIGCR1       0x0001
#define   SPIINT0       0x0002
#define   SPILVL        0x0003
#define   SPIFLG        0x0004
#define   SPIPC0        0x0005
#define   SPIPC1        0x0006
#define   SPIPC2        0x0007
#define   SPIPC3        0x0008
#define   SPIPC4        0x0009
#define   SPIDAT0       0x000E
#define   SPIDAT1       0x000F
#define   SPIBUF        0x0010
#define   SPIDELAY      0x0012
#define   SPIFMT0       0x0014
#define   SPIFMT1       0x0015
#define   SPIFMT2       0x0016
#define   SPIFMT3       0x0017

#define   DEPR          0x0000
#define   DEER          0x0001
#define   DEDR          0x0002
#define   DEHPR         0x0003
#define   DELPR         0x0004
#define   DEFR          0x0005
#define   DTCR0         0x001F

#define   TransferEntry0        0x0000
#define   TransferEntry1        0x0001
#define   TransferEntry2        0x0002
#define   TransferEntry3        0x0003
#define   TransferEntry4        0x0004
#define   TransferEntry5        0x0005
#define   TransferEntry6        0x0006
#define   TransferEntry7        0x0007

#define   DMAX_DATA_TRANSFER_COUNT   8

volatile unsigned int * spi0_ptr   =  (unsigned int *) 0x47000000;
vol
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值