‌树莓派Pico‌的timer

pico-sdk-api文档

rp2040-datasheet.pdf

getting-started-with-pico.pdf

树莓派 Pico 之可编程 IO(PIO)

diagram.json

json 复制代码
{
  "version": 1,
  "author": "wang minglie",
  "editor": "wokwi",
  "parts": [
    {
      "type": "wokwi-pi-pico",
      "id": "pico",
      "top": -3.15,
      "left": 3.6,
      "attrs": { "builder": "pico-sdk" }
    },
    { "type": "wokwi-logic-analyzer", "id": "logic1", "top": -143.65, "left": 326.4, "attrs": {} }
  ],
  "connections": [
    [ "pico:GP0", "$serialMonitor:RX", "", [] ],
    [ "pico:GP1", "$serialMonitor:TX", "", [] ],
    [ "pico:GP21", "logic1:D0", "green", [ "h116.4", "v-230.4", "h19.2", "v-38.4" ] ]
  ],
  "dependencies": {}
}

wokwi.toml

xml 复制代码
[wokwi]
version = 1
firmware = "cmake-build-debug-pico/pio_squarewave.uf2"
elf = "cmake-build-debug-pico/pio_squarewave.elf"

main.c

10us 进入一次定时器中断

c 复制代码
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/timer.h"
#include "hardware/irq.h"

#define ALARM_NUM 0
#define ALARM_IRQ TIMER_IRQ_0

const uint LED_PIN = 21;

// 每 10 微秒触发一次中断
#define PERIOD_US 10+1

// 中断处理函数:每 1µs 翻转 GPIO
static void timer0_irq_handler(void) {
    // 清除 timer0 中断标志
    hw_clear_bits(&timer_hw->intr, 1u << ALARM_NUM);

    // 翻转 LED 电平
    gpio_xor_mask(1u << LED_PIN);

    // 设置下一次中断(当前时间 + 1µs)
    uint32_t next = timer_hw->timerawl + PERIOD_US;
    timer_hw->alarm[ALARM_NUM] = next;
}

static void init_timer0_interrupt(void) {
    // 清中断标志
    hw_clear_bits(&timer_hw->intr, 1u << ALARM_NUM);

    // 使能 timer0 中断
    hw_set_bits(&timer_hw->inte, 1u << ALARM_NUM);

    // 注册中断处理函数
    irq_set_exclusive_handler(ALARM_IRQ, timer0_irq_handler);
    irq_set_enabled(ALARM_IRQ, true);

    // 第一次触发:当前时间 + PERIOD_US
    timer_hw->alarm[ALARM_NUM] = timer_hw->timerawl + PERIOD_US;
}

int main() {
    stdio_init_all();

    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    gpio_put(LED_PIN, 0);   // 初始为低电平

    init_timer0_interrupt();

    // 主循环不做任何事
    while (true) {
        tight_loop_contents();
    }
}
相关推荐
BBNbQKHXygfU2 天前
基于遗传算法优化BP神经网络的时间序列预测探索
mcu
想放学的刺客2 天前
单片机嵌入式试题(第30期)全局变量“满天飞“!!!局限性和影响有哪些,什么情况下才不得不使用?
单片机·嵌入式硬件·mcu·物联网·51单片机
网易独家音乐人Mike Zhou2 天前
【RealMCU】瑞昱官方LOG信息保存及解析,DebugAnalyzer自动化接收脚本(不需要用到ROM.trace文件)
单片机·mcu·物联网·自动化·嵌入式·iot·瑞昱
郝亚军5 天前
获取libiec61850和如何编译iec61850库
mcu·tcp/ip
liu_endong5 天前
杰发科技AC7840——打印所有GPIO的PORT配置寄存器
mcu·算法·杰发科技·autochips·车规芯片
想放学的刺客5 天前
单片机嵌入式系统试题(第28期)flash芯片各引脚作用?低功耗设计估算电池续航时间是多少?如何优化低功耗等项目经验
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机
MickyCode7 天前
嵌入式开发调试之Traceback
arm开发·stm32·单片机·mcu
wotaifuzao8 天前
【Keil 5安装】keil 5最新版本安装+环境配置+下载百度资源分享(安装包,注册机等)
stm32·单片机·嵌入式硬件·mcu·学习·keil5·最新keil
帅次8 天前
系统分析师-信息物理系统分析与设计
stm32·单片机·嵌入式硬件·mcu·物联网·iot·rtdbs
MounRiver_Studio9 天前
RISC-V IDE MRS2进阶分享(三):MRS语言服务器
ide·mcu·risc-v·嵌入式开发