This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我们已使用 TI 提供的示例将 DMA 与 SPI 模块配合使用。 我们如何最大限度地提高数据传输速度? 我们需要在代码中修改哪些参数? 在 TI 提供的示例中、SPI 时钟大约为1-2 MHz、但我们需要更快的数据传输速率。 高度赞赏紧急反应。
谢谢
乔治
C2000Ware McBSP (SPI)模式使用 LSPCLK (@20MHz)作为输入时钟、SRGR1.CLKGDV = 0xF。 您需要使用 LOSPCP 寄存器(或)增加 LSPCLK 以减少 SRGR1.CLKGDV 以增加 SPICLK 频率。
此致、
曼诺伊
您好、Manoj、
#define CPU_SPD 80E6
#define McBSP_SRG_FREQ CPU_SPD/2
#define CLKGDV_VAL 1.
SysCtrlRegs.LOSPCP。all = 0x0002;
乔治
我不知道这些宏定义。 您正在运行哪个示例代码。 我建议您在 C2000Ware 中尝试以下示例项目。
\device_support\f2806x\examples\c28\McBSP_SPI_loopback
此致、
曼诺伊
Manoj、
运行与您提到的相同的代码。 请检查" F2806X_McBSP.c "文件。
乔治
您需要使 init_McBSP_SPI 函数中的更改在 example_2806xMcBSP_SPI_DLB.c 文件中可用。
示例工程不使用 F2806x_McBSP.c 文件中下面显示的宏定义
#define CPU_SPD 80E6
//
// SRG 输入为 LSPCLK (SYSCLKOUT/2)
//
#define McBSP_SRG_FREQ CPU_SPD/2
#define CLKGDV_VAL 1.
//
// 2个 SRG 周期中的 CPU 周期数-初始化延迟
//
#define McBSP_init_delay 2*(CPU_SPD/McBSP_SRG_FREQ)
//
// 2个 CLKG 周期中的 CPU 周期数-初始化延迟
//
#define McBSP_CLKG_DELAY 2*(CPU_SPD/(McBSP_SRG_FREQ/(1+CLKGDV_VAL)))
此致、
曼诺伊
您是否能够使用上述建议使 McBSP 以更高的频率工作?
-Manoj
不幸的是、不是。 更改 SRGR1.CLKGDV 无效。
我目前被一个重要项目搁置了3天。 我将在本星期五之前对此进行研究并作出回应。
此致、
曼诺伊
乔治
只是想让您知道、我今天将对此进行研究。 我将在今天晚上公布最新情况。
此致、
曼诺伊
乔治
对代码进行了以下更改、并使 SPI 时钟= 18MHz。 请查看以下内容
1) 1)修改 了 F2806x_McBSP.c 中的以下 InitMcbspaGpio 函数
空 InitMcbspaGpio (空)
{
EALLOW;
//主设备
//将 GPIO 配置为 McBSP 信号
GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 2;// GPIO22是 MCLKXA 引脚(SPICLK)
GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 2;// GPIO23是 MFSXA 引脚(SPISTE)
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 2;// GPIO20是 MDXA 引脚(MOSI)
//将 GPIO 配置为异步
GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 3;//异步输入 GPIO22 (MCLKXA)-(SPICLK)
GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 3;//异步输入 GPIO23 (MFSXA)-(SPISTE)
GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 3;//异步输入 GPIO29 (MDXA)-(MOSI)
//从属方
//将 GPIO 配置为 McBSP 信号
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 1;// GPIO58是 MCLKRA 引脚(SPICLK)
GpioCtrlRegs.GPBMUX1.bit.GPIO44 = 1;// GPIO44为 MFSRA 引脚(SPISTE)
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 2;// GPIO21是 MDRA 引脚(SOMI)
//将 GPIO 配置为异步
GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//异步输入 GPIO58 (MCLKRA)-(SPICLK)
GpioCtrlRegs.GPBQSEL1.bit.GPIO44 = 3;//异步输入 GPIO44 (MFSRA)-(SPISTE)
GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 3;//异步输入 GPIO21 (MDRA)-(SOMI)
EDIS;
}
2) 2)在中的"外设时钟"功能中配置了 SYSCLK = LSPCLK = 90MHz (修改的 LOSPCP = 0 (SYSCLK / 1)
Example_2806xMcBSP_SPI_DLB.c 文件。
3) CLKG = LSPCLK /(CLKGDV + 1)= 90MHz /(4+ 1)= 18MHz。
(修改了 MCbspaRegs.SRGR1.bit.CLKGDV = 4;)在 Example_2806xMcBSP_SPI_DLB.c 文件中的 INIT_McBSP_SPI 函数中。
此致、
曼诺伊
您好、Manoj、
谢谢。 您能否查看我们的以下代码以查看您是否发现任何问题? 基本上、我们尝试使用 McBSP 在 SPI 上实现 DMA。
//######################################################################################################################
您还可以上传完整的代码吗? 您使用的代码与我们的代码不同!
您正尝试使用 DMA - SPI 接口实现什么目标? 请提供更多有关您希望 DMA 做什么的详细信息? 很难读取每一行代码来确定您要执行的操作。
此致、
曼诺伊
您好、Manoj、
1-您可以将您修改后的代码发送给我们,以便在 SPI 上获得18MHz 的频率,发送给此电子邮件( georgeandromeda2000@yahoo.com)吗? 对 TI 提供的原始 SPI 代码进行上述更改时、我们不会获得相同的结果。 (Example_2806xMCBSP_SPI_DLB)。 如果我们可以 在我们的设置(LAUNCHXL-F28069M TI 评估板)上成功测试您的代码,我们可以确认我们的设置正确。
2- 关于您的问题, 我们从这里( https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/706039/2602073?tisearch=e2e-sitesearch&keymatch=mcbsp_loopback_dma#pi320995filter=all&pi320995scroll=false )开始使用 SPI 模块实施 DMA 事务。
我们只是从这里复制了代码、并用它替换了 TI 示例中的 Example_2806xMcBSP_DLB_DMA.c 文件。 未对 TI 提供的示例代码进行任何其他更改。 代码似乎在处理一些小问题、您可以查看我们的代码以查看我们的错误情况吗?
感谢您在这方面的紧急帮助。
乔治
很抱歉、回复此主题帖较晚。 我在星期五下班了。
正如我在上一个帖子中提到的、您需要解释一下什么是有效的以及上面发送的代码中没有的代码、以便我查看。 我认为您的 McBSP (SPI)代码工作正常并且您希望 DMA 处理发送和接收操作是否正确? 使用示波器时、您是否看到正确的 McBSP 发送消息?
此致、
曼诺伊
您好、Manoj、
谢谢! TI 的原始 McBSP (SPI)代码唯一的问题是、您建议的更改不会更改 SPI 时钟速度。 这就是我们要求您修改后的代码以了解其工作原理的原因。
乔治
我在 2020年2月10日星期一下午2:34上发布的帖子 汇总了对以下文件所做的更改列表:-
这些文件包括我所做的所有更改、您应该能够将其包含在您的 McBSP_SPI_loopback 项目中。 我的理解是、在我在帖子中建议的更改之后、您还能够观察到18MHz 的 SPI 时钟。
e2e.ti.com/.../F2806x_5F00_Mcbsp.c
e2e.ti.com/.../F2806x_5F00_SysCtrl.c
e2e.ti.com/.../Example_5F00_2806xMcBSP_5F00_SPI_5F00_DLB.c
此致、
曼诺伊