S6J3110 / S6S3120 Series ウォッチドッグタイマの設定方法 32-Bit Microcontroller Spansion® TraveoTM Family APPLICATION NOTE Publication Number S6J3110_AN708-00012 CONFIDENTIAL Revision 1.0 Issue Date June 24, 2015 v1.1 A P P L I C A T I O N N O T E 対象製品 本操作マニュアルに記載されている内容の対象製品は、下記のとおりです。 シリーズ名 2 CONFIDENTIAL 品種型格(パッケージサフィックスは除く) S6J3110 S6J3118, S6J3119, S6J311A, S6J311B, S6J311C, S6J311D, S6J311E S6J3120 S6J3128, S6J3129, S6J312A S6J3110_AN708-00012-1v0-J, June 24, 2015 v1.1 A P P L I C A T I O N N O T E Table of Contents 1. 2. 3. 4. 5. はじめに ......................................................................................................................................... 4 1.1 この文書について................................................................................................................ 4 ウォッチドッグタイマ概要 ............................................................................................................ 5 ウォッチドッグの設定手順 ............................................................................................................ 6 3.1 ソフトウェアウォッチドッグタイマの設定手順 ................................................................. 6 3.1.1 サンプルソフトのソフトウェアウォッチドッグタイマ設定手順 ....................... 7 3.1.2 ソフトウェアウォッチドッグタイマのクリア手順 ............................................. 8 3.2 ハードウェアウォッチドッグタイマの設定手順 ................................................................. 9 3.2.1 サンプルソフトのハードウェアウォッチドッグタイマ設定手順 ..................... 10 3.2.1 ハードウェアウォッチドッグタイマのクリア手順 ........................................... 10 参考文書 ....................................................................................................................................... 12 主な変更内容 ................................................................................................................................ 13 June 24, 2015, S6J3110_AN708-00012-1v0-J CONFIDENTIAL 3 V1.1 A P P L I C A T I O N N O T E 1. はじめに 1.1 この文書について 本アプリケーションノートは、スパンション製マイコン Traveo ファミリ S6J3110 / S6J3120 series の利用 を検討されている方を対象としています。 本アプリケーションノートでは、ソフトウェアウォッチドッグタイマとハードウェアウォッチドッグタイマ の設定方法について説明します。 4 CONFIDENTIAL S6J3110_AN708-00012-1v0-J, June 24, 2015 v1.1 A P P L I C A T I O N N O T E 2. ウォッチドッグタイマ概要 ウォッチドッグタイマはプログラム暴走を検出する為に使用する機能です。ウォッチドッグタイマにはソフ トウェアウォッチドッグタイマとハードウェアウォッチドッグタイマがあります。 Table2-1 に双方の主な相違点を示します。 Table 2-1 ソフトウェアウォッチドッグタイマとハードウェアウォッチドッグタイマの主な相違点 項目 起動方法 ウォッチドッグカウンタの ソースクロック レジスタ設定方法 PSS モードでの動作 ソフトウェアウォッチドッグタイマ リセット解除後に自動起動 -High Speed CR Clock -Low Speed CR Clock ユーザプログラムのレジスタ設定にて有 効/無効の選択可能 動作停止 June 24, 2015, S6J3110_AN708-00012-1v0-J CONFIDENTIAL ハードウェアウォッチドッグタイマ ユーザプログラムのレジスタ設定で起動 -High Speed CR Clock -Low Speed CR Clock -Main Clock ユーザプログラムにて設定 BootROM マーカにて設定 (BootROM は、リセット後にユーザプロ グラムの前に実行される組込みファー ムウェアです) 5 V1.1 A P P L I C A T I O N N O T E 3. ウォッチドッグの設定手順 S6J3110 / S6J3120 series のウォッチドッグタイマを設定するためには固有の手順が必要になります。 本章では、ソフトウェアウォッチドッグタイマとハードウェアウォッチドッグタイマの設定方法について説 明します。 3.1 ソフトウェアウォッチドッグタイマの設定手順 Figure 3-1 にソフトウェアウォッチドッグタイマの設定手順例を示します。 Figure 3-1 ソフトウェアウォッチドッグタイマ設定手順例 START SWDGn_RSTCAUSE に 予め、SWDGn_CFG:LOCK=0 であることを確認しておく リセット要因のクリア 0x0 を設定 SWDGn_INT の設定 割込み設定 SWDn_TRG0CFG と カウンタクリア値の設定 SWDGn_TRG1CFG の設定 SWDGn_RUNLLS と SWDGn_PROT=0xEDAC_CE55 を設定 SWDGn_RUNULS の設定 RUN モード時のウインドウ上限値/下限値の設定 後に各ウォッチドッグレジスタを設定 SWDGn_PSSLLS と PSS モード時のウインドウ上限値/下限値の設定 SWDGn_PSSULS の設定 SWDGn_RSTDLY の設定 SWDGn_CFG の設定 SWDGn_CFG:LOCK に 0x1 を設定 リセットディレイ時間の設定 ソフトウェアウォッチドッグタイマ動作の設定 ソフトウェアウォッチドッグタイマ設定を終了する際は、 SWDGn_CFG:LOCK=1 にする END 6 CONFIDENTIAL S6J3110_AN708-00012-1v0-J, June 24, 2015 v1.1 A P P L I C A T I O N 3.1.1 N O T E サンプルソフトのソフトウェアウォッチドッグタイマ設定手順 Figure 3-2 にサンプルソフトにおけるソフトウェアウォッチドッグタイマ設定手順を示します。 Figure 3-2 サンプルソフトのソフトウェアウォッチドッグタイマ設定手順 swdg.c /* SWDG configuration registers can be written only once */ if (SWDG0_CFG_LOCK != 0) { SWDGn_CFG:LOCK=0 であることを確認 return Error; } /* Clear reset cause */ リセット要因のクリア SWDG0_PROT = SWDG_PROT_UNLOCK; SWDG0_RSTCAUSE = 0x00000000; /* Set the configuration of the interrupt */ 割込み設定 SWDG0_PROT = SWDG_PROT_UNLOCK; SWDG0_INT = unInt.u32Register; /* Set WDG trigger values */ カウンタクリア値の設定 SWDG0_PROT = SWDG_PROT_UNLOCK; SWDG0_TRG0CFG = pstcConfig->u8TriggerKey0; SWDG0_PROT = SWDG_PROT_UNLOCK; カウンタクリア値の設定 SWDG0_TRG1CFG = pstcConfig->u8TriggerKey1; RUN モード時のウインドウ下限値の設定 /* Set window lower limit for RUN mode */ SWDG0_PROT = SWDG_PROT_UNLOCK; SWDG0_RUNLLS = pstcConfig->stcRunModeSettings.u32WindowLowerLimit; RUN モード時のウインドウ上限値の設定 /* Set window upper limit for RUN mode */ SWDGn_PROT= 0xEDAC_CE55 を設定後に 各ウォッチドッグレジスタ を設定 SWDG0_PROT = SWDG_PROT_UNLOCK; SWDG0_RUNULS = pstcConfig->stcRunModeSettings.u32WindowUpperLimit; PSS モード時のウインドウ下限値の設定 /* Set window lower limit for PSS mode */ SWDG0_PROT = SWDG_PROT_UNLOCK; SWDG0_PSSLLS = pstcConfig->stcPssModeSettings.u32WindowLowerLimit; /* Set window upper limit for PSS mode */ PSS モード時のウインドウ上限値の設定 SWDG0_PROT = SWDG_PROT_UNLOCK; SWDG0_PSSULS = pstcConfig->stcPssModeSettings.u32WindowUpperLimit; /* Set delay cycle for Reset or NMI. */ SWDG0_PROT = SWDG_PROT_UNLOCK; リセットディレイ時間の設定 SWDG0_RSTDLY_WDGRSTDLY = pstcConfig->u16ResetDelay; /* Set WDG configuration */ SWDG0_PROT = SWDG_PROT_UNLOCK; SWDG0_CFG = unCfg.u32Register; /* Lock WDG configuration */ SWDG0_PROT = SWDG_PROT_UNLOCK; ソフトウェアウォッチドッグタイマ 動作の設定 ソフトウェアウォッチドッグタイマ の設定を終了する際は、SWDGn_CFG:LOCK=1 にする SWDG0_CFG_LOCK = 1; June 24, 2015, S6J3110_AN708-00012-1v0-J CONFIDENTIAL 7 V1.1 A P P L I C A T I O N 3.1.2 N O T E ソフトウェアウォッチドッグタイマのクリア手順 予め SWDG0_TRG0CFG と SWDG0_TRG1CFG に設定した値を SWDG0_TRG0 と SWDG0_TRG1 に書込 むことで、ソフトウェアウォッチドッグタイマのカウンタをクリアします。 Figure 3-2 にサンプルソフトにおけるソフトウェアウォッチドッグタイマのクリア手順を示します。 Figure 3-3 サンプルソフトのソフトウェアウォッチドッグタイマのクリア手順 swdg.c en_result_t Swdg_Clear(uint8_t u8TrgVal0, uint8_t u8TrgVal1) { uint32_t cnt; /* --------------- Check parameters and conditions ---------------- */ cnt = Swdg_GetCounterValue(); if (cnt < SWDG0_RUNLLS ) { return Error; } /* --------------- Access registers ---------------- */ /* Clear SWDG */ IRQ_DISABLE_LOCAL(); SWDG0_TRG0 = u8TrgVal0; SWDG0_TRG1 = u8TrgVal1; ソフトウェアウォッチドッグタイマの カウントクリア IRQ_RESTORE(); return Ok; } 8 CONFIDENTIAL S6J3110_AN708-00012-1v0-J, June 24, 2015 v1.1 A P P L I C A T I O N 3.2 N O T E ハードウェアウォッチドッグタイマの設定手順 Table 3-1 にハードウェアウォッチドッグタイマ設定用の BootROM のマーカ一覧表を示します。 ハードウェアウォッチドッグタイマの一部のレジスタを設定する際には、これらのマーカを使用します。 WDR_CEM マーカが有効な場合、BootROM マーカの値が対応するレジスタに設定されます。 WDR_CEM マーカが無効の場合、各レジスタはハードウェアマニュアルに記載されている初期値となりま す。 Table 3-1 ハードウェアウォッチドッグタイマ設定用 BootROM マーカ一覧表 マーカ名 WDR_INTM 割込み設定用マーカ WDR_TRG0CFGM WDR_TRG1CFGM カウンタクリア値設定用マーカ カウンタクリア値設定用マーカ WDR_RUNLLM WDR_RUNULM RUN モード時の下限値設定用マーカ RUN モード時の上限値設定用マーカ WDR_PSSLLM WDR_PSSULM PSS モード時の下限値設定用マーカ PSS モード時の上限値設定用マーカ WDR_RSTDLYM WDR_CFGM リセットディレイ時間設定用マーカ ハードウェアウォッチドッグタイマ動作設定用マーカ WDR_CEM ハードウェアウォッチドッグタイマ設定有効用マーカ June 24, 2015, S6J3110_AN708-00012-1v0-J CONFIDENTIAL 概要 9 V1.1 A P P L I C A T I O N 3.2.1 N O T E サンプルソフトのハードウェアウォッチドッグタイマ設定手順 Figure 3-4 にサンプルソフトにおけるハードウェアウォッチドッグタイマ設定手順を示します。 Figure 3-4 サンプルソフトのハードウェアウォッチドッグタイマ設定手順 flash_marker.asm ;************************************************************************ ;* 5.4 Watchdog Description Record (WDR) * ;************************************************************************ ;* Hardware Watchdog Interrupt Configuration Marker ;* Reset Enable Marker ;* If set to MARKER_ENABLE, a reset is generated when a watchdog error occurs. ;* Otherwise, an NMI interrupt is generated in the same condition. ;* < set to MARKER_DISABLE or MARKER_ENABLE リセット生成有効 #define WDR_INTM_RSTENM_ENABLE (MARKER_ENABLE) ;* Prior Warning Interrupt Enable Marker ;* If set to MARKER_ENABLE, prior warning interrupt is enabled. ;* Otherwise, it is disabled. 事前警告割込み有効 ;* < set to MARKER_DISABLE or MARKER_ENABLE #define WDR_INTM_IRQENM_ENABLE (MARKER_ENABLE) ;* Watchdog Trigger 0 Configuration Marker ;* Following values are used to clear hardware watch dog timer. ;* Valid range: 0x00...0xFF #define WDR_TRG0CFGM_WDGTRG0CFGM_SETTING (0x00) #define WDR_TRG1CFGM_WDGTRG0CFGM_SETTING (0x00) カウンタクリア値として 0x00 を設定 ;* Hardware Watchdog Lower Limit RUN Setting Marker ;* This value defines the lower border of the Watchdog window for RUN state. ;* When set to "0x00000000", the window function does not work. #define WDR_WDR_RUNLLM_SETTING (0x00000000) RUN モード時のウインドウ 下限値の設定 (無効) ;* Hardware Watchdog Upper Limit RUN Setting Marker ;* This value defines the upper border of the Watchdog window for RUN state. #define WDR_WDR_RUNULM_SETTING (0x01000000) RUN モード時のウインドウ 上限値の設定 ;* Hardware Watchdog Lower Limit PSS Setting Marker ;* This value defines the lower border of the Watchdog window for PSS state. ;* When set to "0x00000000", the window function does not work. #define WDR_WDR_PSSLLM_SETTING (0x00000000) ;* Hardware Watchdog Upper Limit PSS Setting Marker ;* This value defines the upper border of the Watchdog window for PSS state. #define WDR_WDR_PSSULM_SETTING (0x80000000) ;* Hardware Watchdog Reset Delay Counter Marker ;* This value defines the delay to be inserted ;* in Watchdog reset/NMI generation in case of a Hardware Watchdog error. ;* valid range: 0 to 65535 (0xFFFF) #define WDR_RSTDLYM_WDGRSTDLYM_SETTING (0x0000) PSS モード時のウインドウ 下限値の設定 (無効) PSS モード時のウインドウ 上限値の設定 リセットディレイ 時間の設定 ;* Clock Selection Marker ;* This value is used to select a source clock of the watchdog counter. ;* < set to WDR_CFGM_CLKSELM_LOW_SPEDD_CR or WDR_CFGM_CLKSELM_HIGH_SPEDD_CR #define WDR_CFGM_CLKSELM_CLK_SELECTION (WDR_CFGM_CLKSELM_LOW_SPEDD_CR) ;* Hardware Watchdog Configuration Enable Marker カウントクロックの設定 ;* If set to MARKER_ENABLE, the hardware watchdog is started based (Low Speed CR Clock) ;* on the settings defined with the WDR. ;* Otherwise, the hardware watchdog operates based on the default settings. ;* < set to MARKER_DISABLE or MARKER_ENABLE //#define WDR_CEM_ENABLE #define WDR_CEM_ENABLE 10 CONFIDENTIAL (MARKER_DISABLE) ハードウェア ウォッチドッグタイマの マーカ設定有効 (MARKER_ENABLE) S6J3110_AN708-00012-1v0-J, June 24, 2015 v1.1 A P P L I C A T I O N 3.2.2 N O T E ハードウェアウォッチドッグタイマのクリア手順 予め WDR_TRG0CFGM と WDR_TRG1CFGM に設定した値を HWDG_TRG0 と HWDG_TRG1 に書込むこ とで、ハードウェアウォッチドッグタイマのカウンタをクリアします。 Figure 3-5 にサンプルソフトにおけるハードウェアウォッチドッグタイマのクリア手順を示します。 Figure 3-5 サンプルソフトのハードウェアウォッチドッグタイマのクリア手順 main.c int main(void) { // Finalize initialization to default settings. // (this will do IRQ and NMI initialization and global IRQ/NMI enable) Start_Init(); // Endless loop for (;;) { ClearWatchdog(); } } static void ClearWatchdog(void) { // Clear hardware watchdog IRQ_DISABLE_LOCAL(); HWDG_TRG0 = HWDG_TRG0_VALUE; ハードウェアウォッチドッグタイマの カウントクリア HWDG_TRG1 = HWDG_TRG1_VALUE; IRQ_RESTORE(); } June 24, 2015, S6J3110_AN708-00012-1v0-J CONFIDENTIAL 11 V1.1 A P P L I C A T I O N 4. N O T E 参考文書 [1]. 32-BIT MICROCONTROLLER Spansion Traveo Family S6J3110 series HARDWARE MANUAL [2]. 32-BIT MICROCONTROLLER Spansion Traveo Family S6J3120 series HARDWARE MANUAL 12 CONFIDENTIAL S6J3110_AN708-00012-1v0-J, June 24, 2015 v1.1 A P P L I C A T I O N N O T E 5. 主な変更内容 ページ 場所 - - 変更箇所 Revision 1.0 June 24, 2015, S6J3110_AN708-00012-1v0-J CONFIDENTIAL Initial release 13 V1.1 A P P L I C A T I O N N O T E 免責事項 本資料に記載された製品は、通常の産業用, 一般事務用, パーソナル用, 家庭用などの一般的用途 (ただし、用途の限定はあ りません) に使用されることを意図して設計・製造されています。(1) 極めて高度な安全性が要求され、仮に当該安全性が 確保されない場合、社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途 (原子力施設における 核反応制御, 航空機自動飛行制御, 航空交通管制, 大量輸送システムにおける運行制御, 生命維持のための医療機器, 兵器シ ステムにおけるミサイル発射制御等をいう) 、ならびに(2) 極めて高い信頼性が要求される用途 (海底中継器, 宇宙衛星等を いう) に使用されるよう設計・製造されたものではありません。上記の製品の使用法によって惹起されたいかなる請求また は損害についても、Cypress は、お客様または第三者、あるいはその両方に対して責任を一切負いません。半導体デバイス はある確率で故障が発生します。当社半導体デバイスが故障しても、結果的に人身事故, 火災事故, 社会的な損害を生じさ せないよう、お客様において、装置の冗長設計, 延焼対策設計, 過電流防止対策設計, 誤動作防止設計などの安全設計をお願 いします。本資料に記載された製品が、外国為替及び外国貿易法、米国輸出管理関連法規などの規制に基づき規制されてい る製品または技術に該当する場合には、本製品の輸出に際して、同法に基づく許可が必要となります。 商標および注記 このドキュメントは、断りなく変更される場合があります。本資料には Cypress が開発中の Cypress 製品に関する情報が記 載されている場合があります。Cypress は、それらの製品に対し、予告なしに仕様を変更したり、開発を中止したりする権 利を有します。このドキュメントに含まれる情報は、現状のまま、保証なしに提供されるものであり、その正確性, 完全性, 実施可能性および特定の目的に対する適合性やその市場性および他者の権利を侵害しない事を保証するものでなく、また、 明示, 黙示または法定されているあらゆる保証をするものでもありません。Cypress は、このドキュメントに含まれる情報を 使用することにより発生したいかなる損害に対しても責任を一切負いません。 Copyright © 2015 Cypress Semiconductor Corp. All rights reserved. 商標:Cypress, Cypress ロゴ,Spansion®, Spansion ロゴ (図形マーク), MirrorBit®, MirrorBit® Eclipse™, ORNAND™, Easy DesignSim™, Traveo™及びこれらの組合せは、米国・日本ほか諸外国における Cypress Semiconductor Corp.の商標です。第三 者の社名・製品名等の記載はここでは情報提供を目的として表記したものであり、各権利者の商標もしくは登録商標となっ ている場合があります。 14 CONFIDENTIAL S6J3110_AN708-00012-1v0-J, June 24, 2015 v1.1