血流检测仪的动态电源管理模块设计
uClinux启动时调用module_init(Power_44b0_init)函数,进而power_44b0_init被调用,进行相关的初始化:
本文引用地址:https://www.eepw.com.cn/article/86126.htm◆ power0_44b0_reg_init()初始化硬件寄存器;
◆ power_44b0_device_register()注册power_44b0_fops以及中断处理函数power_key_44b0_interrupt(),并且初始化定时器power_down_timer;
◆ 用户程序通过power_44b0_open()函数打开/dev/power设备,通过power_44b0_release()函数释放/dev/power设备,通过power_44b0_ioctl()函数实现对设备的各种操作;
◆ 关机进入stop模式,通过中断处理函数power_key_44b0_interrupt()处理关机键对应的中断,按下关机键后用power_down_timer计时,当3s后,power_down_timer对应的动作power_down_timer_call()发生,从而进入stop模式。
1.2.3 接口设计与接口函数实现
(1)数据结构说明
电源和设备状态由power_status_t的结果表示。
(2)file_operations的值
电源管理模块驱动的file_operations具体值为:
(3)power_44b0_ioctl()函数设计
函数原形:static int power_44b0_ioctl (struct inode *inode, struct file *filp,unsigned int cmd, unsigned int arg)。
功能说明:设备ioctl的操作函数。
参数说明:inode,文件指针,执行操作类型,根据操作类型指定不同参数。
返回值:0表示成功,否则返回ENOTTY。
判断cmd的值,根据cmd的不同值进行不同的操作,电源设备的ioctl主要实现以下14种操作:
(4)power_key_44b0_interrupt
函数原形:static void power_key_44b0_interrupt(int irq, void *dev_id, struct pt_regs *regs) 。
功能说明:响应关机键,进入stop模式。
参数说明:中断号,设备id,寄存器结构。
下面介绍函数的算法描述。
在正常状态下:
2 总结
仪器配置2200mAh的镍氢电池,经过测试,电源管理模块使整个系统的功耗降低了60%。系统在数据采集状态下,由电池的输出电流为220mA左右;如果处于IDLE状态,则电流总消耗为80mA;在STOP状态(关闭ARM和所有设备,维持一个32768 Hz的时钟),电流可降到10mA。实验表明,利用动态电源管理,可对便携式医疗仪器实现有效电源管理。
参考文献
1 马忠梅. ARM嵌入式处理器结构与应用基础. 北京:北京航空航天大学出版社,2002
2 许海燕. 嵌入式系统技术与应用. 北京:机械工业出版社,2002
评论