This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件: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 中写入和读取结构。
请指导我在内存中读写一个简单的数据。
感谢你能抽出时间。
您好、Raghul、
这与您所连接的存储器芯片非常具体、因此我不确定我能在多大程度上提供帮助、但我会尝试并引导我可以在哪些方面提供帮助。
关于 EPIConfigHB8Set 配置、您有一个变量设置为 EPI_HB8_CSCFG_ALE、但芯片的 D/S 更表明它是片选、这意味着您需要 EPI_HB8_CSCFG_CS。
关于 EPIAddressMapSet,这些注释可以更好地说明您发现该问题的原因。 请记住、您使用的是外部 RAM、因此您希望处理器具有存储器映射位置来访问数据、这意味着您需要定义的基址:
//! 此函数用于配置外部 //!的地址映射 接口、它随后确定外部存储器的基址或 //! 处理器外设和/或存储器空间内的器件。 //! - RAM 基地址、选择以下任一项 ://! -\b EPI_ADDR_RAM_BASE_NONE 将 RAM 空间地址设置为 NONE。 //! -\b EPI_ADDR_RAM_BASE_6将 RAM 空间地址设为0x60000000。 //! -\b EPI_ADDR_RAM_BASE_8将 RAM 空间地址设为0x8000000。
查看存储器芯片 D/S、从它读取数据看起来有点复杂。 您是否查看过您的应用代码、认为您将正确的信号保持在正确的信号电平? 您还应该使用示波器验证信号、并且您可能需要检查存储器的时序图。
例如、读为"CY14B108K/CY14B108M 在 CE 和 OE 为低电平、WE 和 HSB 为高电平时执行读取周期"
因此、您应该检查所有这些信号的设置是否正确、因为您需要在 EPI 接口之外控制其中的一些信号。