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/SW-EK-TM4C1294XL:具有 UDMA 传输的 ADC

Guru**** 2465700 points
Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/662230/ccs-sw-ek-tm4c1294xl-adc-with-udma-transfer

器件型号:SW-EK-TM4C1294XL
Thread 中讨论的其他器件:EK-TM4C1294XL

工具/软件:Code Composer Studio

朋友们、您好!

IAM 工作 tm4c1294xl 评估套件我使用 uDMA 传输功能使用 ADC 采样序列发生器3。 我的问题是无法打印使用 ADC 采样的值。 IAM 通过此帖子附加代码可以帮助解决此问题。  

#include 
#include 
include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_uart.h"
#include "driverlib/fpu.h"
#include
"driverlib/driverlib_interrupt.h"
#include "driverlib.driver.h"#driverlib/driverlib#driverlib.utils/ude/drivers.mdio.ide"#include
"drivers.mdio.mdio.ide"

#include "#include "#driver.h"#include "driverlib_util.mdio.md.ine"#include "#driver.h"











define MEM_buffer_size 1024

//#define UART_TXBUF_size 256
//#define UART_RXBUF_size 256

// static uint32_t g_ui8TxBuf[UART_TXBUF_SIZE];
static uint32_t g_ui8RxBufA[1];






static u32_uuuint32_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu32_uuuuuuuuuuuuut










=静态32 uuuuuuuuuuuuuuuuuuuuuuint32uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
#elif defined (CCS)
#pragma DATA_ALIGN (pui8ControlTable、1024)
uint8_t pui8ControlTable[1024];
#else
uint8_t pui8ControlTable[1024]__attribute__((aligned (1024)));
#endif


#ifdef #ifdef #if_error__(uintu32_uu_uategr

u32uuuuuuuuuuuuuuuuuuuuuuuuatr uuui32 uuuuuuuuuuuuuuuuui32 uuuuuuuuuuuuuuuuuui32 uuuuuuuuuuuuuuuuuuint32 uuuuuu32 uuuuuuuuuuuuuuuui32 uuuuuuuuuuuuuuuuui32 uuuuuuuuuuuuuuuuuu32




























ui16Idx < 1; ui16Idx++)
{
UARTprintf ("在接收器端打印");
UARTprintf (" hello receiver %d "、g_ui8RxBufA[ui16Idx]);
}

ADCIntClearEx (ADC0_BASE、ADC_INT_DMA_SS0 | ADC_INT_UCC0_UCC0_UCC0_DE_AM_AM_UCC0);(

UCC0_UCC0_UCC_UCC_UCC0_U80_UCC_UCC0_AM_AM_AM_U80_AM_AM_AM_U80_AM_AM_AM_AM_U80_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_TRU80_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_AM_TRU






if (uDMAChannelModeGet (uDMA_CHANGE_ADC0 | UDMA_ALT_SELECT)== UDMA_MODE_STOP){
//找到完整缓冲

区//重新设置到缓冲区
uDMAChannelTransferSet ((UDMA_CHANGE_ADC0 | UDMA_RESTON_DET)的 DMA 传输(uDMA_RESTON_U8B)、UFF_U0_U0_U0_U0_U0_UDB_U0_UFF_U0_U0_U0_U0_U0_U0_U0_U0_U0_U0_UFF_U0_U0_U0_U

}


空
InitUART1传输(void)
{
uint32_t div;

SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
PeripherCtlPeripheralSleep Enable (SYSCTL_Periph_ADC0);
ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL、ADC_CLOCK_ADC0_ADCLOCK);ADCClock_FULL (ADCLOCK = ADCLOCK
);ADCLOCK (ADC0) 3 /*SS0*/、ADC_TRIGGER_AYSTEUSH、0 /*Priority*/);// SS0-SS3优先级必须始终不同

ADCSequenceStepConfigure (ADC0_BASE、3 / AttributeSS0*/、0、ADC_CTL_CH0 | ADC_CTL_END | ADC_CTL_IE);//


ADC0 (ADCADC0每隔3个 ADCADCTRIE_ADCADCADC0个 ADCADCTRIE_ADCADCTRIE_ADCADC0个 ADCADCADCADCADCADCTRIE_CAST_MARS;/ ADC0 (ADCADCADCADCADCADCADCADCAD
UARC_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
UDMA_ATTR_HIGH_PRIOR_8


| UDMA_ATTR_REQMASK);uDMAChannelControlSet (UDMA_CHANNE_ADC0 | UDMA_INC_ADDR_8 | UDA_ADDR_4






| UDA_ADDA_NOT_UDA_ADDR_8

| UDA_ADDA_ADDA_SDA_SOURCE_ADCC_0 | UART_UANCE_ADDR_8 | UDA_ADDR_NOT_UDA_ADDR_ADDR_8 | UDA_ADDR_ADDR_8 | UDA_ADDA_ADDA_INC_ADAP_ADAP_ADAP_ADAP_ADAP_8 | UART_UART_UART_ADDR_ADDR_ADDR_ADDR_8 | UANT_ADDR_ADDR_ADDR_ADDR_8 | UAN_ADAP_ADDR_8 | UAN_ADDR_ADDR
sizeof (g_ui8RxBufA));
uDMAChannelTransferSet (uDMA_CHANGE_ADC0 | UDMA_ALT_SELECT、
UDMA_MODE_Pingpong、
(void *)(ADC0_BASE)、
g_ui8RxBufB、 sizeof (g_ui8RxBufB));

uDMAChannelEnable (UDMA_CHANGE_ADC0);
ADCIntEnableEx (ADC0_BASE、ADC_INT_DMA_SS3);
IntEnable (INT_ADC0SS3);


}


空
配置 UART (void)
{

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
SysCtlPeripheralSleep Enable (SYSCTL_Periph_UART0);


GPIOPinConfigure (GPIO_PA0_U0RX);
GPIO_Pin0TX (GPIO_Configure);GPIO_PINTO_Configure)
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);


UARTStdioConfig (0、115200、g_ui32SysClock);
}


int
main (void)
{

static uint32_t ui32 PrevUARTCount = 0;
uint32_t ui32XfersCompleded;
uint32_t ui32BytesTransfed;
SysCtlPeripheralEnable (sysctl_Periph_GPIOE);

GPIOTypeADC (GPIO_Porte _BASE、SysCtlPeripheralEnable) GPIO_PIN_3);

g_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCL_MAIN |
SYSCTL_USE_PLL |
SYSCTION_CFG_VCO_480)、120000000);


SysCtlPeripheralClockGating (TRUE);SYSCTL_UST_OUTPLIT_480)、SYSCOPPEPTL_GPIOBJUST_GPIOPTL



(TRL (TRL)、GPIORT_GPIORT_OUTPLIT_TOPHOTPLK (GPIORT_VOPTL) GPIO_PIN_0);

ConfigureUART ();

UARTprintf ("Tiva C 系列@%u MHz\n\n"、g_ui32CtlClock / 1000000);

UARTprintf ("cpu\tRemaining\tMemory\t\t UART\n");
UARTprintf ("Usage\ttime\t Transfers\n\t


);UARTSysCtlTransfers (")
SysCtlPeripheralSlepEnable (sysctl_Periph_UDMA);


IntEnable (INT_UDMAERR);

uDMAEnable();

uDMAControlBaseSet (pui8ControlTable);

InitUART1 Transfer ();

SysCtlSleep ();


UARTprintf ("\n Stopped\n");

IntDisable (INT_ADC0SS3);
IntDisable (INT_UDMA);


} 

此致

Prudhvi

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

    uDMAChannelTransferSet (((UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT)、UDMA_MODE_PINGONG、(void *)(ADC0_BASE + ADC_O_SSFIFO0)、g_ui8RxBufA、sizeof (g_ui8RxBufA);无变化
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Prudhvi 您好!

    有几篇涉及此应用的 E2E 帖子、我认为这对您调整实施方案很有帮助。

    另一位社区成员的这篇文章详细介绍了具有 uDMA 传输的 ADC 所需的大量资源、并提供了非常深刻的见解: https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/647065/2379897#2379897

    下面是一个不同 TM4C MCU 的示例、它处理交替 ADC 读取以加载两个缓冲器: https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/643173/2381981#2381981

    请浏览这些资源、如果您对这些资源的实施有进一步的具体问题、请在此处进行跟进、以便我可以帮助澄清。

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

    你好 ,Ralph Jacobi,

    首先感谢您的回复,现在我也无法确定代码中实际发生的情况。您能不能向我提供使用 ADC 的 tm4c1294xl uDMA 代码的任何工作代码,以便作为新用户使用此代码,它对我的进一步参考非常有用 器件

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

    我们没有提供 UDMA+ADC 的示例、只有 TivaWare 中 ADC 外设和 UDMA 外设的单独示例。 如果您难以理解正在发生的情况、我建议参考这些示例、以便更深入地了解每个外设。

    TivaWare 示例中的 ADC 示例代码位于[安装路径]\TivaWare_C_Series-2.1.4.178\examples\peripheral\adc 下

    用于 UDMA 的 TivaWare 示例位于各种开发板文件夹中、例如[Install Path]\TivaWare_C_Series-2.1.4.178\examples\boards\ek-tm4c1294xl\UDMA_demo