Dear TI 工程师:
我需要用到CC3200的PIN_08引脚检测下降沿并触发DMA传送GPIOA1组的数据到内存,DMA读取到设定的数据量产生中断通知CPU处理。在IAR开发环境下主要代码如下:
void PickIntInit()
{
PRCMPeripheralClkEnable(PRCM_GPIOA2, PRCM_RUN_MODE_CLK);
PinTypeGPIO(PIN_08, PIN_MODE_0, false);
PinConfigSet(PIN_08,PIN_STRENGTH_2MA,PIN_TYPE_STD);
GPIODirModeSet(GPIOA2_BASE, 0x2, GPIO_DIR_MODE_IN);
//GPIODMATriggerEnable(GPIOA2_BASE);
GPIOIntTypeSet(GPIOA2_BASE,GPIO_PIN_1,GPIO_FALLING_EDGE);
GPIOIntRegister(GPIOA2_BASE,PickHandler);
GPIOIntEnable(GPIOA2_BASE,GPIO_INT_DMA);
GPIODMATriggerEnable(GPIOA2_BASE);
}
void PickHandler()
{
int i;
Report("PICK INT !\r\n");
bRxDone =1;
MAP_GPIODMATriggerDisable(GPIOA2_BASE);
for(i=0;i<8;i++)
{
Report("ucReadBuf:0x%x \n\r",ucReadBuf[i]);
}
//
// Clear the UART Interrupt
//
GPIOIntClear(GPIOA2_BASE,GPIO_INT_DMA);
}
void main()
{
int i;
//
// Initailizing the board
//
BoardInit();
bRxDone = false;
//
// Initialize uDMA
//
UDMAInit();
PinMuxConfig();
InitTerm();
//
// Display Banner
//
DisplayBanner(APP_NAME);
PickIntInit();
UDMASetupTransfer(UDMA_CH19_GPOIA1,
UDMA_MODE_PER_SCATTER_GATHER,
8,
UDMA_SIZE_8,
UDMA_ARB_1024,
(void *)(GPIOA1_BASE+0x00),
UDMA_SRC_INC_8,
(void *)ucReadBuf,
UDMA_DST_INC_8);
while(1)
{
UDMASetupTransfer(UDMA_CH19_GPOIA1,
UDMA_MODE_PER_SCATTER_GATHER,
8,
UDMA_SIZE_8,
UDMA_ARB_1024,
(void *)(GPIOA1_BASE+0x00),
UDMA_SRC_INC_NONE,
(void *)ucReadBuf,
UDMA_DST_INC_8);
while(!bRxDone)
{
}
bRxDone=0;
Report("GPIODMATriggerEnable\n\r");
GPIODMATriggerEnable(GPIOA2_BASE);
}
}
以上代码中断时每次检测到下降沿都进入,并且读到的GPIOA1数据全部是0,理想状态是DMA传送完8个字节才产生一次中断,能否帮分析一下哪里设置错误。
谢谢!