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.

求助:LM4F120 flash应用的例程

之前移植了一个LM3S的Flash读写,以及Flash用作EEPROM的例程,但是不知为什么在EK-LM4F120XL Launchpad上运行不了。

一下是源代码:

#include"inc/hw_types.h"
#include"inc/hw_memmap.h"
#include"inc/hw_flash.h"


#include"driverlib/sysctl.h"
#include"driverlib/flash.h"

// 定义Flash扇区号(每个扇区1024字节)
#define SECTION 62

// 初始化用Flash虚拟的EEPROM
void FlashEEPROM_Init(void)
{
//使能flash
//SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
FlashUsecSet(SysCtlClockGet() / 1000000); // 设置每微秒的CPU时钟数
}

// 从Flash虚拟的EEPROM指定地址处读取1个字节
// usAddr=0~1023
char FlashEEPROM_Read(unsigned short usAddr)
{
char *pcData;

pcData = (char *)(SECTION * 1024 + (usAddr & 0x03FF));

return(*pcData);
}

// 从Flash虚拟的EEPROM指定地址处读取N个字节
void FlashEEPROM_ReadN(unsigned short usAddr, char *pcData, unsigned short usN)
{
unsigned short i;

if (usN > 0)
{
for (i = 0; i < usN; i++)
{
pcData[i] = FlashEEPROM_Read(usAddr + i);
}
}
}

// 向Flash虚拟的EEPROM指定地址处写入1个字节
// usAddr=0~1023
void FlashEEPROM_Write(unsigned short usAddr, char cData)
{
char cBuf[1024];
unsigned long *pulData = (unsigned long *)(cBuf);

FlashEEPROM_ReadN(0, cBuf, 1024); // 读取1KB扇区内容
cBuf[usAddr & 0x3FF] = cData; // 修改1个字节缓冲区内容
FlashErase(SECTION * 1024); // 擦除1KB扇区
FlashProgram(pulData, SECTION * 1024, 1024); // 编程1KB扇区
}


// 向Flash虚拟的EEPROM指定地址处写入N个字节
void FlashEEPROM_WriteN(unsigned short usAddr, const char *pcData, unsigned short usN)
{
char cBuf[1024];
unsigned long *pulData = (unsigned long *)(cBuf);
unsigned short i;

if (usN > 0)
{
FlashEEPROM_ReadN(0, cBuf, 1024); // 读取1KB扇区内容

for (i = 0; i < usN; i++) // 修改1KB缓冲区内容
{
cBuf[(usAddr + i) & 0x03FF] = pcData[i];
}

FlashErase(SECTION * 1024); // 擦除1KB扇区
FlashProgram(pulData, SECTION * 1024, 1024); // 编程1KB扇区
}
}

void main()
{

// 40 MHz system clock
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|
SYSCTL_XTAL_16MHZ |SYSCTL_OSC_MAIN);

static char cString[] = "Hello, world\r\n";
static char cBuf[30];

FlashEEPROM_Init(); // 虚拟的FlashEEPROM初始化

FlashEEPROM_WriteN(100, cString, sizeof(cString));
FlashEEPROM_ReadN(100, cBuf, sizeof(cString));

while(1);


}