・ MCLKを高速に設定するときに必要な手続きを、Cプログラミング・コードで説明します。
事前に Power Control Manager (PCM) で仕様をご確認ください。
・ 内容に誤り、問題、質問が有るときは、PICへご連絡をお願いします。
・ 参照資料 現在(Aug.2.2016)
① TRM(Technical Reference Manual) slau356d
② DS(Data-Sheet) slas826e
③ Code Example:..\MSP432P401_Code_Examples\CMSIS\msp432p401_cs_03
1 変更箇所
・ PCM:Vcore変更 AM_LDO_VCORE0 --> AM_LDO_VCORE1
・ FCTL:Flash wait states変更:0 --> 1
・ SC:DCO変更:DCO=3MHz(default)--> 48MHz -->MCLK
2 Vcore変更
・ VcoreをAM_LDO_VCORE0 -> AM_LDO_VCORE1 にupします。
・ 変更したあと、PCMがreadyになったら、Vcoreが正しく変更されたか確認します。
/* Step 1: Transition to VCORE Level 1: AM0_LDO --> AM1_LDO */
PCM->CTL0 = PCM_CTL0_KEY_VAL | PCM_CTL0_AMR_1;
while ((PCM->CTL1 & PCM_CTL1_PMR_BUSY));
if ((PCM->CTL0 & PCM_CTL0_CPM_MASK) != PCM_CTL0_CPM_1) error();
3 Flash wait statesの変更
・ Bank0とBank1のwait数を変更します。 wait数はdata-sheetで確認します。
・ note: MCLK=48MHzのwait数が、デバイスRevisionで変わります。 code example はRev-Bです。
Rev-Bデバイス =2 ・・・Preview版
Rev-Cデバイス =1 ・・・ 製品版 Aug.01.2016現在
/* Step 2: Configure Flash wait-state to 2 for both banks 0 & 1 */
FLCTL->BANK0_RDCTL = FLCTL->BANK0_RDCTL & (~FLCTL_BANK0_RDCTL_WAIT_MASK) | FLCTL_BANK0_RDCTL_WAIT_2;
FLCTL->BANK1_RDCTL = FLCTL->BANK0_RDCTL & (~FLCTL_BANK1_RDCTL_WAIT_MASK) | FLCTL_BANK1_RDCTL_WAIT_2;
4 DCO変更
・ DC=48MHzに変更して、MCLKに設定します。
/* Step 3: Configure DCO to 48MHz, ensure MCLK uses DCO as source*/
CS->KEY = CS_KEY_VAL ; // Unlock CS module for register access
CS->CTL0 = 0; // Reset tuning parameters
CS->CTL0 = CS_CTL0_DCORSEL_5; // Set DCO to 48MHz
/* Select MCLK = DCO, no divider */
CS->CTL1 = CS->CTL1 & ~(CS_CTL1_SELM_MASK | CS_CTL1_DIVM_MASK) | CS_CTL1_SELM_3;
CS->KEY = 0; // Lock CS module from unintended accesses
5 関係するヘッダー
・ 下記のmsp432p401r.hに、PCM,FCTL,CSの前記右辺で使っているシンボルが定義されています。
![]()