001-13619_SleepTimer.pdf

スリープタイマ データシート SleepTimer V 1.0
001-67343 Rev. **
Sleep Timer
Copyright © 2001-2011 Cypress Semiconductor Corporation. All Rights Reserved.
PSoC® ブロック
リソース
アナログ
CT
デジタル
API メモリ (バイト数)
アナログ
SC
フラッシュ
RAM
ピン (外部
入出力ごと)
CY8C29/27/24/22/21/20xxx, CY8C23x33, CY8CLED02/04/08/16, CY7C64215, CY7C64343, CY7C60413,
CY8CLED0xD, CY8CLED0xG, CY8CTST110, CY8CTMG110, CY8CTST120, CY8CTMG120, CY8CTMA120,
CY8CTST200, CY8CTMG2xx, CY8C21x45, CY8C22x45, CY8CTMA30xx, CY8C28x45, CY8CPLC20,
CY8CLED16P01, CY8C20336AN, CY8C20436AN, CY8C20636AN, CY8C21x12
0
0
0
150
7
0
このユーザ モジュールを使用する単一あるいはすべてを設定するサンプルプログラムについては、以下
を参照してください。 www.cypress.com/psocexampleprojects
機能および概要
„ デジタルブロックは不要です。
„ 8、16、32-bit の刻みカウンタから選択可能
„ 3 種類のタイマ機能
スリープタイマ ユーザ モジュールは、貴重なデジタルブロックを使用することなく、基本的なタイミン
グ機能を提供します。 このユーザ モジュールは標準搭載のスリープ タイマの機能を使用して、プロジェ
クトで利用価値の高い様々なタイミング機能を作り出します。これらの機能には以下のようなものがあ
ります。
„
„
„
„
バックグラウンドの刻みカウンタは、1、8、64、512 Hz で稼動
プログラム実行を遅延するシンプルなウエイト機能
設定可能なカウントダウンタイマ
ループ ガバナによるループタイマの安定な制御
Figure 1.
スリープタイマ ブロック ダイアグラム
Cypress Semiconductor Corporation
Document Number: 001-67343 Rev. **
•
198 Champion Court
•
San Jose, CA 95134-1709
•
408-943-2600
Revised February 8, 2011
[+] Feedback
Sleep Timer
機能説明
スリープタイマ ユーザ モジュールは、標準的な PSoC システムのスリープ タイマをベースにしていま
す。割り込み周波数は 1、8、64、512 Hz の中からユーザが選択できます。スリープ タイマ割り込みが
発生するたびに、刻みカウンタが 1 カウント増加します。 刻みカウンタの長さも、タイミングニーズ、
割り込み周波数、RAM 使用を最適化するために、ユーザが選択できます (8、16、32 ビット)。 刻みカ
ウンタは、提供されている API を使うことでいつでも読むことができます。
すべてのタイマ機能は、刻みの増加に基づいて行われます。 刻み周期は、割り込み周波数と反比例しま
す。1、8、64、512 Hz の割り込み周波数の場合、周期はそれぞれ、1000、128、15.6、1.9 ミリ秒とな
ります。
スリープ タイマの精度については、デバイスの Data Sheet を参照してください。
配置
スリープタイマ ユーザ モジュールは、1 つのプロジェクトに 1 つだけ配置できます。 PSoC のアナログ
やデジタルブロックは不要ですが、PSoC スリープ タイマハードウェアと割り込みベクタを使用しま
す。
パラメータおよびリソース
TickCounterSize
このパラメータは、刻みカウンタのサイズを選択します。利用可能なオプションは、1、2、4 バイ
トです。 このパラメータの選択は、ユーザが割り込み周波数、タイミング分解能、測定が必要な最
大周期に基づいて行います。
アプリケーション プログラミング インタフェース
アプリケーション プログラミング インタフェース (API) ルーチンは設計者がより高度なレベルでモジュ
ールを処理できるようにユーザ モジュールの一部として提供されます。このセクションでは、それぞれ
の機能に対するインタフェースを、「include」ファイルによって提供される定数とともに示します。
Note
ここでは、全てのユーザ モジュール API と同じように、API 関数を呼び出すことで A と X レジ
スタの値が変更されます。 API をコールした後でも A と X の前値を保持したいときは、API をコ
ールするファンクションで A と X の値を保持する必要があります。 PSoC Designer のバージョ
ン 1.0 以降、効率性の観点から、この 「registers are volatile (レジスタの揮発性)」ポリシーが
採用されています。 C コンパイラは自動的にこの条件を処理します。 アセンブラ言語のプログラ
マは、コードがこのポリシーを遵守していることも確認しなければなりません。 一部のユーザー
モジュール API 関数では A と X は変更されないこともありますが、将来も変更されないという
保証はありません。
Document Number: 001-67343 Rev. **
Page 2 of 11
[+] Feedback
Sleep Timer
SleepTimer_EnableInt
説明:
割り込みモード動作を有効にします。注:ただし、グローバル割り込みも、割り込みが実際に実行
される前に有効にされなければなりません。スリープタイマ ユーザ モジュールが作動するには、
この関数を呼び出さなければなりません。
C プロトタイプ:
void SleepTimer_EnableInt(void);
アセンブラ :
lcall SleepTimer_EnableInt
パラメータ :
なし
戻り値:
なし
副作用 :
このルーチンは、IO 空間に置かれている適切な割り込みエネーブルレジスタを変更します。 A およ
び X レジスタは、今回、または今後、この関数を実装することによって変更される可能性がありま
す。大容量メモリ モデル (CY8C29xxx) の、すべての RAM ページ ポインタ レジスタでも同じで
す。必要に応じて、 fastcall16 関数の呼び出しでこれらの値を保存してください。
SleepTimer_DisableInt
説明:
割り込みモード動作を無効にします。
C プロトタイプ:
void SleepTimer_DisableInt(void);
アセンブラ :
lcall SleepTimer_DisableInt
パラメータ :
なし
戻り値:
なし
副作用 :
このルーチンは、IO 空間の適切な割り込み有効化レジスタを調整します。 このルーチンは、IO 空
間に置かれている適切な割り込みエネーブルレジスタを変更します。A および X レジスタは、今
回、または今後、この関数を実装することによって変更される可能性があります。 大容量メモリ
モデル (CY8C29xxx) では、すべての RAM ページ ポインタ レジスタでも同じです。必要に応じて、
fastcall16 関数の呼び出しでこれらの値を保存してください。
Document Number: 001-67343 Rev. **
Page 3 of 11
[+] Feedback
Sleep Timer
SleepTimer_Start
説明:
SleepTimer 操作を開始します。 刻みカウンタを許可するには、グローバル割り込みと SleepTimer
割り込みが事前に有効になっている必要があります。
C プロトタイプ:
void SleepTimer_Start(void);
アセンブラ :
lcall SleepTimer_Start
パラメータ :
なし
戻り値:
なし
特殊作用 :
A および X レジスタは、今回、または今後、この関数を実装することによって変更される可能性が
あります。大容量メモリ モデル (CY8C29xxx) では、すべての RAM ページ ポインタ レジスタでも
同じです。必要に応じて、 fastcall16 関数の呼び出しでこれらの値を保存してください。
SleepTimer_Stop
説明:
この関数は、スリープ タイマの動作に影響しません。 SleepTimer_DisableInt() を呼び出す、また
はグローバル割り込みを無効にすると、タイマ動作が止まります。
C プロトタイプ:
void SleepTimer_Stop(void);
アセンブラ :
lcall SleepTimer_Stop
パラメータ :
なし
戻り値:
なし
副作用 :
出力がローにセットされ、それに続く期間レジスタへの書き込みにより、カウント レジスタが新
しい期間値で更新されます。 A および X レジスタは、今回、または今後、この関数を実装すること
によって変更される可能性があります。 大容量メモリ モデル (CY8C29xxx) では、すべての RAM
ページ ポインタ レジスタでも同じです。必要に応じて、 fastcall16 関数の呼び出しでこれらの値を
保存してください。
Document Number: 001-67343 Rev. **
Page 4 of 11
[+] Feedback
Sleep Timer
Sleeptimer_SetInterval
説明:
この関数は割り込みの周期を設定し、それにより、すべての SleepTimer ユーザ モジュールタイミ
ング機能用の刻み周期も設定します。
C プロトタイプ:
void SleepTimer_SetInterval(BYTE bInterval);
アセンブラ :
mov
A, [bInterval]
lcall SleepTimer_SetInterval
; Place interval in A
パラメータ :
bInterval: このパラメータにより、ユーザは 1、8、64、512 Hz の 4 つの中から割り込み周波数を選
択できます。
定数
値
割り込み周期
SleepTimer_1_Hz
0x18
1 Hz
SleepTimer_8_Hz
0x10
8 Hz
SleepTimer_64_Hz
0x08
64 Hz
SleepTimer_512_Hz
0x00
512 Hz
戻り値:
なし
副作用 :
A および X レジスタは、今回、または今後、この関数を実装することによって変更される可能性が
あります。大容量メモリ モデル (CY8C29xxx) では、すべての RAM ページ ポインタ レジスタでも
同じです。必要に応じて、 fastcall16 関数の呼び出しでこれらの値を保存してください。
SleepTimer_SyncWait
説明:
この関数は、イベントの同期化に使用されます。異なるパスを持つループを、同一周期で動作する
よう強制するために使用できます。 この関数には 2 つのモードがあります。1 つ目のモードでは、
タイマが新しい値を強制すると、関数をすぐに終了します。 2 つ目のモードでは、プログラムフロ
ーが前回の遅延が過ぎるのを待ち、新しい遅延をセットしてから終了します。
C プロトタイプ:
void SleepTimer_SyncWait(BYTE bTicks, BYTE bMode);
アセンブラ :
mov
A, [bTicks]
mov
X, SleepTimer_WAIT_RELOAD
lcall SleepTimer_SyncWait
Document Number: 001-67343 Rev. **
; Load tick wait period in A
; Load mode in X
Page 5 of 11
[+] Feedback
Sleep Timer
パラメータ :
bTicks: 設定された周期の時間をティック数で表したもの。SleepTimer_SetInterval 関数によって間
隔が 64Hz に設定されている場合、同期遅延は bTicks x 1/64 となります。bTicks が 8 に設定されて
いる場合、同期時間は 125 ミリ秒になります。bMode: このパラメータは、この関数のモードを設
定します。1 に設定されている場合、新しい時間が設定され、プログラムフローがすぐに関数を終
了します。bMode = 0 の場合、前回の遅延時間の残りが終了するまでプログラム実行は延期されま
す。新しいティックカウントが読み込まれ、関数が終了します。
bMode
値
コメント
SleepTimer_FORCE_RELOAD
0x01
タイマをすぐに再ロードします。
SleepTimer_WAIT_RELOAD
0x00
タイマが終了するのを待って、タイマを再ロードします。
戻り値:
なし
副作用 :
A および X レジスタは、今回、または今後、この関数を実装することによって変更される可能性が
あります。大容量メモリ モデル (CY8C29xxx) では、すべての RAM ページ ポインタ レジスタでも
同じです。必要に応じて、 fastcall16 関数の呼び出しでこれらの値を保存してください。
SleepTimer_TickWait
説明:
この関数は、プログラムの実行を n 回のティック単位で遅延するために使用します。
C プロトタイプ:
void SleepTimer_TickWait(BYTE bTicks);
アセンブラ :
mov
A, [bTicks]
lcall SleepTimer_TickWait
; Load tick wait period in A
パラメータ :
bTicks: プログラム実行を遅延する時間の長さをティック数で表したもの。 この関数は、刻みカウ
ンタがゼロにカウントダウンするまで完了しません。
戻り値:
なし
副作用 :
A および X レジスタは、今回、または今後、この関数を実装することによって変更される可能性が
あります。大容量メモリ モデル (CY8C29xxx) では、すべての RAM ページ ポインタ レジスタでも
同じです。必要に応じて、 fastcall16 関数の呼び出しでこれらの値を保存してください。
Document Number: 001-67343 Rev. **
Page 6 of 11
[+] Feedback
Sleep Timer
SleepTimer_SetTimer
説明:
この関数はタイマを、SleepTimer 割り込みが実行されるたびに 1 (ティック)少ない値に設定し
ます。 このレートは SleepTimer_SetInterval() 関数によって設定されます。 この関数は、カウント
ダウンタイマを設定し、すぐに終了します。
C プロトタイプ:
void SleepTimer_SetTimer(BYTE bTicks);
アセンブラ :
mov
A, [bTicks]
lcall SleepTimer_TickWait
; Load timer period in A
パラメータ :
bTicks: タイマがゼロにカウントダウンされるまでのタイマの量をティック数で表したもの。
戻り値:
なし
副作用 :
A および X レジスタは、今回、または今後、この関数を実装することによって変更される可能性が
あります。大容量メモリ モデル (CY8C29xxx) では、すべての RAM ページ ポインタ レジスタでも
同じです。必要に応じて、 fastcall16 関数の呼び出しでこれらの値を保存してください。
SleepTimer_bGetTimer
説明:
カウントダウンタイマの残り時間を読み込みます (ティック数)。
C プロトタイプ:
WORD SleepTimer_bGetTimer(void);
アセンブラ :
lcall SleepTimer_bGetTimer
mov
[bTickRemaining], A
; Returns remain tim in A
パラメータ :
なし
戻り値:
bTimeLeft: カウントダウンが終了するまでの残りティック数。戻り値がゼロの場合、タイマは関数
呼び出しの前に終了します。
副作用 :
A および X レジスタは、今回、または今後、この関数を実装することによって変更される可能性が
あります。大容量メモリ モデル (CY8C29xxx) では、すべての RAM ページ ポインタ レジスタでも
同じです。必要に応じて、 fastcall16 関数の呼び出しでこれらの値を保存してください。
Document Number: 001-67343 Rev. **
Page 7 of 11
[+] Feedback
Sleep Timer
SleepTimer_bGetTickCntr
説明:
バックグラウンド刻みカウンタの最下位 8 ビットを返します。
C プロトタイプ:
BYTE SleepTimer_bGetTickCntr(void);
アセンブラ :
lcall SleepTimer_bGetTickCntr
mov
[bTickCount], A
; Returns LSB of tick counter in A
パラメータ :
なし
SleepTimer_iGetTickCntr
説明:
バックグラウンド刻みカウンタの最下位 16bits ビットを返します。
C プロトタイプ:
unsigned int SleepTimer_iGetTickCntr(void);
アセンブラ :
lcall SleepTimer_iGetTickCntr
mov
[iTickCounter], X
mov
[iTickCounter+1], A
; MSB returned in X
; LSB returned in A
パラメータ :
なし
戻り値:
bTicks: 刻みカウンタの現在の 16LSB を返します。
副作用 :
A および X レジスタは、今回、または今後、この関数を実装することによって変更される可能性が
あります。大容量メモリ モデル (CY8C29xxx) では、すべての RAM ページ ポインタ レジスタでも
同じです。必要に応じて、 fastcall16 関数の呼び出しでこれらの値を保存してください。
SleepTimer_lGetTickCntr
説明:
32-bit バックグラウンド刻みカウンタの現在値を返します。
C プロトタイプ:
unsigned long * SleepTimer_lGetTickCntr(unsigned long * lPtr);
アセンブラ :
mov
A, >lTickCount
mov
X, <lTickCount
lcall SleepTimer_lGetTickCntr
Document Number: 001-67343 Rev. **
; A:X points to the return buffer
Page 8 of 11
[+] Feedback
Sleep Timer
パラメータ :
lPtr: 返される 32-bit 刻みカウンタ変数のポインタ。
戻り値:
lTimeLeft: カウントダウンが終了するまでの残りティック数。戻り値がゼロの場合、タイマは関数
呼び出しの前に終了します。
副作用 :
A および X レジスタは、今回、または今後、この関数を実装することによって変更される可能性が
あります。大容量メモリ モデル (CY8C29xxx) では、すべての RAM ページ ポインタ レジスタでも
同じです。必要に応じて、 fastcall16 関数の呼び出しでこれらの値を保存してください。
ファームウェア ソースコードの例
ループ速度を制御する簡単な C 言語の例をここに示します。
//----------------------------------------------------------------// Sample Code for the SleepTimer User Module
// In this example, the sleep timer interrupt rate is set to 64Hz.
// The loop is controlled to loop no faster than 8Hz.
//----------------------------------------------------------------#include "m8c.h"
#include "PSoCAPI.h"
void main(void)
{
M8C_EnableGInt ;
SleepTimer_Start();
SleepTimer_SetInterval(SleepTimer_64_HZ);
SleepTimer_EnableInt();
// Turn on interrupts
// Set interrupt to a
// 64 Hz rate
// The following loop should loop no faster than 8 Hz (64/8)
while(1) {
SleepTimer_SyncWait(8, SleepTimer_WAIT_RELOAD);
// …Other code in loop
}
}
Document Number: 001-67343 Rev. **
Page 9 of 11
[+] Feedback
Sleep Timer
ループ速度を制御する簡単なアセンブリ言語の例をここに示します。
;----------------------------------------------------------------------; Sample Code for the SleepTimer User Module
; In this example, the sleep timer interrupt rate is set to 64Hz.
; The loop is controlled to loop no faster than 8Hz.
;----------------------------------------------------------------------include "m8c.inc"
include "memory.inc"
include "PSoCAPI.inc"
; part specific constants and macros
; Constants & macros for SMM/LMM and Compiler
; PSoC API definitions for all User Modules
export _main
_main:
M8C_EnableGInt
lcall SleepTimer_Start
mov
A,SleepTimer_64_HZ
lcall SleepTimer_SetInterval
lcall SleepTimer_EnableInt
;
;
;
;
;
Turn on interrupts
Start SleepTimer
Use 64 Hz interrupt rate
Enable SleepTimer Interrupt
.Loop:
mov
A,8
; Set tick delay to 8 ticks
mov
X,SleepTimer_WAIT_RELOAD ; Wait for delay then reload timer
lcall SleepTimer_SyncWait
;
;
Put main loop user code here
jmp .Loop
コンフィグレーション レジスタ
このレジスタは、初期化および API ライブラリによって構成されます。 ユーザが、このレジスタを直接
変更または読み取る必要はありません。 このセクションは参考用です。
Table 1.
ビット
値
レジスタ OSC_CR
7
32k 選択
6
5
4
PLL モード No Buzz
Sleep[1]
(ブザーな
し)
3
Sleep[0]
2
CPU
Speed[2]
1
CPU
Speed[1]
0
CPU
Speed[0]
ビット 3 と 4 (Sleep[1:0])のみが SleepTimer ユーザ モジュール中で変更されます。
Document Number: 001-67343 Rev. **
Page 10 of 11
[+] Feedback
Sleep Timer
バージョン ヒストリー
バージョン
1.0
Note
著者
DHA
説明
初期バージョン
PSoC Designer 5.1 は、すべてのユーザ モジュール データシートにおいてバージョン ヒストリ
ーを導入しています。 このセクションでは、ユーザ モジュールの過去のバージョンと現在のバー
ジョンとの違いに関して高度な解説を掲載しています。
Document Number: 001-67343 Rev. **
Revised February 8, 2011
Page 11 of 11
Copyright © 2001-2011 Cypress Semiconductor Corporation. The information contained herein is subject to change without notice. Cypress Semiconductor Corporation assumes no responsibility
for the use of any circuitry other than circuitry embodied in a Cypress product. Nor does it convey or imply any license under patent or other rights. Cypress products are not warranted nor intended
to be used for medical, life support, life saving, critical control or safety applications, unless pursuant to an express written agreement with Cypress. Furthermore, Cypress does not authorize its
products for use as critical components in life-support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress products
in life-support systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges.
PSoC Designer ™ and Programmable System-on-Chip ™ are trademarks and PSoC® is a registered trademark of Cypress Semiconductor Corp. All other trademarks or registered trademarks
referenced herein are property of the respective corporations.
Any Source Code (software and/or firmware) is owned by Cypress Semiconductor Corporation (Cypress) and is protected by and subject to worldwide patent protection (United States and foreign),
United States copyright laws and international treaty provisions. Cypress hereby grants to licensee a personal, non-exclusive, non-transferable license to copy, use, modify, create derivative works
of, and compile the Cypress Source Code and derivative works for the sole purpose of creating custom software and or firmware in support of licensee product to be used only in conjunction with
a Cypress integrated circuit as specified in the applicable agreement. Any reproduction, modification, translation, compilation, or representation of this Source Code except as specified above is
prohibited without the express written permission of Cypress.
Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress reserves the right to make changes without further notice to the materials described herein. Cypress does not
assume any liability arising out of the application or use of any product or circuit described herein. Cypress does not authorize its products for use as critical components in life-support systems
where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress' product in a life-support systems application implies that the manufacturer
assumes all risk of such use and in doing so indemnifies Cypress against all charges.
Use may be limited by and subject to the applicable Cypress software license agreement.
[+] Feedback