新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 便攜嵌入式設(shè)備電源管理解決方案

        便攜嵌入式設(shè)備電源管理解決方案

        作者: 時(shí)間:2012-03-16 來(lái)源:網(wǎng)絡(luò) 收藏

        SA - 1110進(jìn)入Sleep模式的代碼片斷如下:

        extern void cpu_sa1110_resume ( voi
        d) ; /3 SA - 1110返回函數(shù)3 /
        extern int cpu_sa1110_do_suspend ( void) ; /3 SA - 1110睡眠函數(shù)3 /
        int sa1110_suspend ( void)
        {
        . . .
        cli ( ) ; /3 關(guān)閉中斷3 /
        sys_ctx. osmr0 = OSMR0; /3 保存重要的寄存器3 /
        . . .
        sys_ctx. p sdr = PSDR;
        . . .
        PSPR = virt_to_phys ( cpu_sa1100_resume) ; /3 設(shè)置返回函數(shù)地址3 /
        cpu_sa1110_do_suspend ( ) ; /3 進(jìn)入睡眠3 //3 退出睡眠3 /
        GPDR = sys_ctx. gpdr; /3 恢復(fù)寄存器3 /
        GRER = sys_ctx. grer;
        GFER = sys_ctx. gfer;
        GAFR = sys_ctx. gafr;
        . . .
        sti ( ) ; /3 啟動(dòng)中斷3 /
        return 0;
        }

        (2)實(shí)現(xiàn)各個(gè)外設(shè)的代碼

        利用Linux內(nèi)核提供子系統(tǒng),可以將iPAQ中的每個(gè)需要實(shí)現(xiàn)的外部納入統(tǒng)一的管理。這需要在各個(gè)的驅(qū)動(dòng)程序中使用電源管理子系統(tǒng)的接口函數(shù)(如2. 1所描述)和實(shí)際的硬件操作代碼,這里將以顯示為例:

          /3 SA - 1110 frame buffer電源管理請(qǐng)求處理函數(shù)3 /
        static int sa1110fb_pm_callback ( struct pm_dev 3 pm_dev, pm
        _request_t req, void

        3 data)
        {
        struct sa1110fb_info 3 fbi = pm_dev - > data;
        if ( req = = PM_SUSPEND | | req = = PM_RESUME) {
        int state = ( int) data;
        if ( state = = 0) {
        set_ctrlr_ state ( fbi, C_ENABLE) ; /3 進(jìn)入D0 模式,開啟LCD控制器3 /
        } else {

        set_ctrlr_state ( fbi, C_D ISABLE) ; /3 進(jìn)入D1 - D3模式關(guān)閉LCD 控制器. 3 /
        } }
        return 0;
        }
        /3 SA - 1110 frAME buffer驅(qū)動(dòng)初始化函數(shù)3 /
        int __init sa1110fb_init ( void)
        {
        struct sa1110fb_info 3 fbi;
        int ret;
        . . .
        /3 在電源管理子系統(tǒng)中注冊(cè)3 /
        fbi - > pm = pm _ register ( PM _SYS_DEV, PM _SYS_VGA,
        sa1110fb_pm_callback) ;
        if ( fbi - > pm)
        fbi - > pm - > data = fbi; /3 設(shè)置私有數(shù)據(jù)3 / . . .
        return ret;
        }

        3)實(shí)現(xiàn)電源管理設(shè)備

        這個(gè)設(shè)備實(shí)際是用于接受用戶空間程序的控制所用,所以只需要簡(jiǎn)單的實(shí)現(xiàn)“ioctl”調(diào)用就可以了。

          /3 ioctl調(diào)用方法3 /
        static int do_ioctl ( struct inode 3 inode, struct file 3 filp, u_int
        cmd, u_long arg)
        { . . .
        switch ( cmd) {
        case APM_ IOC_STANDBY: {
        pm_send_all ( PM_SUSPEND, ( void 3 ) 2) ; /3 外設(shè)掛起3 /

        ; } break;
        case APM_ IOC_RESUME: {
        pm_send_all ( PM_RESUME, ( void 3 ) 0) ; /3 外設(shè)喚醒3 /
        } break;
        case APM_ IOC_SUSPEND: {

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 黄骅市| 翼城县| 江阴市| 铜陵市| 黄冈市| 滨海县| 黄陵县| 黄大仙区| 通城县| 搜索| 嘉禾县| 翁牛特旗| 电白县| 陇川县| 左权县| 三门峡市| 广宁县| 济南市| 宜春市| 通渭县| 琼结县| 来凤县| 克山县| 乐亭县| 重庆市| 广水市| 崇仁县| 丰宁| 雷山县| 南通市| 巴林左旗| 元谋县| 天长市| 纳雍县| 育儿| 夹江县| 克拉玛依市| 天祝| 四平市| 确山县| 峨眉山市|