picマイコンの使い方

PICマイコンの8bitマイコンから32bitマイコンまで使いこなすぞ! 周辺機能やアセンブラ、C言語を使いこなすぞ。ARMには負けないぞ! 頼みの綱はPIC32MZだ!たのしみだなー

PIC24EP64GP202

【PIC24EP64GP202】実質35Mips!?


PIC24EP64GP202を70Mipsで使ってみたけど
実質35Mipsで動作しているようです・・・
以前40Mipsの動作確認したFJ/HJファミリと比較したいと思います。



1)1命令1サイクル!?
マイクロチップのサイトにあるリファレンスマニュアルを参照しました。
①dsPIC33E/PIC24Eファミリリファレンスマニュアル セクション2.CPU:DS70359B_JP
page31の2.8.1:「1命令ワード(word)/1命令サイクル(cycle)」を見てみると・・・
badde6ba.png
あれ!?3つの命令に6サイクルもかかっている!?
ってことは、1命令に2サイクル掛ってるじゃないか!?
全然70Mipsじゃないね!?
実質35Mipsってことになるよ。。。
前回の記事ポートをパタパタしても33MHzだったんだね。

つづいてFJ/Hファミリーは・・・
②dsPIC33FJファミリリファレンスマニュアル セクション2.CPU:DS70204B_JP
page30の2.8.1:「1命令ワード(word)/1命令サイクル(cycle)」を見てみると・・・
0edd779b.png
3つの命令に3サイクルかかっているので
1命令1サイクルですね。安心して40Mipsであることがわかりますね。

2)まとめ
誰か!お前間違っていると言ってくれ!
70Mipsで動かしたよって情報あったらお願いします。

【PIC24EP64GP202】70Mipsで使ってみたけど・・・


◆PIC24EP64GP202を70Mipsで使ってみます。
dsPIC33FJ/PIC24HJファミリに非常に近いのでコードや回路はそのまんま流用できそうです。



0)調達
チップワンストップさんで購入しました。
・型番:PIC24EP64GP202-I/SP
実験のしやすいDIPタイプにしました。
・金額:¥533円
価格的には非常にやすいです。

1)参考資料
マイクロチップのサイトからリファレンスマニュアルをダウンロードしました。
①dsPIC33E/PIC24Eファミリリファレンスマニュアル セクション7.オシレータ:DS70580B_JP
page25:「7.37 MHz内部FRCにPLLを併用する場合のサンプルコード」を参照しました。
サンプルコードは60mipsですが、70MIPSに変更しました。
②dsPIC33FJ128MC802を40mipsで動かした時の記事がそのまま流用できます。
詳細はこちらから。
レジスタの扱いや式をまとめてあります。

2)開発環境
MPLAB-IDEではダメそう・・・
プロジェクトのターゲットデバイスには「PIC24EP64GP202」がちゃんとありますが
「p24EP64GP202.h」(ヘッダーファイル)がサポートフォルダには入っていません。
厄介なことにMPLAB-IDEではPIC24EP64GP202は開発できないようです。
どうしてもMPLAB-Xは使いたくなかったんですが・・・
(年をとると新しいことがやりづらくなるんだよね)
とはいってもしょうがないのでMPLAB-Xをインストールしてプロジェクト立ち上げ!

3)ソース
サンプルコードは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)


//========================================================================

//=================================================================================


4)オシロの波形
あれ!?1サイクル33.33MHz(70/2≒35MHz)だと!?
次回は「PIC24EPは実質35mipsじゃないか!?」となります。
bd4339b4.png


5)回路図
c1edb830.png


ギャラリー
  • 【PIC32MZ2048ECH144-I/PH】PIC32MZ2048ECH144を買いました!
  • 【PIC32MX370F512H】タイマーを使ってみる。
  • 【dsPIC33FJ128MC802】PMP接続のDMA転送でaitendoの1.44インチ液晶TFT(ZY-FGD)を使ってみる。その3
  • 【dsPIC33FJ128MC802】PMP接続のDMA転送(連続転送)でaitendoの液晶を使ってみる。
  • 【dsPIC33FJ128MC802】PMP接続のDMA転送(連続転送)でaitendoの液晶を使ってみる。
  • 【dsPIC33FJ128MC802】PMP接続のDMA転送(連続転送)でaitendoの液晶を使ってみる。
  • 【dsPIC33FJ128MC802】PMP接続のDMA転送(連続転送)でaitendoの液晶を使ってみる。
  • 【dsPIC33FJ128MC802】aitendoの1.44インチ液晶TFT(ZY-FGD)をPMP接続で使ってみる!
  • 【dsPIC33FJ128MC802】aitendoの1.44インチ液晶TFT(ZY-FGD)をPMP接続で使ってみる!
メッセージはこちちらからお願いします。

名前
メール
本文
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

ブログパーツ
  • SEOブログパーツ
にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村
アクセスカウンタ
アクセスランキング