LPC1343 ディープパワーダウンモード(Deep Power down mode)への移行と復帰

やったこと

1. ディープパワーダウンモード(Deep power down mode)への移行と復帰

開発Listへ戻る

使用したプロジェクトです。ご自由にダウンロードください
DeepPowerDown_SampleProject_withRef.zip 直

久しぶりにマイコンにさわりました〜。。
夏場は日が長くって運動やら何やら体が疲れてなかなかマイコンさわる気がおきない。。

とはいえ一ヶ月に最低一度はUPしようとDeep power downモードをやって
ブログを書き進める・・・

いつの間にか10,000カウント超えてる〜
ブログをはじめて半年ちょっと!嬉しいですね。
ありがたいことです。


で、今回はDeep power down モードですが
結果から言うと簡単でしたね。

カットアンドトライも無く,ググッて英語サイト調べる必要も無かったです。

下のようにやってすんなり出来ました。

1.アプリケーションノートのAN10973通りの記載

2.それでWAKEUP PINをプルアップ
(WAKEUP PINはLPC1343の場合P1.4です。)

3.プログラム走らせる→Deep power down modeに入る

4.P1.4をGNDにつなげる = Deep power down modeから復帰 = Chip reset


確認方法

Timerを使ったLEDの点滅を設定後に、Deep power down モードに入ります。
点滅の間隔を変化させることで復帰後のChip resetがわかるようにしています。

Power on(Chip reset) → 0.1s毎に点滅→0.5s毎に点滅→Deep power down

→Deep Power down モードに入ったので点滅しないことを確認します。
 Resetボタンを押しても何も変わらないことを確認します。

P1.4をGNDに接続することでDeep sleep modeから抜けるようにします。
→Chip resetなので0.1s間隔での点滅開始を確認します。

回路: LEDの点滅は。LPCexpresso1343のP0.7についているLEDを使用します。
   Resetスイッチをつけます。(Reset動作確認したい場合)
   P1.4をプルアップしておきます。(黄色いWireと抵抗の部分)
   P1.4を直接ブレッドボードでワイヤを使ってGNDに接続しDeep Sleepから抜け出します。



コード
main.cを空にして、以下をCopy & Pasteすれば動きます。

#ifdef __USE_CMSIS
#include "LPC13xx.h"
#endif

#include
#include

__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;


int main(void) {

// Test circuit code //
LPC_IOCON->PIO0_7 = 0x00; // set as GPIO (LPCexpresso LED control PIN)
LPC_GPIO0->DIR |= 0x80; // p0_7 as output
LPC_GPIO0->MASKED_ACCESS[0x080]=0x080; //P0_7=1(LED on)

// 32bit counter
NVIC_EnableIRQ(TIMER_32_1_IRQn); // enable Timer32_1 interrupt handler

LPC_SYSCON->SYSAHBCLKCTRL |=0x400; // Timer32B1 Turn ON
LPC_TMR32B1->PR =7200-1; // 0.1ms ,10kHz(Max 32bit dec:4294967295)
LPC_TMR32B1->MCR=0x003; // Reset timer on MR0 and interrupt
LPC_TMR32B1->MR0 = 1000; // 0.1sec
LPC_TMR32B1->TCR =2; // TCR Reset
LPC_TMR32B1->IR =0x0F; // Clear interrupt flag
LPC_TMR32B1->TCR =1; // TCR start


// Enter an infinite loop, just incrementing a counter
volatile static int i = 0 ;
while(1) {
i++ ;
}
return 0 ;
}


void TIMER32_1_IRQHandler(void) {
static int i=0;

LPC_GPIO0->DATA ^=0x80; // Toggle P0_7

if(i<=100){
i++;
}

if(i==20){
LPC_TMR32B1->MR0 = 5000; //Change interval 0.1sec-> 0.5sec
}

if(i==31){
//Go to Deep Power down mode
LPC_PMU->PCON = (1<<1) | (1<<11);
SCB->SCR |=(1<<2);
LPC_SYSCON->PDRUNCFG &= ~( (1<<0) | (1<<1));
__WFI();
}

LPC_TMR32B1->IR =0x0F; // Clear interrupt flag
}

コード解説 

コード内のコメントで十分ではないかと思います。
タイマーの割り込みで20回0.1秒で点滅させた後に
10回0.5秒で点滅させPower down突入

パワーダウンモード突入部分は
アプリケーションノートのAN10973通りの記載です。

使用したプロジェクトです。ご自由にダウンロードください
DeepPowerDown_SampleProject_withRef.zip 直

開発Listにもどる