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

在对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,在有心跳的时候点亮。还有模拟输出,根据信号强弱显示不同亮度。


评论