接触EPI时间不多,遇到一些问题。采用通用8位数据模式与CPLD进行高速数据传输,只需要读取CPLD的数据。以下是初始化代码:
//系统时钟100MHZ
SysCtlClockSet(SYSCTL_SYSDIV_2| SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
SYSCTL_OSC_MAIN);
//使能各IO
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
//设置IO口功能
GPIOPinConfigure(GPIO_PH3_EPI0S0);
GPIOPinConfigure(GPIO_PH2_EPI0S1);
GPIOPinConfigure(GPIO_PC4_EPI0S2);
GPIOPinConfigure(GPIO_PC5_EPI0S3);
GPIOPinConfigure(GPIO_PC6_EPI0S4);
GPIOPinConfigure(GPIO_PC7_EPI0S5);
GPIOPinConfigure(GPIO_PH0_EPI0S6);
GPIOPinConfigure(GPIO_PH1_EPI0S7);
GPIOPinConfigure(GPIO_PJ4_EPI0S28);
GPIOPinConfigure(GPIO_PJ5_EPI0S29);
GPIOPinConfigure(GPIO_PJ6_EPI0S30);
GPIOPinConfigure(GPIO_PG7_EPI0S31);
GPIOPinConfigure(GPIO_PF2_LED1);
GPIOPinConfigure(GPIO_PF3_LED0);
//使能EPI模块
SysCtlPeripheralEnable(SYSCTL_PERIPH_EPI0);
GPIOPadConfigSet(GPIO_PORTC_BASE,EPI_PORTC_PINS,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPD);
GPIOPadConfigSet(GPIO_PORTH_BASE,EPI_PORTH_PINS,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPD);
GPIOPadConfigSet(GPIO_PORTJ_BASE,EPI_PORTJ_PINS,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPD);
GPIOPadConfigSet(GPIO_PORTG_BASE,GPIO_PIN_7,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPD);
GPIODirModeSet(GPIO_PORTC_BASE,EPI_PORTC_PINS,GPIO_DIR_MODE_HW);
GPIODirModeSet(GPIO_PORTH_BASE,EPI_PORTH_PINS,GPIO_DIR_MODE_HW);
GPIODirModeSet(GPIO_PORTJ_BASE,EPI_PORTJ_PINS,GPIO_DIR_MODE_HW);
GPIODirModeSet(GPIO_PORTG_BASE,GPIO_PIN_7,GPIO_DIR_MODE_HW);
EPIDividerSet(EPI0_BASE,1); //EPI时钟为系统时钟的1/2
EPIModeSet(EPI0_BASE,EPI_MODE_GENERAL); //通用模式
EPIConfigGPModeSet(EPI0_BASE, EPI_GPMODE_CLKPIN|EPI_GPMODE_READ2CYCLE|EPI_GPMODE_READWRITE|EPI_GPMODE_ASIZE_NONE|EPI_GPMODE_DSIZE_8,0,0 );//无地址,8位数据,CLK,RDWR,读取2周期
EPIAddressMapSet(EPI0_BASE,EPI_ADDR_PER_SIZE_64KB|EPI_ADDR_PER_BASE_NONE);
while(HWREG(EPI0_BASE + EPI_O_STAT) & EPI_STAT_INITSEQ)
{
}
EPIFIFOConfig(EPI0_BASE,EPI_FIFO_CONFIG_RX_FULL); //设置FIFO满中断
EPIIntRegister(EPI0_BASE,EpiIntHander); //注册中断函数
EPINonBlockingReadConfigure(EPI0_BASE,0,EPI_NBCONFIG_SIZE_8,0); //非阻塞读取设置,8位数据
EPIIntEnable(EPI0_BASE,EPI_INT_RXREQ); //开启EPI RX FIFO 中断
IntMasterEnable(); //使能总中断
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
关于之后的数据读取是如何进行的?
EPINonBlockingReadGet8(EPI0_BASE,ulCount,pucBuf);如何使用? 看手册ulCount <4096 ,可是8字节的NBRFIFO ,如何读取大于NBRFIFO的数据?