【PIC24EP64GP202】70Mipsで使ってみたけど・・・
◆PIC24EP64GP202を70Mipsで使ってみます。
dsPIC33FJ/PIC24HJファミリに非常に近いのでコードや回路はそのまんま流用できそうです。
準備
チップワンストップさんで購入しました。
・型番:PIC24EP64GP202-I/SP
実験のしやすいDIPタイプにしました。
・金額:¥533円
価格的には非常にやすいです。
参考資料
マイクロチップのサイトからリファレンスマニュアルをダウンロードしました。
①dsPIC33E/PIC24Eファミリリファレンスマニュアル セクション7.オシレータ:DS70580B_JP
page25:「7.37 MHz内部FRCにPLLを併用する場合のサンプルコード」を参照しました。
サンプルコードは60mipsですが、70MIPSに変更しました。
②dsPIC33FJ128MC802を40mipsで動かした時の記事がそのまま流用できます。
詳細はこちらから。
レジスタの扱いや式をまとめてあります。
開発環境
MPLAB-IDEではダメそう・・・
プロジェクトのターゲットデバイスには「PIC24EP64GP202」がちゃんとありますが
「p24EP64GP202.h」(ヘッダーファイル)がサポートフォルダには入っていません。
厄介なことにMPLAB-IDEではPIC24EP64GP202は開発できないようです。
どうしてもMPLAB-Xは使いたくなかったんですが・・・
(年をとると新しいことがやりづらくなるんだよね)
とはいってもしょうがないのでMPLAB-Xをインストールしてプロジェクト立ち上げ!
ソース
サンプルコードは60mipsですが、70MIPSに変更しました。
具体的には
・60mips「PLLFBDbits.PLLDIV=63」
↓
・70mips「PLLFBDbits.PLLDIV=73」
動作確認としてPORTBのbit6をパタパタ4回やってみました。
//========================================================= // TEST //========================================================= //== include ============================================ #include <p24Exxxx.h> #include <stdio.h> //== define ============================================================= //== configuration ====================================================== //== FGS ================================================== #pragma config GWRP=OFF //User program memory is not write-protected #pragma config GCP=OFF //General Segment Code protect is Disabled //== FOSCSEL ============================================== #pragma config FNOSC=FRCPLL //Internal Fast RC (FRC) w/ PLL #pragma config IESO=OFF //Start-up device with user-selected oscillator source //== FOSC ================================================= #pragma config FCKSM=CSECMD //Both Clock Switching and Fail-Safe Clock Monitor are disabled #pragma config IOL1WAY=ON // Allow Only One Re-configuration #pragma config OSCIOFNC=ON //OSC2 pin has digital I/O function #pragma config POSCMD=NONE //Primary Oscillator Disabled //== FWDT =============================================== #pragma config FWDTEN=OFF //Watchdog timer enabled/disabled by user software //== FPOR ================================================ #pragma config WDTWIN=WIN25 //WDT Window is 50% of WDT period #pragma config ALTI2C1=OFF //I2C1 mapped to SDA1/SCL1 pins #pragma config ALTI2C2=OFF //I2C2 mapped to SDA2/SCL2 pins //== FICD =========================================== #pragma config ICS=PGD3 //PGD3_use #pragma config JTAGEN=OFF //jtag=off //== interrupt_function_prototype ================================================ //== StringBox =================================================================== //== main ================================================================== int main(void) { //== Fcy=Fosc/2=7.37M*((PLLFBD+2)/(N2*N1))/2=69.09MHz ================ PLLFBDbits.PLLDIV = 73; //<8:0>M=PLLFBD+2 CLKDIVbits.DOZE = 0b000; //<14:12>Fcy*1 CLKDIVbits.FRCDIV = 0b000; //<10:8>FRC*1 CLKDIVbits.PLLPOST = 0; //<7:6>N2=2 CLKDIVbits.PLLPRE = 0; //<4:0>N1=2 OSCTUNbits.TUN = 0b00000; //<5:0>FRC+0MHz __builtin_write_OSCCONH(0x01); __builtin_write_OSCCONL(0x01); while(OSCCONbits.COSC != 0b001); while(OSCCONbits.LOCK != 1); //wait for PLL Lock //== AD_PORT ========================================================== ANSELA = 0x0000; ANSELB = 0x0000; //=== TRISA =========================================================== TRISA = 0x0000; //initial_ //== TRISB ============================================================= TRISB = 0x0000; //input: //== while(1) ============================================================== while(1) { //== FRONT_DEBUG ======================================================= asm("BSET LATB, #6"); asm("BCLR LATB, #6"); asm("BSET LATB, #6"); asm("BCLR LATB, #6"); asm("BSET LATB, #6"); asm("BCLR LATB, #6"); asm("BSET LATB, #6"); asm("BCLR LATB, #6"); //== BACK_DEBUG ======================================================= }//while(1) }//int main(void) //======================================================================== //=================================================================================
ポート制御の様子をオシロスコープで確認
あれ!?1サイクル33.33MHz(70/2≒35MHz)だと!?
次回は「PIC24EPは実質35mipsじゃないか!?」となります。