基于ASF的Atmel SAM D系列EEPROM快速上手指南详解

电子说

1.2w人已加入

描述

在数据存储应用中,EEPROM用的非常广泛,以前常常需要在电路中外接一个EEPROM芯片,随着MCU技术的发展,EEPROM慢慢集成到了MCU内部,容量也越来越大,逐渐替代之前的单独EEPROM芯片,本帖将利用Atmel SAM D20 Xplained Pro ,对EEPROM 作出简单使用说明。

①关于Atmel Studio 7.0 的使用说明,工程建立,ASF软件库添加,请参考:

②添加以下ASF库

PORT - GPIO Pin Control(driver)

BOD - Brown Out Detector(driver)

EEPROM Emulator Service(driver)

Atmel

③编写代码,示例代码如下:

#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)

{

}

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分