日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]在深度睡眠模式,除了BOD模塊和看門狗振蕩器的時鐘可以繼續(xù)工作,其它所有的時鐘都會停止工作??梢酝ㄟ^PDSLEEPCFG寄存器來配置在深度睡眠模式期間BOD模塊和看門狗振蕩器是否需要工作。在深度睡眠模式,消除了flash、

在深度睡眠模式,除了BOD模塊和看門狗振蕩器的時鐘可以繼續(xù)工作,其它所有的時鐘都會停止工作??梢酝ㄟ^PDSLEEPCFG寄存器來配置在深度睡眠模式期間BOD模塊和看門狗振蕩器是否需要工作。

在深度睡眠模式,消除了flash、所有模擬外設(shè)、處理器自身、存儲器、相關(guān)控制器和內(nèi)部總線的功耗。處理器的狀態(tài)和寄存器、外設(shè)的寄存器、內(nèi)部SRAM的數(shù)據(jù)和單片機引腳的電平保持不變。

在深度睡眠模式,看門狗振蕩器是唯一可以工作的時鐘源。當(dāng)需要定時器定時喚醒單片機的時候,可以開啟看門狗時鐘。其它的時鐘,諸如系統(tǒng)振蕩器、IRC和PLL都會掉電。如果需要看門狗振蕩器工作,它的時鐘必須設(shè)置到最小值,即把WDTOSCCTRL寄存器中的FREQSEL位設(shè)置為0001。

當(dāng)需要定時器喚醒單片機,可以在SYSAHBCLKCTRL寄存器中開啟看門狗振蕩器和一個通用定時器。

1.怎樣進入深度睡眠模式

執(zhí)行以下步驟進入深度睡眠模式

1. 設(shè)置PCON寄存器的DPDEN位為0;

2. 配置PDSLEEPCFG寄存器

a) 如果需要定時器喚醒單片機,在PDRUNCFG寄存器中,把看門狗的時鐘打開,然后在MAINCLKSEL把主時鐘源選擇為看門狗振蕩器時鐘;

b) 如果不需要定時器喚醒單片機,在PDRUNCFG寄存器中,把看門狗的時鐘關(guān)閉,把IRC的時鐘打開,在MAINCLKSEL寄存器中選擇IRC時鐘為主時鐘源;

3. 配置PDAWAKECFG寄存器;

4. 如果使用外部引腳來喚醒單片機,配置STARTAPRP0,STARTERP0,STARTRSRP0CLR寄存器,初始化外部喚醒引腳,并用NVIC開啟該引腳的中斷。

5. 在SYSAHBCLKCTRL寄存器中,關(guān)閉所有的外設(shè)模塊。如果用到WDT和定時器,則開啟這兩的時鐘。

6. 設(shè)置SCR寄存器中的SLEEPDEEP位為1;

7. 執(zhí)行WFI指令。

2.進入深度睡眠模式后,如何喚醒單片機

1. 復(fù)位

2. 定時器匹配輸出引腳喚醒

3. 外部引腳邏輯信號

深度睡眠模式的外部喚醒引腳一共有13個,分別是P0.0~P0.11和P1.0。可以通過配置具體由哪個引腳喚醒,上升沿或下降沿喚醒??梢酝ㄟ^外部信號喚醒,也可以通過單片機自身定時器的匹配輸出引腳電平變化功能來實現(xiàn)。當(dāng)使用定時器匹配引腳時,只能是在P0.1 、P0.8~P0.11引腳上,因為只有這幾個引腳有定時器匹配輸出功能。

3.示例程序

為了很容易的看到效果,這里用流水燈的運行和停止運行來觀察是否進入睡眠模式。開始流水燈執(zhí)行,過一會兒,進入睡眠模式后,流水燈停止流水。

新建一個工程,結(jié)構(gòu)如下圖所示:

在main.c函數(shù)中,輸入以下代碼:

#include"lpc11xx.h"#include"pmu.h"#defineLED1_ONLPC_GPIO1->DATA&=~(1<<0)#defineLED1_OFFLPC_GPIO1->DATA|=(1<<0)#defineLED2_ONLPC_GPIO1->DATA&=~(1<<1)#defineLED2_OFFLPC_GPIO1->DATA|=(1<<1)/***********************************//*函數(shù)名稱:延時函數(shù)*//***********************************/voiddelay(){uint16_ti,j;for(i=0;i<5000;i++)for(j=0;j<200;j++);}/***********************************//*函數(shù)名稱:LED燈初始化*//***********************************/voidled_init(){LPC_SYSCON->SYSAHBCLKCTRL|=(1<<16);//使能IOCON時鐘LPC_IOCON->R_PIO1_0&=~0x07;LPC_IOCON->R_PIO1_0|=0x01;//把P1.0腳設(shè)置為GPIOLPC_IOCON->R_PIO1_1&=~0x07;LPC_IOCON->R_PIO1_1|=0x01;//把P1.1腳設(shè)置為GPIOLPC_SYSCON->SYSAHBCLKCTRL&=~(1<<16);//禁能IOCON時鐘LPC_GPIO1->DIR|=(1<<0);//把P1.0設(shè)置為輸出引腳LPC_GPIO1->DATA|=(1<<0);//把P1.0設(shè)置為高電平LPC_GPIO1->DIR|=(1<<1);//把P1.1設(shè)置為輸出引腳LPC_GPIO1->DATA|=(1<<1);//把P1.1設(shè)置為高電平}/***********************************//*函數(shù)名稱:主函數(shù)*//***********************************/intmain(){uint8_tcnt=0;led_init();while(1){delay();LED1_ON;LED2_OFF;delay();LED1_OFF;LED2_ON;cnt++;if(cnt>20){cnt=0;Entry_Deep_Sleep();}}}

第35行,main函數(shù)開始看起。

第37行,定義了一個變量,用來計數(shù)。

第38行,初始化led。(關(guān)于初始化led的部分,請看第三章內(nèi)容)

第39行,進入while循環(huán)。LED1和LED2將交替閃爍,知道cnt計數(shù)到20。

第51行,執(zhí)行進入深度睡眠模式函數(shù)。

在pmu.h文件中,輸入以下代碼:

#ifndef__LPC11XX_PMU_H#define__LPC11XX_PMU_HexternvoidEntry_Deep_Sleep(void);#endif

在pmu.c文件中,輸入以下代碼:

#include"lpc11xx.h"#include"pmu.h"voidEntry_Deep_Sleep(void){//step1LPC_PMU->PCON&=~(1<<1);//DPDEN=0;選擇sleep/deep-sleep模式//step2LPC_SYSCON->MAINCLKSEL=0x0;/*SelectIRC*/LPC_SYSCON->MAINCLKUEN=0x01;/*UpdateMCLKClockSource*/LPC_SYSCON->MAINCLKUEN=0x00;/*ToggleUpdateRegister*/LPC_SYSCON->MAINCLKUEN=0x01;while(!(LPC_SYSCON->MAINCLKUEN&0x01));/*WaitUntilUpdated*///step3LPC_SYSCON->PDAWAKECFG&=~(1<<5);//SYSOSC_PD喚醒后系統(tǒng)振蕩器上電LPC_SYSCON->PDAWAKECFG&=~(1<<7);//SYSPLL_PD喚醒后PLL上電//step4LPC_SYSCON->STARTRSRP0CLR|=(1<<7);//RESETP0.7LPC_SYSCON->STARTAPRP0&=~(1<<7);//配置P0.7腳為喚醒引腳LPC_SYSCON->STARTERP0|=(1<<7);//EnableP0.7腳作為喚醒引腳NVIC_EnableIRQ(WAKEUP7_IRQn);//step5LPC_SYSCON->SYSAHBCLKCTRL=0x01f;//關(guān)閉所有外設(shè)模塊//step6SCB->SCR|=(1<<2);//SLEEPDEEP=1;選擇deep_sleep模式//step7__wfi();//寫wfi指令進入低功耗模式}voidWAKEUP_IRQHandler(void){//時鐘配置LPC_SYSCON->MAINCLKSEL=0x3;/*SelectPLLClockOutput*/LPC_SYSCON->MAINCLKUEN=0x01;/*UpdateMCLKClockSource*/LPC_SYSCON->MAINCLKUEN=0x00;/*ToggleUpdateRegister*/LPC_SYSCON->MAINCLKUEN=0x01;while(!(LPC_SYSCON->MAINCLKUEN&0x01));/*WaitUntilUpdated*///清喚醒標(biāo)志LPC_SYSCON->STARTRSRP0CLR|=(1<<7);//RESETP0.7LPC_PMU->PCON&=~(1<<8);//SLEEPFLAG標(biāo)志位清零LPC_SYSCON->SYSAHBCLKCTRL|=(1<<6);//GPIO上電}

在pmu.c文件中,定義了兩個函數(shù):

Entry_Deep_Sleep()函數(shù)的功能是進入深度睡眠模式。

WAKUP_IRQHandler()是喚醒引腳的中斷處理函數(shù)。

Entry_Deep_Sleep()函數(shù)里面的代

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

中斷方式串口接收數(shù)據(jù)新建一個工程,結(jié)構(gòu)如下圖所示:在main.c文件中,輸入以下代碼:#include “l(fā)pc11xx.h”#include “uart.h”uint8_t rec_buf;void UART_IRQH...

關(guān)鍵字: Cortex lpc1114 mo uart 串口中斷 收發(fā)數(shù)據(jù)

LPC_IOCON->R_PIO1_0 &= ~0x07;LPC_IOCON->R_PIO1_0 |= 0x02;上面是設(shè)置P1.0為AD1的語句。P1.0低三位是引腳功能選擇位,所以配置低三位就可以...

關(guān)鍵字: lpc1114 引腳功能 設(shè)置

LPC1114內(nèi)部一共有4個定時器,2個32位定時器,2個16位定時器,使用方式都一樣,只是要注意使用16位定時器時,寄存器的值不要超出65535。給它們分別取名稱為CT16B0、CT16B1、CT32B0、CT32B1...

關(guān)鍵字: lpc1114 通用定時器

你還在為如何給LPC1114主控的電路板留程序下載接口而煩惱嗎?下面瑞生(Ration)以自己曾經(jīng)做過的項目為例給大家分享一下吧!1.LPC1114如何下載程序?這個當(dāng)然是你必須要知道的問題。LPC1114一共2種下載方...

關(guān)鍵字: lpc1114 程序下載接口

#include\"ds18b20.h\"uint8_ttemp_sign;voiddelay_ds(uint16_tzz){uint8_txx;uint16_tyy;for(xx=0;xx

關(guān)鍵字: 18b20 lpc1114 測量溫度

某同學(xué):你好,看了基礎(chǔ)篇SysClk、GPIO、UART的例程,在用到IOCON模塊,UART模塊在SYSAHBCLKCTRL寄存器中都需要相應(yīng)時鐘允許位置1,IOCON使能,在設(shè)置完后又禁能,UART使用時只使能,不用...

關(guān)鍵字: lpc1114 iocon 模塊時鐘

32位的單片機內(nèi)部各種數(shù)據(jù)寄存器和控制寄存器都是32位的,同理,8位單片機內(nèi)部的數(shù)據(jù)和控制寄存器都是8位的。例如:AT89C51單片機的“中斷控制寄存器”IE定義如下圖所示:bit7bit6bit5bit4bit3bit...

關(guān)鍵字: ARM Cortex lpc1114 m0 寄存器配置

新建一個工程,結(jié)構(gòu)如下圖所示:timer.h文件和timer.c文件用上一節(jié)的。在timer.h中增加兩個變量和兩個函數(shù)的聲明,如下所示:#ifndef __NXPLPC11xx_TIME_H__#define __NX...

關(guān)鍵字: lpc1114 pwm 通用定時器

LPC1114的中斷,由中斷控制模塊NVIC控制。一共32個中斷,每個中斷的優(yōu)先級可編程為 0~3 四種級別。級別越高對應(yīng)的優(yōu)先級越低。因此,級別0 是最高的中斷優(yōu)先級。設(shè)置中斷優(yōu)先級的函數(shù),CMISIS已經(jīng)寫好,并嵌入...

關(guān)鍵字: cortex-m0 lpc1114 中斷優(yōu)先級

LPC1114有一個串口,具備標(biāo)準(zhǔn)9針串口的所有功能引腳:RXD、TXD、RTS、CTS、DTR、DSR、DCD、IR一般情況下,我們只用到RXD和TXD。在這一章,只對RXD和TXD的使用做介紹??梢杂糜诔绦蛳螺d??梢?..

關(guān)鍵字: Cortex lpc1114 m0 串口 收發(fā)數(shù)據(jù) uart查詢
關(guān)閉