代码
uint8_t ControlTable[1024];
void dma_init(void)
{
{
/* 数据线 */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
delayUs(5);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_1, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_1, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
delayUs(5);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
delayUs(5);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_3, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_3, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
delayUs(5);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
delayUs(5);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_5, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_5, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
delayUs(5);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_6, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_6, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
delayUs(5);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_7, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD);
delayUs(5);
}
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
uDMAEnable();
uDMAControlBaseSet(ControlTable);
IntEnable(INT_UDMA);
uDMAChannelAssign(UDMA_CH15_GPIOF);
uDMAChannelControlSet(UDMA_CHANNEL_ADC1 | UDMA_PRI_SELECT,
UDMA_SIZE_8| UDMA_SRC_INC_NONE| UDMA_DST_INC_8 |UDMA_ARB_8);
uDMAChannelAttributeDisable(UDMA_CHANNEL_ADC1,
UDMA_ATTR_USEBURST | UDMA_ATTR_ALTSELECT |
(UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK));
//uDMAChannelAttributeEnable(UDMA_CHANNEL_ADC1,UDMA_ATTR_HIGH_PRIORITY);
uDMAChannelTransferSet(UDMA_CHANNEL_ADC1 | UDMA_PRI_SELECT,
UDMA_MODE_BASIC ,
(void *)(GPIO_PORTB_BASE+GPIO_O_DATA),
image, OV7725_SIZE);
}
/* PF4 */
void vGPIO_PortFIntHandler(void)
{
flag=1;
uint32_t ui32Mode;
uint32_t ui32Status;
ui32Status = GPIOIntStatus(GPIO_PORTF_BASE, true);
GPIOIntClear(GPIO_PORTF_BASE,ui32Status);
ui32Mode = uDMAChannelModeGet(UDMA_CHANNEL_ADC1|UDMA_PRI_SELECT);
if(ui32Mode == UDMA_MODE_STOP)
{
g_ui32MemXferCount++;
if(g_ui32MemXferCount>5000) g_ui32MemXferCount=0;
uDMAChannelTransferSet(UDMA_CHANNEL_ADC1|UDMA_PRI_SELECT, UDMA_MODE_BASIC,
(void *)( GPIO_PORTE_BASE+GPIO_O_DATA),
image, OV7725_SIZE);
uDMAChannelEnable(UDMA_CHANNEL_ADC1);
}
if(!uDMAChannelIsEnabled(UDMA_CHANNEL_ADC1))
{
uDMAChannelTransferSet(UDMA_CHANNEL_ADC1|UDMA_PRI_SELECT, UDMA_MODE_BASIC,
(void *)(GPIO_PORTB_BASE+GPIO_O_DATA ), image, OV7725_SIZE);//
uDMAChannelEnable(UDMA_CHANNEL_ADC1);
}
}