主题中讨论的其他器件: TM4C123
工具/软件:Code Composer Studio
朋友们、您好!
IAM 在 EK-tm4c1294xl 套件上工作,当前 iam 正在尝试将 ADC 与 uDMA iam 连接集成。iam 无法将数据从缓冲区传输到目的地。在此程序中,iam 尝试打印我在 ADC 中捕获的数据。
#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/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/SysTick .h"
#include "driverlib/uart.h"
#include "driverlib/udma.h"
#include "utils/cpu_usage.h"
#include "utils/uartstdio.h"
#include "utils/ustdlib.h"
#include "utils/uartstdio.c"
#include "driverlib/adc.h"
#include "inc/hw_adc.h"
静态 int i;
#define MEM_buffer_size 1024
#define UART_TXBUF_SIZE 256
#define UART_RXBUF_SIZE 256
//static uint32_t g_ui8TxBuf[UART_TXBUF_SIZE];
静态 uint32_t g_ui8RxBufA[UART_RXBUF_SIZE];
静态 uint32_t g_ui8RxBufB[UART_RXBUF_SIZE];
静态 uint32_t g_ui32uDMAErrCount = 0;
静态 uint32_t g_ui32BadISR = 0;
静态 uint32_t g_ui32RxBufACount = 0;
静态 uint32_t g_ui32RxBufBCount = 0;
uint32_t g_ui32SysClock;
#IF 定义(ewarm)
#pragma DATA_alignment=1024
uint8_t pui8ControlTable[1024];
#Elif Defined (CCS)
#pragma DATA_ALIGN (pui8ControlTable、1024)
uint8_t pui8ControlTable[1024];
其他
uint8_t pui8ControlTable[1024]__attribute__(aligned (1024)));
#endif
#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)
{
}
#endif
无效
uDMAErrorHandler (空)
{
uint32_t ui32Status;
ui32Status = uDMAErrorStatusGet ();
if (ui32状态)
{
uDMAErrorStatusClear ();
G_ui32uDMAErrCount++;
}
}
空 ADCseq0Handler()
{
uint_fast16_t ui16Idx;
uint32_t ui32Status;
uint32_t ui32模式;
对于(ui16Idx = 0;ui16Idx < UART_TXBUF_SIZE;ui16Idx++)
{
UARTprintf ("在接收器端打印");
UARTprintf ("hello receiver %d"、g_ui8RxBufA[ui16Idx]);
}
ADCIntClearEx (ADC0_BASE、ADC_INT_DMA_SS0 | ADC_INT_SS0);
if (uDMAChannelModeGet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT)== UDMA_MODE_STOP){
//找到完整的缓冲区
//重新设置到缓冲区的 DMA 传输
uDMAChannelTransferSet (((UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT)、UDMA_MODE_PINGONG、(void *)(ADC0_BASE + ADC_O_SSFIFO0)、g_ui8RxBufA、sizeof (g_ui8RxBufA);
}
if (uDMAChannelModeGet (UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT)= UDMA_MODE_STOP){
//找到完整的缓冲区
//重新设置到缓冲区的 DMA 传输
uDMAChannelTransferSet (((UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT)、UDMA_MODE_PINGONG、(void *)(ADC0_BASE + ADC_O_SSFIFO0)、G_ui8RxBufB、sizeof (g_ui8RxBufB);
}
/* if (!uDMAChannelIsEnabled (UDMA_CHANGE_ADC0))
{
uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT、
UDMA_MODE_BASIC、g_ui8TxBuf、
(void *)(ADC0_BASE + ADC_O_SSFIFO0)、
sizeof (g_ui8TxBuf));
uDMAChannelEnable (UDMA_CHANGE_ADC0);
}*/
}
无效
InitUART1传输(空)
{
uint32_t div;
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
SysCtlPeripheralSlepEnable (SYSCTL_Periph_ADC0);
ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL、ADC_CLOCK_RATE_FULL);
ADCSequenceConfigure (ADC0_BASE、0 /*SS0*/、ADC_TRIGGER_AYSLEYSE、3 /*Priority*/);// SS0-SS3优先级必须始终不同
ADCSequenceStepConfigure (ADC0_BASE、0 /*SS0*/、0、ADC_CTL_TS);// ADC_CTL_TS =读取温度传感器
ADCSequenceStepConfigure (ADC0_BASE、0 /*SS0*/、1、ADC_CTL_TS);
ADCSequenceStepConfigure (ADC0_BASE、0 /*SS0*/、2、ADC_CTL_TS);
ADCSequenceStepConfigure (ADC0_BASE、0 /*SS0*/、3、ADC_CTL_TS);
ADCSequenceStepConfigure (ADC0_BASE、0 /*SS0*/、4、ADC_CTL_TS);
ADCSequenceStepConfigure (ADC0_BASE、0 /*SS0*/、5、ADC_CTL_TS);
ADCSequenceStepConfigure (ADC0_BASE、0 /*SS0*/、6、ADC_CTL_TS);
ADCSequenceStepConfigure (ADC0_BASE、0 /*SS0*/、7、ADC_CTL_TS | ADC_CTL_END | ADC_CTL_IE);// ADC_CTL_IE 每8个样本触发一次
ADCSequenceEnable (ADC0_BASE、0);
ADCSequenceDMAEnable (ADC0_BASE、0);
uDMAChannelAttributeDisable (UDMA_CHANGE_ADC0、
UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
UDMA_ATTR_HIGH_PRIOR|
UDMA_ATTR_REQMASK);
uDMAChannelControlSet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 |
UDMA_ARB_4);
uDMAChannelControlSet (UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 |
UDMA_ARB_4);
uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT、
UDMA_MODE_PINGONG、
(void *)(ADC0_BASE + ADC_O_SSFIFO0)、
g_ui8RxBufA、sizeof (g_ui8RxBufA);
uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT、
UDMA_MODE_PINGONG、
(void *)(ADC0_BASE + ADC_O_SSFIFO0)、
g_ui8RxBufB、sizeof (g_ui8RxBufB));
uDMAChannelEnable (UDMA_CHANGE_ADC0);
ADCIntEnableEx (ADC0_BASE、ADC_INT_DMA_SS0);
IntEnable (INT_ADC0SS0);
}
无效
配置 UART (空)
{
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
SysCtlPeripheralSlepEnable (SYSCTL_Periph_UART0);
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
UARTStdioConfig (0、115200、g_ui32SysClock);
}
内部
main (空)
{
静态 uint32_t ui32 PrevUARTCount = 0;
符合 uint32_t ui32X 标准;
uint32_t ui32字节首选;
G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
SysCtlPeripheralClockGating (真);
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0);
ConfigureUART();
UARTprintf ("Tiva C 系列@%u MHz\n\n"、g_ui32SysClock / 1000000);
UARTprintf ("cpu\tRemaining\tMemory\t\t\tuart\n");
UARTprintf ("Usage\ttime\tTransfers\t\t 传输\n");
SysCtlPeripheralEnable (SYSCTL_Periph_UDMA);
SysCtlPeripheralSlepEnable (SYSCTL_Periph_UDMA);
IntEnable (INT_UDMAERR);
uDMAEnable();
uDMAControlBaseSet (pui8ControlTable);
InitUART1传输();
SysCtlSleep ();
UARTprintf ("\nStopped\n");
IntDisable (INT_ADC0SS0);
IntDisable (INT_UDMA);
}