📘 全志D1s · 裸机中断与定时器
🎯 30章 实战目录
🧩 RISC-V · 裸机 · 中断 · 定时器 · 驱动
✨ 友好色系
01
RISC-V 裸机开发环境搭建
交叉编译工具链安装 · Makefile 基础 · 链接脚本(.lds) 解析 · D1s 启动流程与 BROM 加载
02
D1s 内存映射与 GPIO 控制
查看数据手册 · 系统内存地址映射 · GPIO 寄存器详解 · 点亮第一颗 LED
03
UART 串口通信原理与轮询驱动
UART 协议基础 · D1s UART0 寄存器配置 · 轮询方式发送与接收字符 · 实现 printf 函数
04
RISC-V 中断机制入门
中断概念 · 异常与中断的区别 · RISC-V 特权架构(Machine/Supervisor/User 模式)· mtvec 寄存器与中断向量表
05
D1s 中断控制器 (PLIC) 详解
PLIC 架构 · 中断源与中断号 · PLIC 寄存器(优先级、使能、挂起、阈值)· 中断使能流程
06
裸机中断编程实战(外部按键中断)
GPIO 中断配置 · PLIC 初始化 · 中断服务函数 (ISR) 编写 · 中断上下文保存与恢复
07
RISC-V 定时器原理
mtime/mtimecmp 寄存器 · CLINT 模块介绍 · 定时器计数频率计算 · 单次定时与周期定时模式
08
D1s 裸机定时器驱动实现
初始化 mtimecmp · 设置定时周期 · 清除定时器中断标志 · 在中断中重新装载计数值
09
中断优先级与嵌套
PLIC 优先级配置 · 中断抢占与嵌套实现 · 中断栈设计 · 中断延迟分析
10
软件定时器与时间片轮转
基于硬件定时器实现软件定时器链表 · 时间片轮转调度框架 · 任务状态切换
11
PWM 输出与呼吸灯
PWM 原理 · D1s PWM 控制器寄存器 · 配置 PWM 频率与占空比 · 利用定时器中断实现呼吸灯效果
12
外部中断 (NMI) 与唤醒源
不可屏蔽中断 (NMI) 特性 · D1s 唤醒源配置 · 低功耗模式下的中断唤醒
13
中断向量表重定向与 Vectored Mode
Direct Mode 与 Vectored Mode 区别 · 配置 mtvec 为 Vectored Mode · 中断向量表编写
14
异常处理与故障诊断
同步异常(指令未对齐、非法指令、断点等)· 异常委托机制 · 异常处理函数编写 · 打印异常现场
15
SysTick 系统滴答定时器
SysTick 原理 · 基于 mtime 实现 SysTick · 提供毫秒级延时函数 · 在中断中更新系统时钟
16
DMA 与中断协同工作
DMA 控制器简介 · DMA 传输完成中断 · DMA 与 CPU 并行处理 · 内存到外设的 DMA 传输示例
17
I2C 总线协议与中断驱动
I2C 协议时序 · D1s I2C 控制器寄存器 · 中断方式驱动 I2C 读写 · 实现 EEPROM 读写
18
SPI 总线协议与中断驱动
SPI 模式与极性 · D1s SPI 控制器寄存器 · 中断方式驱动 SPI · 驱动 SPI Flash 读取 ID
19
中断驱动的按键扫描与消抖
机械按键抖动原理 · 硬件消抖与软件消抖 · 定时器中断实现状态机消抖 · 单击/双击/长按识别
20
中断驱动的矩阵键盘驱动
矩阵键盘原理 · 行列扫描 · 中断触发扫描 · 键值映射与上报
21
中断驱动的编码器驱动
正交编码器原理 · 定时器捕获模式 · 中断读取编码器位置与方向
22
中断驱动的超声波测距
HC-SR04 时序 · 定时器捕获回响脉冲宽度 · 中断方式实现非阻塞测距
23
中断驱动的 DHT11/DHT22 温湿度传感器
单总线协议 · 定时器中断模拟时序 · 中断方式读取温湿度数据
24
中断驱动的 WS2812B LED 驱动
WS2812B 时序要求 · 定时器中断精确控制时序 · DMA+定时器实现高速刷新
25
中断驱动的 NES 手柄读取
NES 手柄协议 · 定时器中断模拟时钟 · 中断方式读取按键状态
26
FreeRTOS 在 D1s 上的移植(中断视角)
FreeRTOS 中断配置 · PendSV 与 SysTick 中断 · 临界区保护 · 中断中切换任务
27
中断性能优化与测量
中断响应时间测量 · 中断处理时间优化 · 中断合并与防抖 · 使用逻辑分析仪验证时序
28
多核中断处理(D1s 为单核,但讲解概念)
多核系统中的中断分发 · 核间中断 (IPI) · 原子操作与自旋锁
29
综合项目:中断驱动的多功能数据采集器
整合 GPIO、UART、I2C、SPI、定时器中断,实现传感器数据采集与串口打印
30
调试技巧与常见问题排查
GDB 调试裸机程序 · OpenOCD 使用 · JTAG/SWD 调试 · 常见中断问题(未使能、未清标志、栈溢出)排查