[LKS32 硬件] 演示如何在中断中写入EEPROM

[复制链接]
1284|3
 楼主| o88ne 发表于 2024-2-29 15:10 | 显示全部楼层 |阅读模式
在嵌入式系统中,通过中断来写入EEPROM以优化延时是一种常见的做法。使用中断可以使系统在等待EEPROM写入完成的同时执行其他任务,从而提高系统的效率。以下是一个简单的示例,演示了如何在中断中写入EEPROM:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>

// 定义EEPROM存储地址
#define EEPROM_ADDRESS 0x00

// 定义要写入EEPROM的数据
uint8_t data_to_write = 0xAA;

// 中断服务程序
ISR(EE_READY_vect) {
    // EEPROM写入完成中断
    // 可以在这里执行其他任务

    // 清除中断标志
    EECR |= (1 << EEPE);

    // 关闭中断
    EIMSK &= ~(1 << EEIE);
}

// 初始化函数
void init() {
    // 设置EEPROM写入完成中断使能
    EECR |= (1 << EERIE);

    // 允许中断
    sei();
}

// 写入EEPROM函数
void write_to_eeprom() {
    // 写入数据到EEPROM
    eeprom_write_byte((uint8_t*)EEPROM_ADDRESS, data_to_write);

    // 开启中断
    EIMSK |= (1 << EEIE);
}

int main() {
    // 初始化系统
    init();

    // 写入EEPROM
    write_to_eeprom();

    // 执行其他任务
    while (1) {
        // 可以在这里执行其他任务
    }

    return 0;
}


上述代码使用了AVR微控制器的AVR Libc库,实现了在EEPROM写入完成时触发中断。在主循环中,可以执行其他任务,而不需要等待EEPROM写入完成。
FranklinUNK 发表于 2024-3-11 10:48 来自手机 | 显示全部楼层
这个只能放在中断里吗
 楼主| o88ne 发表于 2024-3-27 20:23 | 显示全部楼层
FranklinUNK 发表于 2024-3-11 10:48
这个只能放在中断里吗

选择哪种方法取决于具体的应用场景、系统需求以及微控制器的功能和性能特点。在某些情况下,中断可能是最合适的选择,一些微控制器支持DMA(Direct Memory Access)功能,可以通过DMA来实现EEPROM写入的优化。DMA可以在后台执行数据传输操作,从而减少CPU的负载并提高系统的效率。
xionghaoyun 发表于 2024-3-28 08:32 | 显示全部楼层
中断中写入EEPROM 你要先把其他中断都暂停了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

426

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部