上一篇Blog 讲到HB8地址数据不复用模式 ,Go on !
HB8 地址数据不复用的优点在于其支持传统的8位/16位并行接口(常见于8051单片机、PIC单片机、AVR单片机
或SRAM设备)。这种类型的总线通常是异步总线,通常以选通信号控制总线行为。
接下来我要介绍的是HB8模式下的另一种模式:FIFO模式。FIFO模式可用于访问各种集成了无地址FIFO的8位/
16位接口外设。支持片外FIFO(External FIFO 简称 XFIFO)的EMPTY和FULL信号。
FIFO模式与普通读写访问一样,只是不存在ALE信号和地址管脚。可使用两个输入信号来指示XFIFO是否为满,
以便控制传输情况,避免上溢与下溢。FFULL信号与FEMPTY信号均视为同步信号,一旦其生效,微控制器必须
在2个时钟周期内识别出跳变并及时处理,防止其影响数据会话状态。通过EPIHBnCFG寄存器的MAXWAIT位设置
允许FEMPTY信号和FFULL信号阻塞数据会话过程的最长等待时间(以EPI时钟周期为单位)。下图是FEMPTY信
号应该如何响应来自XFIFO的写和读操作:
下图是传输两个数据时序图:
在单片机引脚配置的时候需要注意:数据线D0~D7或者D0~D15,FFULL、FEMPTY信号、WR、RD、CS信号必
不可少,下图是EPI引脚图:
奉上XFIFO初始化代码:
<pre name="code" class="cpp">void Init_Epi()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_EPI0);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_EPI0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
GPIOPinConfigure(GPIO_PH3_EPI0S0);//D0
GPIOPinConfigure(GPIO_PH2_EPI0S1);//D1
GPIOPinConfigure(GPIO_PC4_EPI0S2);//D2
GPIOPinConfigure(GPIO_PC5_EPI0S3);//D3
GPIOPinConfigure(GPIO_PC6_EPI0S4);//D4
GPIOPinConfigure(GPIO_PC7_EPI0S5);//D5
GPIOPinConfigure(GPIO_PH0_EPI0S6);//D6
GPIOPinConfigure(GPIO_PH1_EPI0S7);//D7
GPIOPinConfigure(GPIO_PD5_EPI0S28);//RD
GPIOPinConfigure(GPIO_PD6_EPI0S29);//WR
GPIOPinConfigure(GPIO_PH6_EPI0S26);//FEMPTY
GPIOPinConfigure(GPIO_PH7_EPI0S27);//FFULL
GPIOPinTypeEPI(GPIO_PORTC_BASE, EPI_PORTC_PINS);
GPIOPinTypeEPI(GPIO_PORTD_BASE, EPI_PORTD_PINS);
GPIOPinTypeEPI(GPIO_PORTE_BASE, EPI_PORTE_PINS);
GPIOPinTypeEPI(GPIO_PORTH_BASE, EPI_PORTH_PINS);
EPIModeSet(EPI0_BASE, EPI_MODE_HB8);//主机总线模式
EPIConfigHB8Set(EPI0_BASE, EPI_HB8_MODE_FIFO, 0);//HB8 XFIFO模式
EPIAddressMapSet(EPI0_BASE, EPI_ADDR_PER_BASE_C | EPI_ADDR_PER_SIZE_256B);//基址0xC0000000,256字节空间
EPIIntEnable(EPI0_BASE,EPI_INT_TXREQ);//开FIFO传输中断
EPIDividerSet(EPI0_BASE, 78); //80分频,EPI_CLK=SYS_CLK/80
IntEnable(INT_EPI0);//开EPI中断
}
OVER ^_^