C++ 底层硬件驱动开发全解析
1. C++ 底层硬件驱动的特性
C++ 底层硬件驱动具有明显的非移植性特点,它们通常是针对特定的微控制器和编译器编写的,难以以通用形式呈现。在编程中断时,最后一步是启用中断源,一般通过直接内存访问在特殊功能寄存器中设置特殊的使能位来实现。例如,以下代码用于启用 timer0 比较匹配中断:
// chapter09_02-002_enable_timer_interrupt.cpp
// Enable the timer0 compare match a interrupt.
mcal::reg_access_static<
std::uint8_t,
std::uint8_t,
mcal::reg::timsk0,
UINT8_C(0x02)>::reg_set();
此代码在 8 位微控制器目标中启用了 timsk0 特殊功能寄存器的第 1 位(值为 0x02),该代码位于 “mcal_gpt.cpp” 文件的 mcal::gpt::init() 子例程的 MCAL 层。
2. 系统滴答的实现
系统滴答是底层驱动软件的重要组成部分,它为整个软件项目提供时基。例如,多任务调度器就依赖系统滴答提供的时基。下面将使用 8 位微控制器上的 timer0 创建系统滴答。
2.1 系统滴答的组成
由于 timer0 的计数器和比较寄存器为 8 位宽,32 位系统滴答需要通过硬件和软件结合的方式合成。系统滴答的低字节来自 timer0 计数器寄存器 tcnt0,高三个字节存储在变量 s
超级会员免费看
订阅专栏 解锁全文
352

被折叠的 条评论
为什么被折叠?



