关于LM3S的EPI 通用模式数据读取!

chlq2008   2012-11-14 16:17 楼主
接触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的数据?

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复