Thread 中讨论的其他器件:CC3200
您好!
我尝试设置 DMA、但在查找文档和示例时遇到一些问题。
我要做的是:
向 GPIOA1 (GPIO8-GPIO15)传输234个字节、每个字节后跟 GPIO28上的脉冲
目前、我在没有 DMA 的情况下执行它。
for(unsigned int column=0; column < 234; column++)
{
HWREG(GPIO_D0_D7_PORT + ((uint32_t)GPIO_D0_D7_PIN << 2)) = pArray[column];
HWREG(GPIO_EPD_CLK_PORT + ((uint32_t)GPIO_EPD_CLK_PIN << 2U)) = GPIO_EPD_CLK_PIN);
HWREG(GPIO_EPD_CLK_PORT + ((uint32_t)GPIO_EPD_CLK_PIN << 2U)) = 0);
}
Code
这会导致 信号不够清晰、无法满足我们的应用需求。
请参阅 GPIO28上的输出(根据我的理解、由于循环展开2、有两个脉冲在附近、我想较长的延迟是由于分支+最后是一些我不理解的流水线填充)

现在、我将尝试设置 DMA、以便一次将1个字节传输到 GPIO。 然后、我计划使用 timercallback 在 GPIO28上生成脉冲、并对下一个 DMA 传输进行 trig (我想不出更好/更便宜的方法来使传输与 GPIO28上的脉冲同步)
但这似乎不起作用。
配置:
void GPIO2DMA_Configure(unsigned char gpioDataBuf[10])
{
//Set channel
uDMAChannelAssign(UDMA_CH28_GPIOA1);
//Not sure this is needed
uDMAChannelAttributeDisable(UDMA_CH28_GPIOA1, UDMA_ATTR_ALTSELECT);
uDMAChannelControlSet(UDMA_CH28_GPIOA1 | UDMA_PRI_SELECT, // Use primary
UDMA_SIZE_8|UDMA_SRC_INC_8|UDMA_DST_INC_NONE | // one transfer is 8 bits, increase source address, keep destination address
UDMA_ARB_1 // transfer 1 byte and wait for next request
);//set for control table
uDMAChannelTransferSet(UDMA_CH28_GPIOA1 | UDMA_PRI_SELECT,
UDMA_MODE_BASIC, //Basic transfer, waits for next request
&gpioDataBuf, //Source is in memory
(void*)(GPIOA1_BASE)(void*)+ ((uint32_t)0xFF << 2)), //Destination is GPIO
sizeof(gpioDataBuf));
uDMAChannelEnable(UDMA_CH28_GPIOA1);
uDMAChannelRequest(UDMA_CH28_GPIOA1);
// /*power up uDMA module*/
// PRCMPowerDomainOn(PRCM_DOMAIN_PERIPH);
// PRCMPeripheralRunEnable(PRCM_PERIPH_UDMA);
// PRCMPeripheralSleepEnable(PRCM_PERIPH_UDMA);
// PRCMLoadSet();
}
测试:
unsigned char gpioDataBuf[10] = {0,1,2,3,4,5,6,7,8,9};
GPIO2DMA_Configure(gpioDataBuf);
for (int i=0; i<10; i++)
{
uDMAChannelRequest(UDMA_CH28_GPIOA1);
WAIT_S(1);
}
我的问题:
我的设置是否正常?
我应该使用 UDMA_CH28_GPIOA1还是 UDMA_CH28_SW?
是否有一些有关 DMA 设置的文档/示例、如我要做的那样? 我在 《技术参考手册》和 https://software-dl.ti.com/simplelink/esd/simplelink_msp432e4_sdk/2.30.00.14/docs/driverlib/msp432e4/html/group__udma__api.html#ga938c21dc70cb6e11e6eb826de0fa21c3上找到了一些内容 ,但这一点并不明显;)
谢谢、
C é dric
