打印
[LKS32 硬件]

演示如何在中断中写入EEPROM

[复制链接]
199|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 你要先把其他中断都暂停了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

289

帖子

2

粉丝