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.

[参考译文] CCS/TMS570LS1224:如何将 MibSPI 与 DMA 配合使用?

Guru**** 2478765 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/695872/ccs-tms570ls1224-how-to-use-mibspi-with-dma

器件型号:TMS570LS1224

工具/软件:Code Composer Studio

您好!

我尝试将 MibSPI 与 DMA 配合使用、但它不起作用。

这是我的代码和项目。

/**@file sys_main.c
*@简要应用程序主文件
*@日期2017年7月7日
*@版本04.07.00
*
*此文件包含一个空的主函数
*,可用于应用程序。
*/

*
版权所有(C) 2009-2016德州仪器(TI)公司- www.ti.com
*

*
*只要
符合以下条件*,就允许以源代码和二进制形式重新分发和使用,无论是否进行*修改:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
*二进制形式的再发行必须在

*
发行版随附的*文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
*未经

事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件派生的产品*。
*
*本软件由版权所有者和贡献者
*按原样"提供、

且不承认任何明示或暗示的保证、包括但不限于*特定用途*的适销性和适用性的暗示保证。 在任何情况下、版权
*所有者或贡献者都不对任何直接、间接、偶然、
*特殊、模范、 或相应的损害(包括但不
限于*采购替代产品或服务;丧失使用、
*数据或利润; 或业务中断)、但出于
任何*责任理论、无论是合同、严格责任还是侵权
行为*(包括疏忽或其他原因)、即使
被告知可能会造成此类损坏、也是出于此类责任理论。
*
*/


/*用户代码开始(0)*/
/*用户代码结束*/

/*包含文件*/

#include "sys_common.h"

//*用户代码开始(1)*/
#include 
#include 
/*用户代码结束*/**

@fn void main (void)
*@简短应用程序主函数
*@注意默认情况下,此函数为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实现应用程序。
*/

*用户代码开始(2)*/
#define D_SIZE 64
uint16 TX_DATA[D_SIZE]={0};
uint16 Rx_DATA[D_SIZE]={0};
g_dmaCTRL g_dmaCTRL_TX;
g_dmaCTRL g_dmaCTRL_Rx;
//用户代码结束*


/*(void
3)*/用户代码开始(3)
sint32 i;

对于(I = 0;I < D_SIZE;I++)
{
TX_DATA[i]= i;
}

mibspiInit();
mibspiEnableLoopback (mibspiREG1、Analog、LBK);

dmaEnable();

//mibspiSetData (mibspiREG1、0、TX_DATA);
dmaReqAssign (DMA_CH0、1U);

G_dmaCTRL_TX.Sadd =(uint32)(&TX_DATA);
G_dmaCTRL_TX.DADD =(uint32)(&(mibspiRAM1->TX[0]);
G_dmaCTRL_TX.CHCTRL = DMA_CH0;
G_dmaCTRL_TX.FRCNT = 1U;
G_dmaCTRL_TX.ELCNT = D_SIZE;
G_dmaCTRL_TX.ELDOFFSET = 4U;
G_dmaCTRL_TX.ELSOFFSET = 0U;
G_dmaCTRL_TX.FRDOFFSET = 0U;
G_dmaCTRL_TX.FRSOFFSET = 0U;
G_dmaCTRL_TX.PORTASGN = 4U;
G_dmaCTRL_TX.RDSIZE = ACCESS_16_BIT;
G_dmaCTRL_TX.WRSIZE = ACCESS_16_BIT;
G_dmaCTRL_TX.tType = FRAME_TRANSFRAME;
G_dmaCTRL_TX.ADDMODERD = ADDR_INC1;
G_dmaCTRL_TX.ADDMODEWR = ADDR_OFFSET;
G_dmaCTRL_TX.AUTOINIT = AUTOINIT_ON;

dmaSetCtrlPacket (DMA_CH0、g_dmaCTRL_TX);
dmaSetChEnable (DMA_CH0、DMA_HW);

mibspiREG1->DMACTRL[0]|=(((1 << 4)| 0)<< 16);
mibspiREG1->DMACTRL[0]|= 0x8000C000u;
mibspiREG1->DMACTRL[0]|=(0 << 8)|(0 << 24);

mibspiTransfer (mibspiREG1,0);
while (!(mibspiIsTransferComplete (mibspiREG1、0))){}
mibspiGetData (mibspiREG1、0、Rx_data);

while (true){}
/*用户代码结束*/

//return 0;
}


/*用户代码开始(4)*/
/*用户代码结束*/

e2e.ti.com/.../1007.DMA.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道我的错误、我得到了错误的目标地址。 因此、键入内容时请保持 Caraful!
    G_dmaCTRL_TX.DADD =(uint32)(&(mibspiRAM1->TX[0]);
    它应是:
    G_dmaCTRL_TX.DADD =(uint32)(&(mibspiRAM1->TX[0].data);
    -_-!