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/RM48L952:SPI 兼容模式与放大器;DMA

Guru**** 2469120 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/675011/ccs-rm48l952-spi-compatabiliti-mode-dma

器件型号:RM48L952
主题中讨论的其他器件:HALCOGEN

工具/软件:Code Composer Studio

您好!

提示、在哪里可以找到在 compatabiliti 模式下使用 SPI 与 DMA 的示例?


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

    我们没有示例。 很难为具有 DMA 的 SPI 编写代码:

    初始化 SPI (HALCoGen 代码)
    1.启用 DMA
    2.在接收 DMA 数据后启用 INT
    3.分配 DMA 请求
    4.配置 DMA 控制数据包
    5.设置 DMA 通道以触发硬件请求
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我编写了这个代码。 出什么问题了? 



    uint8_t s[10];
    uint8_t d[10];

    dmaEnable();
    /*----------------- *
    dmaSetPriority (DMA_CH0、高优先级);
    dmaCTRL.Sadd =&(spiREG1->BUF);
    dmaCTRL.DADD = d;
    dmaCTRL.FRCNT = 1;
    dmaCTRL.ELCNT = 10;
    dmaCTRL.ELSOFFSET = 0;
    dmaCTRL.FRSOFFSET = 0;
    dmaCTRL.ELDOFFSET = 0;
    dmaCTRL.FRDOFFSET = 0;
    dmaCTRL.PORTASGN = 4;
    dmaCTRL.RDSIZE = ACCESS_8_BIT;
    dmaCTRL.WRSIZE = ACCESS_8_BIT;
    dmaCTRL.tType = frame_transfer;
    dmaCTRL.ADDMODERD = ADDR_FIXED;
    dmaCTRL.ADDMODEWR = ADDR_INC1;
    dmaCTRL.AUTOINIT = AUTOINIT_OFF;
    dmaCTRL.COMBO = 0;//????;
    dmaCTRL.CHCTRL = 0;//????;
    dmaSetCtrlPacket (DMA_CH0、dmaCTRL);
    dmaReqAssign (DMA_CH0、0);
    /*----------------- *
    dmaSetPriority (DMA_CH1、高优先级);
    dmaCTRL.Sadd = s;
    dmaCTRL.DADD =&(spiREG1->DAT0);
    dmaCTRL.FRCNT = 1;
    dmaCTRL.ELCNT = 10;
    dmaCTRL.ELSOFFSET = 0;
    dmaCTRL.FRSOFFSET = 0;
    dmaCTRL.ELDOFFSET = 0;
    dmaCTRL.FRDOFFSET = 0;
    dmaCTRL.PORTASGN = 4;
    dmaCTRL.RDSIZE = ACCESS_8_BIT;
    dmaCTRL.WRSIZE = ACCESS_8_BIT;
    dmaCTRL.tType = frame_transfer;
    dmaCTRL.ADDMODERD = ADDR_INC1;
    dmaCTRL.ADDMODEWR = ADDR_FIXED;
    dmaCTRL.AUTOINIT = AUTOINIT_OFF;
    dmaCTRL.COMBO = 0;//????;
    dmaCTRL.CHCTRL = 0;//????;
    dmaSetCtrlPacket (DMA_CH1、dmaCTRL);
    dmaReqAssign (DMA_CH1、1);
    /*----------------- *
    dmaSetChEnable (DMA_CH0、DMA_HW);
    dmaSetChEnable (DMA_CH1、DMA_HW);
                                         //OneShot RXDMALINE TXDMALINE RXENA TXENA
    *(volatile uint32_t *)(0xFFF7F400U+0x0d8U)=(1<<31)|(0U<20U)|(1U<16U)|(1U<15U)|(1U<14U);//DMA0CTRL
    spiREG1->INT0 |= 0x10000U;//打开 DMA Rq
    spiREG1->DAT0=0;//<--- 开始
    xTaskDelay (2);
    spiREG1->INT0 &=~(0x10000U);//关闭 DMA Rq

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

    1.在启用 SPI DMA 请求之前启用 SPI
    spiREG1->GCR1 =(spiREG4->GCR1 & 0xFFFFFFFFU)| 0x01000000U;//启用 SPI
    spiREG1->INT0 =(0x1 << 16);//SPI_DMAREQ;仅在将 SPIEN 位设置为1后启用 DMA 请求。

    2.启用 dmaEnable()后的 DMA 中断
    /*接收数据后启用中断*/
    //dmaEnableInterrupt (DMA_CH0、FTC); //帧传输完成
    dmaEnableInterrupt (DMA_CH0、BTC); //块传输完成
    dmaEnableInterrupt (DMA_CH0、HBC); //半块传输完成