工具/软件:Code Composer Studio
您好!
我们将 TM4C129ENCPDT 与 CY14B108K NVRAM 配合使用。 我们制作了一个连接控制器和 NVRAM IC 的 PCB 原型。 根据 EPI 外设的主机总线模式(8位)进行连接。 在软件方面、我不知道如何 访问存储器来读取和写入数据 、但我按照外设驱动程序库数据表中的示例代码执行了 EPI 配置部分。
CY14B108K NVRAM 具有1 MB (1024K x 8)内存。 因此需要20条地址线路和8条数据线路。 地址线的 LSB 8位与数据线复用。 因此、D 锁存寄存器 IC 用于解锁多路复用器地址和数据、该地址和数据由 EPI 外设的 ALE 信号控制。
//地址数据位(AD0至 AD7)和剩余行(A8至 A19)的复用8位
MAP_GPIOPinConfigure (GPIO_PK0_EPI0S0); GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_0);//AD0 MAP_GPIOPinConfigure (GPIO_PK1_EPI0S1); GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_1);//AD1 MAP_GPIOPinConfigure (GPIO_PK2_EPI0S2); GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_2);//AD2 MAP_GPIOPinConfigure (GPIO_PK3_EPI0S3); GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_3);//AD3 MAP_GPIOPinConfigure (GPIO_PC7_EPI0S4); GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_7);//AD4 MAP_GPIOPinConfigure (GPIO_PC6_EPI0S5); GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_6);//AD5 MAP_GPIOPinConfigure (GPIO_PC5_EPI0S6); GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_5);//AD6 MAP_GPIOPinConfigure (GPIO_PC4_EPI0S7); GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_4);//AD7
MAP_GPIOPinConfigure (GPIO_PA6_EPI0S8); GPIOPinTypeEPI (GPIO_Porta_base、GPIO_PIN_6);//A8 MAP_GPIOPinConfigure (GPIO_PA7_EPI0S9); GPIOPinTypeEPI (GPIO_Porta_base、GPIO_PIN_7);//A9 MAP_GPIOPinConfigure (GPIO_PG1_EPI0S10); GPIOPinTypeEPI (GPIO_PORTG_base、GPIO_PIN_1);//A10 MAP_GPIOPinConfigure (GPIO_PG0_EPI0S11); GPIOPinTypeEPI (GPIO_PORTG_base、GPIO_PIN_0);//A11 MAP_GPIOPinConfigure (GPIO_PM3_EPI0S12); GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_3);/A12 MAP_GPIOPinConfigure (GPIO_PM2_EPI0S13); GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_2);/A13 MAP_GPIOPinConfigure (GPIO_PM1_EPI0S14); GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_1);/A14 MAP_GPIOPinConfigure (GPIO_PM0_EPI0S15); GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_0);//A15 MAP_GPIOPinConfigure (GPIO_PL0_EPI0S16); GPIOPinTypeEPI (GPIO_PORTL_base、GPIO_PIN_0);//A16 MAP_GPIOPinConfigure (GPIO_PL1_EPI0S17); GPIOPinTypeEPI (GPIO_PORTL_BASE、GPIO_PIN_1);/A17 MAP_GPIOPinConfigure (GPIO_PL2_EPI0S18); GPIOPinTypeEPI (GPIO_PORTL_BASE、GPIO_PIN_2);//A18 MAP_GPIOPinConfigure (GPIO_PL3_EPI0S19); GPIOPinTypeEPI (GPIO_PORTL_BASE、GPIO_PIN_3);/A19
// ACCD。 对于“HB8信号(MODE = ADMUX)”,EPI0S28被配置为 OE*,EPI0S29被配置为 WR*,EPI0S30被配置为 ALE 信号
MAP_GPIOPinConfigure (GPIO_PB3_EPI0S28);
GPIOPinTypeEPI (GPIO_PORTB_BASE、GPIO_PIN_3);//输出使能(低电平有效引脚)
MAP_GPIOPinConfigure (GPIO_PP2_EPI0S29);
GPIOPinTypeEPI (GPIO_PORTP_BASE、GPIO_PIN_2);//写入使能(低电平有效引脚)
MAP_GPIOPinConfigure (GPIO_PP3_EPI0S30);
GPIOPinTypeEPI (GPIO_PORTP_BASE、GPIO_PIN_3);// ALE 信号提供给 D 锁存寄存器 IC
/*
*以下两个引脚是2x4解码器 IC 的输入。 它的配置方式使 NVRAM IC 的 CS*引脚处于此状态
*始终保持在逻辑0
*
GPIOPinWrite (GPIO_PORTL_BASE、GPIO_PIN_4、0x00);
GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_2、GPIO_PIN_2);
//启用 EPI 模块。
SysCtlPeripheralEnable (SYSCTL_Periph_EPI0);
//等待 EPI 模块就绪。
while (!SysCtlPeripheralReady (SYSCTL_Periph_EPI0))
{
}
//设置 EPI 分频器。
EPIDividerSet (EPI0_BASE、0);
//选择 SDRAM 模式。
EPImodeSet (EPI0_BASE、EPI_MODE_HB8);
EPIConfigHB8Set (EPI0_BASE、
EPI_HB8_MODE_ADMUX |//设置数据和地址复用、
EP_HB8_WRWAIT_3 |//将写等待状态设置为2个 EPI 时钟。
EP_HB8_RDWAIT_3 |//将读取等待状态设置为2个 EPI 时钟。
当没有数据可供读取或写入时、EP_HB8_CLOCK_GATE _IDLE|//将 EPI 时钟保持在低电平。
EPI_HB8_CSCFG_ALE、//设置地址锁存低电平有效。
1);//如果 FIFO 就绪信号为、则等待的最大外部时钟数
//暂挂交易。
EPIAddressMapSet (EPI0_BASE、
EPI_ADDR_PER_SIZE 16MB |
EPI_ADDR_RAM_BASE_6);
while (HWREG (EPI0_BASE + EPI_O_STAT)和 EPI_STAT_INITSEQ)
{
//
//等待初始化完成。
//
}
如果我运行代码、就不会出现任何问题。 I control 来自上述 while 环路。 但我不知道如何将数据读/写到 NVRAM IC 中。 我尝试了外设驱动程序库数据表中给出的示例代码、但无法理解。
在 EPIAddressMapSet 配置中、如果我将变量保留为 EPI_ADDR_RAM_BASE_NONE、代码将进入故障中断。 如果我将其保留为 EP_ADDR_RAM_BASE_6、则表示正常。
我的应用程序需要在 NVRAM 中写入和读取结构。
请指导我在内存中读写一个简单的数据。
感谢你能抽出时间。