18、C++ 底层硬件驱动开发全解析

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值