您的位置:首页 > 其它

关于MC9S12G128的低功耗模式

2017-11-21 17:01 232 查看
 第一次写博客,哈哈哈,刚入行汽车电子,是一个小白。希望跟各位大触互相交流学习.最近没事研究了一波G128 的低功耗模式。MC9S12G128芯片具有以下三种低功耗模式:

1,运行/等待模式 等待模式与运行模式类似,除了CPU执行被暂停并可以有选择地执行禁用一些模块,以便只有必要的模块时钟。

2,停止模式 停止模式禁用外部振荡器以降低功耗



3,伪停止模式 为了降低功耗,伪停止模式停止总线时钟,但是外部振荡器

继续运行

 

 

模式内部时钟外部时钟
运行模式YESYES
停止模式NONO
等待模式YESYES
伪停止模式NOYES
#include <hidef.h>          

#include "derivative.h"    

#pragma CONST_SEG DEFAULT

#pragma DATA_SEG DEFAULT

unsigned char interrupt_Flag;

#pragma CODE_SEG DEFAULT

#pragma CODE_SEG NON_BANKED

#pragma TRAP_PROC

void interrupt VectorNumber_Vportad PORTPAD_ISR(void)

{

  /* Clear interrupt flag */

  PIF1AD = 0x80;

  interrupt_Flag = 1;



#pragma CODE_SEG DEFAULT

void main(void)

{

    unsigned int x;

    char y,z;

    

CPMUSYNR = 0x47;               

    CPMUREFDIV = 0x80;                  

    CPMUPOSTDIV = 0x01;             

    CPMUCLKS_PLLSEL = 1;            

    while (!CPMUCLKS_PLLSEL);       

    CPMUOSC_OSCE = 1;              

    while(!CPMUFLG_UPOSC);          

    while(!CPMUFLG_LOCK);          

     

    ECLKCTL_NECLK = 0;                    

    /* Enable LEDs */

    DDRA = 0xff;                      

    PORTA = 0x01;                        

    /* Enable Push Buttons */
PER1AD = 0xF0;

PPS1AD = 0x00;

ATDDIEN = 0x00F0;

    /* Enable Interrupt on Port AD, PAD7 */

    PIE1AD_PIE1AD7 = 1;

    EnableInterrupts;

    

    while (1)

    {

        

        switch (PT1AD)

        {

            case (0xBF): /* Stop Mode */

                while(1) /* Loop forever */

                {

                    if (interrupt_Flag)

                    {

                        interrupt_Flag = 0;

                        break;

                    }

                    PTT = 0xF0;                    

                    

                    for (z=0; z<40; z++)          

                    {

                        PTT ^= 0x40;

                        

                        /* Delay to see LEDs Toggle */

                        for (x=0; x<5000; x++)

                        {

                            for (y=0; y<100; y++)

                            {} 

                        }

                    }

                    CPMUCLKS_PSTP = 0;                 

                    asm ANDCC #0x7F;            

                    asm STOP;                           

                }

                   

                break;

            case (0xDF): /* Pseudo Stop Mode */

                while(1) /* Loop forever */

                {

                    if (interrupt_Flag)

                    {

                        interrupt_Flag = 0;

                        break;

                    }

                    

                    PORTA = 0xF0;                         

                

                    for (z=0; z<40; z++)         

                    {

                        PTT ^= 0x20;

                        /* Delay to see LEDs toggle */

                        for (x=0; x<5000; x++)

                        {

                            for (y=0; y<100; y++)

                            {} 

                        }

                    }

                    CPMUCLKS_PSTP = 1;               

                    asm ANDCC #0x7F;               

                    asm STOP;                         

                }

                break;

            case (0xEF): /* Wait Mode */

                while(1) /* Loop forever */

                {

                    if (interrupt_Flag)

                    {

                        interrupt_Flag = 0;

                        break;

                    }

                    

                    PTT = 0xF0;              

                    

                    for (z=0; z<40; z++)          

                    {

                        PTT ^= 0x10;

                        

                        /* Delay to see LEDs toggle */

893a
                        for (x=0; x<5000; x++)

                        {

                            for (y=0; y<100; y++)

                            {} 

                        }

                    }

        

                    asm WAI;  /* Enter Wait mode */ 

                }

                break;

            default:

                interrupt_Flag = 0;              

                PTT ^= 0x80;

                break;

        }

        

        /* Delay to see LEDs toggle */

        for (x=0; x<5000; x++)

        {

            for (y=0; y<100; y++)

            {

            } 

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  G128 低功耗