电子说
在数据存储应用中,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)
③编写代码,示例代码如下:
#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)
{
}
}
全部0条评论
快来发表一下你的评论吧 !