jw1288 发表于 2013-1-9 12:55:00

CORTEX M3 读取flash 数据的问题

如何读取写入FLASH中的数据, siliconlabsim3u167 手册2.1 部分只说 读取FLASH中的数据有标准的ARM 读取指令,但没有详细说明。 同时21.3部分只说了 FLASH 读控制

gr_li 发表于 2013-1-10 13:25:34

和其它的空间读取操作一致,指针直接操作即可。

yuzhi2222 发表于 2013-1-12 11:00:59

LZ的意思是不是把flash当存储用,在空间要求不大的情况下可以节省一片存储芯片
#define   CR_LOCK_Set          0x00000080
#define   CR_PER_Set         0x00000002
#define   CR_PER_Reset         0x00001FFD
#define   CR_STRT_Set          0x00000040
#define   CR_PG_Set            0x00000001
#define   CR_PG_Reset          0x00001FFE
#define   flash_key1         0x45670123
#define   flash_key2         0xCDEF89AB
/*****************************************************/
void flash_unlock(void)
{
FLASH->KEYR = flash_key1;
FLASH->KEYR = flash_key2;
}
/*****************************************************/
void flash_lock(void)
{
FLASH->CR |= CR_LOCK_Set;
}
/*****************************************************/
void flash_erasepage(uint32 page_addr)
{
while(FLASH->SR & 0x01);
FLASH->CR|= CR_PER_Set;
FLASH->AR = page_addr;
FLASH->CR|= CR_STRT_Set;
while(FLASH->SR & 0x01);
FLASH->CR&= CR_PER_Reset;
}
/*****************************************************/
void flash_proghalfword(uint32 addr_i,uint16 data)
{
while(FLASH->SR & 0x01);
FLASH->CR |= CR_PG_Set;
*(vu16*)addr_i= data;
while(FLASH->SR & 0x01);
FLASH->CR &= CR_PG_Reset;
}
/*****************************************************/
读的时候:read_byte=*(vu8*)(addr_i);
               read_short=*(vu16*)(addr_i);
这个程序我用了三年了
页: [1]
查看完整版本: CORTEX M3 读取flash 数据的问题