工具/软件:Code Composer Studio
你(们)好
我编写了一个简单的程序来计算大小、块数量、并在6KB EEPROM 存储器中写入一个模式。
我从地址0x0开始。 最多96个块(0至05)、并假设这将负责写入整个 EEPROM。 回读后打印到 UART 太硬、有时会使 Putty 挂起、
我想查看 EEPROM 中写入的内容。 我该怎么做?
我要附加程序
/
********** 读写 EEPROM 的基本程序
*
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_gpio.h"
#include "inc/hw_ints.h"
#include "driverlib/gpio.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/EEPROM.h"
#include "utils/uartstdio.h"
#include "drivers/pinout.h"
/
*
*变量
*
**
*
#define E2PROM_TEST_ADDRESS 0x0000
/
* main.c
(二 /
int main (void){
uint32_t e2size、e2block;
uint32_t ui32SysClock;
uint32_t ui32EEPROMInit、ui32EEPROMStatus;
//数据变量和地址
uint32_t pui32Data[2];
uint32_t pui32read[2];
//******** 将 CPU 时钟设置为120 MHz //
//从 PLL 以120MHz 运行。
//
ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
//******** 启用板载 LED 的系统时钟 //
//启用用于板载 LED 的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
//检查是否启用了外设访问。
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION))
{
}
//
//关闭 LED。
//
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0x0);
//为 LED (PN0)启用 GPIO 引脚。 将方向设置为输出、然后
//启用 GPIO 引脚以实现数字功能。
GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0);
SysCtlDelay (20000);
//打开板 LED
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);
//******** 初始化 UART //
/* EEPROM 设置*/
SysCtlPeripheralEnable (SYSCTL_Periph_EEPROM0);// EEPROM 激活
//
//等待 EEPROM 模块准备就绪。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_EEPROM0))
{
}
//等待 EEPROM 初始化完成
ui32EEPROMInit = EEPROMInit();
//
//检查 EEPROM 初始化是否返回错误
//并通知应用程序
//
if (ui32EEPROMInit!= EEPROM_INIT_OK)
{
while (1)
{
}
}
/* UART 设置*/
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
UARTStdioConfig (0、115200、ui32SysClock);
/********* 主要行动 /
UARTprintf ("EEPROM 测试程序\r\n");
e2size = EEPROMSizeGet ();//获取 EEPROM 大小
UARTprintf ("EEPROM 大小%d 字节\n"、e2size);
e2block = EEPROMBlockCountGet ();//获取 EEPROM 块计数
UARTprintf ("EEPROM 块计数:%d\n"、e2block);
//***测试部分***************** /
//将一些数据编程到地址0x0000处的 EEPROM 中。
//计算 EEPROM 的大小和该大小的块数
pui32Data[0]= 0xFFFFFFFF;
pui32Data[1]= 0x00000000;
//等待编程完成
ui32EEPROMStatus = EEPROMProgram (pui32Data、0x400、sizeof (pui32Data));
while (ui32EEPROMStatus = EEPROM_RC_working){
}
UARTprintf ("写入 EEPROM 的数据:%d\n"、pui32Data);
//
//读回它。
//如果正在进行写入,请勿尝试读取
if (ui32EEPROMStatus!= EEPROM_RC_WRBUSY)
EEPROMRead (pui32Read、0x400、sizeof (pui32Read));
UARTprintf ("从 EEPROM 读取的数据:%d\n"、pui32Read);
int i =0、j=0;
/
//对于整个 EEPROM:迭代次数= EEPROMSIZE/EEPROMBLOCKS :j<(e2size/e2block)
//计算如下:
//内部循环始终遍历每个块
//外部循环负责从起始地址到每个块的正确偏移量
//第一个块:j=0l;所以内部循环从0到95位置
//内部循环的第二次迭代:j 为1 (外部循环),因此我们遍历位置96到192。
(二 /
对于(j=0;j<(e2size/e2block);j++){
对于(i=0 <e2block;i++) {
//一个块
//等待写入完成
ui32EEPROMStatus = EEPROMProgram (pui32Data、(E2PROM 测试地址+i+j*e2block)
,sizeof (pui32Data));
while (ui32EEPROMStatus = EEPROM_RC_working){
}//等待当前程序完成
//如果正在进行写入,请勿尝试读取
ui32EEPROMStatus = EEPROMStatusGet ();
如果(!ui32EEPROMStatus)// EEDONE 寄存器在 EEPROM 空闲时全为零
EEPROMRead (pui32Read、(E2PROM 测试地址+i+j*e2block)、sizeof (pui32Read));
// UARTprintf ("块%d:位置:、%d、j、i);
// UARTprintf ("从 EEPROM 读取的数据:%d\n"、pui32Read);
// UARTFlushTx (1);//等待数据被清空
}//结束内部循环
UARTprintf ("完成块 EEPROM:%d\n"、j);
}//结束循环
UARTprintf ("完成整个 EEPROM:\n");
while (1)
{
}
返回0;
}