# PM_SetLCDPower

## 構文

      #include <nitro/spi.h>

      BOOL PM_SetLCDPower( PMLCDPower sw );

## 引数

sw | LCD のスイッチ

## 返り値

TRUE ならば成功です。

FALSE ならば失敗です。この場合の失敗は、LCDのスイッチをONにしようとしたときに、以前OFFにしてからの間隔が短すぎることが原因です。

## 説明

LCDのスイッチを切り替えます。

sw は LCDのスイッチです。この引数は `PMLCDPower` 列挙型の値で、以下のいずれかを指定してください。

`sw の値` | LCD の処理
--- | ---
`PM_LCD_POWER_ON` | LCDのスイッチをオンにします。
`PM_LCD_POWER_OFF` | LCDのスイッチをオフにします。

ハードウェアの制限から、LCD は OFF にしてから 約100ms 以上時間がたたないと ON にすることは出来ません。 この制限のため、LCD を ONに切り替えようとしたときに前回OFFにしてから十分な時間がたっていないと何もせずに FALSE を返します。十分な時間が経過しており、LCD を ONに切り替えることに成功した場合は TRUE を返します。なお、ON の状態から OFF にする場合はこの制約はありませんので、本関数は必ず TRUE を返します。
引数 sw に `PM_LCD_POWER_OFF` を指定して LCD のスイッチをオフにする際には、`GX_DispOff()` を呼び出しておく必要があります。
本関数内では事前に `GX_DispOff()` が呼び出されていない場合、内部で自動的に 呼び出しますが、Vブランク2回分の待ち時間が生じることに注意してください。
（「`GX_DispOff()` による画面オフからの間隔について」の項目参照）
そのため、LCD OFF の後に LCD ON にする場合は、別途`GX_DispOn()`を 呼び出す必要がある点に注意してください。

なお、LCDのスイッチをオフにする前に、`GX_DispOff()` を呼び出しておく必要はありますが、`GXS_DispOff()` は呼び出しておく必要はありません。(ただしアプリケーションでは上下画面の表示 ON/ OFF を同時に操作することが多いと思われます)

本関数では、内部でいくつかの PM 関数を呼び出します。そこでは、そのPM関数が成功するまで呼び続けるという処理が入っています。他のデバイスが SPI を占有していて BUSY 状態が長く続くような状況だと、本関数から戻るのが遅れる場合があります。

割込みハンドラからこの関数を使用することは可能です。割込みハンドラ以外の割込み禁止状態でこの関数を使用することは出来ません。

###
GX_DispOff() による画面オフからの間隔について

`GX_DispOff()` によって画面オフにしてから、本関数で `PM_SetLCDPower( PM_LCD_POWER_OFF )` で LCD モジュールへの電源供給を切るまでの間隔が2フレーム以内だった場合(正確には 2回 Vブランク を迎えていない場合) 、次に画面オンにしたときに残像が出るのを防ぐために 2回 Vブランクを待つようになっています。
そのため、本関数の呼び出し前にアプリ自身が `GX_DispOff()` を呼び出していない場合は、 確実に 2回 Vブランクを待つようになる点に注意してください。

###
LCD オフ時のサウンドについて

LCD をオフにすると、サウンドアンプへの電源供給も止まりますので、スピーカーから音がでなくなります。ただし、LCD ON 状態においてヘッドフォンを挿入後 LCD OFF 状態にした場合は、ヘッドフォンから音を出すことができます。なお、NITRO とは異なり、TWL では LCD OFF 時にヘッドフォンを接続した場合でも、ヘッドフォンから音が出ることが保障されています。 (詳細はプログラミングガイドラインの 各種電源制御 の注意事項を参照してください。)

## 内部動作

LCDスイッチの切り替えは GX_POWCNT　レジスタにアクセスしています。

## 参照

`PM_Init, PM_GetLCDPower`

## 履歴

2009/07/08 `GXS_DispOff()` についての誤記修正
2009/06/03 `PM_Init()` についての記述を削除 (`OS_Init()` が必須となったため)
2009/04/13 `GXS_DispOff()` について追記
2009/02/03 LCD OFF から LCD ON にした場合の処理について追記
2009/01/16 `GX_DispOff()` の呼び出しに関する説明文の修正
2009/01/13 LCDをオフにする前に `GX_DispOff()` を呼び出すように修正
2008/12/05 割込み禁止状態での使用に関する注意を追記
2008/11/02 サウンドに関しての注意を追記
2008/08/23 BUSY で遅れる可能性を示唆
2008/06/25 `GX_DispOff()` との間隔について記述
2008/03/18 LEDの状態についての記述を削除
2004/09/17 LEDの状態についての記述を変更
2004/08/07 初版