在數(shù)據(jù)存儲(chǔ)應(yīng)用中,EEPROM用的非常廣泛,以前常常需要在電路中外接一個(gè)EEPROM芯片,隨著MCU技術(shù)的發(fā)展,EEPROM慢慢集成到了MCU內(nèi)部,容量也越來越大,逐漸替代之前的單獨(dú)EEPROM芯片,本帖將利用Atmel SAM D20 Xplained Pro ,對(duì)EEPROM 作出簡單使用說明。
①關(guān)于Atmel Studio 7.0 的使用說明,工程建立,ASF軟件庫添加,請(qǐng)參考:
②添加以下ASF庫
PORT - GPIO Pin Control(driver)
BOD - Brown Out Detector(driver)
EEPROM Emulator Service(driver)
③編寫代碼,示例代碼如下:
#include
void configure_eeprom(void);
void configure_eeprom(void)
{
enum status_code error_code = eeprom_emulator_init();
if (error_code == STATUS_ERR_NO_MEMORY)
{
while (true);
}
else if (error_code != STATUS_OK)
{
eeprom_emulator_erase_memory();
eeprom_emulator_init();
}
}
void SYSCTRL_Handler(void)
{
if (SYSCTRL-》INTFLAG.reg & SYSCTRL_INTFLAG_BOD33DET) {
SYSCTRL-》INTFLAG.reg = SYSCTRL_INTFLAG_BOD33DET;
eeprom_emulator_commit_page_buffer();
}
}
static void configure_bod(void)
{
struct bod_config config_bod33;
bod_get_config_defaults(&config_bod33);
config_bod33.action = BOD_ACTION_INTERRUPT;
config_bod33.level = 48;
bod_set_config(BOD_BOD33, &config_bod33);
bod_enable(BOD_BOD33);
SYSCTRL-》INTENSET.reg = SYSCTRL_INTENCLR_BOD33DET;
system_interrupt_enable(SYSTEM_INTERRUPT_MODULE_SYSCTRL);
}
int main(void)
{
system_init();
configure_eeprom();
configure_bod();
uint8_t page_data[EEPROM_PAGE_SIZE];
eeprom_emulator_read_page(0, page_data);
page_data[0] = !page_data[0];
port_pin_set_output_level(LED_0_PIN, page_data[0]);
eeprom_emulator_write_page(0, page_data);
eeprom_emulator_commit_page_buffer();
page_data[1]=0x1;
eeprom_emulator_write_page(0, page_data);
while (1)
{
}
}
-
Atmel
+關(guān)注
關(guān)注
17文章
311瀏覽量
107281
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論