コンフィギュレーション (Configuration)

デバイスのハードウェア上の設定を行います。

各デバイスにどのような設定値が存在するかは、そのデバイスのヘッダファイルに記述されています。例えばp30f4012.hでは、次のように定義されています。

/* -------------------------------------------- */
/* Macros for Device Configuration Registers    */
/* -------------------------------------------- */

/* FOSC */
#define _FOSC(x) __attribute__((section("__FOSC.sec,code"))) int _FOSC = (x);

#define CSW_FSCM_OFF    0xFFFF
#define CSW_ON_FSCM_OFF 0x7FFF
#define CSW_FSCM_ON     0x3FFF
#define EC              0xFFFB
#define ECIO            0xFFFC
#define EC_PLL4         0xFFFD
#define EC_PLL8         0xFFFE
#define EC_PLL16        0xFFFF
#define ERC             0xFFF9
#define ERCIO           0xFFF8
#define XT              0xFFF4
#define XT_PLL4         0xFFF5
#define XT_PLL8         0xFFF6
#define XT_PLL16        0xFFF7
#define XTL             0xFFF0
#define FRC_PLL4        0xFFF1
#define FRC_PLL8        0xFFFA
#define FRC_PLL16       0xFFF3
#define HS              0xFFF2
#define LP              0xFCFF
#define FRC             0xFDFF
#define LPRC            0xFEFF

/* FWDT */
#define _FWDT(x) __attribute__((section("__FWDT.sec,code"))) int _FWDT = (x);

#define WDT_ON         0xFFFF
#define WDT_OFF        0x7FFF
#define WDTPSA_1       0xFFCF
#define WDTPSA_8       0xFFDF
#define WDTPSA_64      0xFFEF
#define WDTPSA_512     0xFFFF
#define WDTPSB_1       0xFFF0
#define WDTPSB_2       0xFFF1
#define WDTPSB_3       0xFFF2
#define WDTPSB_4       0xFFF3
#define WDTPSB_5       0xFFF4
#define WDTPSB_6       0xFFF5
#define WDTPSB_7       0xFFF6
#define WDTPSB_8       0xFFF7
#define WDTPSB_9       0xFFF8
#define WDTPSB_10      0xFFF9
#define WDTPSB_11      0xFFFA
#define WDTPSB_12      0xFFFB
#define WDTPSB_13      0xFFFC
#define WDTPSB_14      0xFFFD
#define WDTPSB_15      0xFFFE
#define WDTPSB_16      0xFFFF

/* FBORPOR */
#define _FBORPOR(x) __attribute__((section("__FBORPOR.sec,code"))) int _FBORPOR = (x);

#define MCLR_EN        0xFFFF
#define MCLR_DIS       0x7FFF
#define RST_IOPIN      0xFFFF
#define RST_PWMPIN     0xFBFF
#define PWMxH_ACT_HI   0xFFFF
#define PWMxH_ACT_LO   0xFDFF
#define PWMxL_ACT_HI   0xFFFF
#define PWMxL_ACT_LO   0xFEFF
#define PBOR_ON        0xFFFF
#define PBOR_OFF       0xFF7F
#define BORV_20        0xFFFF
#define BORV_27        0xFFEF
#define BORV_42        0xFFDF
#define BORV_45        0xFFCF
#define PWRT_OFF       0xFFFC
#define PWRT_4         0xFFFD
#define PWRT_16        0xFFFE
#define PWRT_64        0xFFFF


/* FGS */
#define _FGS(x) __attribute__((section("__FGS.sec,code"))) int _FGS = (x);

#define CODE_PROT_OFF  0xFFFF
#define CODE_PROT_ON   0xFFFD
#define GWRP_OFF  0xFFFF
#define GWRP_ON   0xFFFE

コンフィギュレーションの設定

コンフィギュレーションの設定は、下記のように各レジスタ用に用意されたマクロを使用して行います。複数のパラメータを指定する場合は、&で論理和を取ります。

_FOSC( CSW_FSCM_OFF & XT_PLL8 );
コンフィギュレーションに関連するレジスタ一覧
レジスタ 説明
FOSC クロック発振器 (OSCillator) 設定
FWDT ウォッチドッグタイマ (WatchDog Timer) 設定
FBORPOR BOR設定、POR設定
FGS コードプロテクト (General code Segment) 設定

FOSCレジスタ (OSCillator)

クロック発振器の設定を行います。

クロック切り替えとフェールセーフクロックモニタの設定値
パラメータ CSW (Clock SWitching) FSCM (Fail-Safe Clock Monitor)
CSW_FSCM_OFF × (無効) × (無効)
CSW_ON_FSCM_OFF ○ (有効) × (無効)
CSW_FSCM_ON ○ (有効) ○ (有効)
CSW (Clock SWitching)
プログラム実行中にクロックの切り替えを可能とする機能です。なおこの切り替え先は、OSCCONレジスタのNOSC<1:0>ビットで指定します。
FSCM (Fail-Safe Clock Monitor)
クロックが停止した際にはそれを内蔵のLPRC発振に切り替えて、処理を続行できるようにする機能です。(クロックの切り替えを必要とするため、CSWが有効のときしか機能しないようにされていると思われます)
発振モードの設定値 (一部)
モード パラメータ 周波数範囲※1 PLL※2 備考
水晶発振
(Crystal)
LP 32kHz × 低電力
HS 10 ~ 25MHz  
XT 4 ~ 10MHz ×  
XT_PLL8 8倍  
XT_PLL16 4 ~ 7.5MHz 16倍  
外部クロック
(External clock input)
EC 0 ~ 40MHz ×  
ECIO OSC2ピンはI/O
EC_PLL8 0 ~ 15MHz 8倍
EC_PLL16 0 ~ 7.5MHz 16倍
外部RC発振
(External RC oscillator)
ERC 0 ~ 4MHz × OSC2ピンはクロック出力
ERCIO OSC2ピンはI/O
内蔵RC発振
(Internal RC oscillator)
LPRC 512kHz × 低電力
FRC 8MHz ×  
FRC_PLL8 8倍  
FRC_PLL16 7.5MHz 16倍  
※1 dsPIC30Fの動作周波数の最大は120MHzのため、周波数範囲もそれに制限されます。
※2 PLL (Phase Locked Loop)

クロックの上限値

動作周波数の最大は電源電圧によって制限されるため、それに留意する必要があります。

電圧範囲 最大 動作周波数
30MIPS※1 20MIPS※1
4.5 ~ 5.5V 120MHz (30MIPS) 80MHz (20MIPS)
3.0 ~ 3.6V 80MHz (20MIPS) 60MHz (15MIPS)
2.5 ~ 3.0V 40MHz (10MIPS) 30MHz (7.5MIPS)
※1 デバイスタイプはデバイス上に刻印されている。例えば[ dsPIC30F4012-30I ]の太字部分。ここが「30」ならば30MIPS、「20」ならば20MIPSになる

※ MIPS = ( FOSC * PLL ) / 4

FWDTスタ (WatchDog Timer)

ウォッチドッグタイマの設定を行います。

WDT (Watchdog Timer)の設定値
パラメータ 説明
WDT_OFF ウォッチドッグタイマの有効/無効 無効
WDT_ON 有効
WDTPSA_xx タイムアウト時間

プリスケーラAの値

xxは「1、8、64、512」のいずれか

WDTPSB_xx

プリスケーラBの値

xxは「1~16」のいずれか

FBORPORレジスタ (BOR/POR)

BOR (Brown-out Reset)の設定値
パラメータ 説明
PBOR_OFF ブラウンアウトの有効/無効 無効
PBOR_ON 有効
BORV_20 ブラウンアウトの動作電圧 2.0V
BORV_27 2.7V
BORV_42 4.2V
BORV_45 4.5V
POR (Power-on Reset)の設定値
パラメータ 説明
PWRT_OFF パワーオンリセットの無効 無効
PWRT_4 タイムアウト時間 4ms
PWRT_16 16ms
PWRT_64 64ms
MCLR (Master Clear)の設定値
パラメータ MCLRピンによるリセット
MCLR_EN ○ (有効)
MCLR_DIS × (無効)
PWMの設定値
パラメータ 説明
RST_IOPIN PWMピンモード I/O
RST_PWMPIN PWM
PWMxH_ACT_HI 高位側 アクティブHigh
PWMxH_ACT_LO アクティブLow
PWMxL_ACT_HI 低位側 アクィブHigh
PWMxL_ACT_LO アクティブLow

FGSジスタ (General code Segment)

コープロトの設定を行います。

  • GCP (General code segment Code-Protect)
  • GWRP (General code segment WRite-Protect)
GS (General code Segment)の設定値
パラメータ    
CODE_PROT_OFF ユーザープログラムメモリのコード保護
(読み込み禁止)
× (無効)
CODE_PROT_ON ○ (有効)
GWRP_OFF ユーザープログラムメモリの書き込み保護
(書き込み禁止)
× (無効)
GWRP_ON ○ (有効)