回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

Beetle 树莓派RP2350 - 脉搏心率传感器的编程从AVR到ARM的异同和转换 简单

头像 阿朱 2025.05.26 11 0

Beetl RP2350 是一款基于RP2350芯片设计的高性能迷你开发板,双核双架构设计,即Arm Cortex-M33或Hazard3 RISC-V为内核。可采用ArduinoIDE进行开发,而Arduino是以Atmel AVR单片机为核心的单片机系统板,开发环境以AVR的开源软件为基础。

beetle RP2350

本实验采用pulsesensor脉搏心率传感器

image.png

 

在对pulse-sensor,脉搏心率传感器进行开发时,在RP2350开发板上使用为AVR单片机设计的定时器中断代码,由于RP2350是基于ARM架构的芯片,如果原代码是用AVR架构,ATmega328P编写的,两者在定时器配置上不兼容,报错。需要把原有的AVR(Arudino)code转换成RP2350(ARM)code,用RP2350硬件定时器替换Timer2中断,更新ARM架构的中断处理:

中断机制:
将AVR的Timer中断替换为RP2350的硬件Timer系统
使用repeating_timer代替AVR的特定定时器中断
中断控制:
将cli()替换为save_and_disable_interrupts()
将sei()替换为restore_interrupts()
计时器回调返回true以继续重复
定时器设置:
使用add_repeating_timer_ms()创建2ms周期性中断
定时器系统自动管理中断启用
包括:
为定时器和中断控制添加了必要的RP2040 SDK标头
ISR转换:
将ISR转换为定时器回调函数
其他原始脉搏检测逻辑不变。

原程序:

void interruptSetup(){    

  // Initializes Timer2 to throw an interrupt every 2mS.

  TCCR2A = 0x02;     

  TCCR2B = 0x06;     

  OCR2A = 0X7C;      

  TIMSK2 = 0x02;     

  sei();               

}

 

修改后的程序:

void interruptSetup() {

    // Cancel any existing timer

    if(timerAlarmId) cancel_alarm(timerAlarmId);

   

    // Setup repeating timer (2ms interval)

    timerAlarmId = add_alarm_in_us(2000, timerCallback, NULL, true);

}

 

另外,心跳指示灯采用默认的pin25,在有心跳的时候点亮。还有模拟输出,根据信号强弱显示不同亮度。

934e0f2b9e61abcb9511fadd7e86aa2.jpg
1748267638244.png

评论

user-avatar