高级会员
- 积分
- 658
- 金钱
- 658
- 注册时间
- 2013-11-22
- 在线时间
- 131 小时
|
众所周知,玩单片机,做底层的话,无非就是配置各种寄存器,我们需要在能看懂
硬件原理图的情况之下,让我们的硬件工作起来,也就是写所谓的驱动,那么编写
驱动是否有一种统一的步骤呢?大牛们可以用一些伪代码总结总结,这里根据自己
的想法,写了一部分,希望可以引来更多更详细的总结,让我们的底层开发人员
更清楚的知道自己能做什么?该做什么?
寄存器配置的一般步骤总结:
初始化
{
打开总时钟; //1.如果已经打开,则不用配置;否则配置,这里面我们一般要去看该芯片的数据手册
// 中“时钟树”里面,关于时钟的配置图解来操作对应的寄存器
打开该硬件时钟; //2.如果已经打开,则不用配置;否则配置,有些芯片为了省电设计,都会有单独的时钟
// 这时候要打开相应的时钟,才能让该硬件工作
设置引脚模式; //3.若需求为默认模式,则不用配置;否则配置,基本上IO口都会有2个以上的功能,那么
// 该使用哪种功能,需要用户来配置,这里面可以去查看关于引脚功能相关的说明
// 来配置模式寄存器
配置硬件控制器参数; //4.这里根据自己的需要,对每个关心的寄存器进行置位或清零,达到所需配置模式,这里面
// 需要用户去仔细查看该控制器的寄存器描述
中断初始化配置; //5.如果使用到对应中断的话,请打开相应中断,及配置中断的特性,根据需要,编写中断服务函数
中断开关; //6.初始化时根据需要打开或关闭中断开关
控制器开关; //7.初始化时根据需要打开或关闭控制器开关
}
写操作 //一般指该硬件与其它硬件交互数据,如IO口输出高低电平,串口、485或CAN发生数据等等
{
判断上次写操作是否结束; //1.根据具体情况,判断上次写操作是否结束
如果结束,执行一次写操作; //2.给出相应的输出操作
}
读操作 //一般指该硬件与其它硬件交互数据,如IO口读入高低电平,串口、485或CAN接收数据等等
{
判断上次写操作是否结束; //1.根据具体情况,判断是否可读
如果可读,执行一次读操作; //2.读取相应的数据
}
中断服务函数
{
判断是何种中断; //1.判断中断的来源,做不同的中断处理
读取相应的中断指定的数据; //2.中断触发,说明可以进行相关的操作,该读取读取,该写入写入
}
写的不好,抛砖引玉,欢迎大家一起总结,让编程更自由!
|
|