SSブログ

PIC32の割り込み周りでうろうろした [PIC32]

(2018.06.05)
PIC32を使ったOscilogiアプリを検討しています。先日のPICクラブで『タイマをDMA転送のトリガにして、10MHzでデータ転送した』という話を聞いて、俄然やる気になりました。¥(^_^)

割り込みを使ってDMAにトリガを掛ける方法はこれ(↓)で良さそうなのですが・・・
2018_0605_3.pngDMAトリガの設定

タイマ割り込みのIRQ番号が分かりません。orz
で、INTERRUPTの所を見てみると・・・有りました!
2018_0605_1.pngIRQ番号の割り当て

IRQ=0が(RESETでは無く)CORETIMER割り込みに割り当てられています。以前、(CORETIMER割り込みを使ったので)この辺りのことは調べた筈ですがすっかり忘れています。

ヘッダファイル(p32mx250f128b.h)を調べると、IRQのシンボルが定義されていました。
2018_0605_2.pngIRQのシンボル定義

多分一度は目を通した筈の資料を、とても新鮮な気持ちで眺めています。
これも年をとったせいなのかなぁ~

nice!(1)  コメント(0) 
共通テーマ:日記・雑感

同じ問題でまた嵌まった [PIC32]

(2015.07.31)
PIC32MX250を使い、アナログ2CHを200kHzサンプリングしようとして、嵌まりました。サンプリング・レートが200kHzに届きません。

プログラムを書き換えてもなかなか思うようになりません。あれこれ試しているうちに、サンプリング・レートが突然1MHzに跳ね上がって、またビックリ!調べてみるとADC割込フラグが消えなくなって誤動作していました。orz

”え~と、これは以前にも経験したやつだ。そのときは1MHzサンプリングも出来たんじゃなかったっけ?”

親族管理人ブログで検索を掛けて、以前書いた記事(これ)を発掘しました。

ふむふむ。(<==自分で書いたブログに感心している)

そのときも原因は判らないまま、AD1CON.SSRC<2:0>を”Internal counter ends sampling(auto convert)”に設定して、1MHzサンプリングを実現していました。

今回も同様に、”Internal counter ends sampling”に設定し、さらに"auto sampling"も設定して(ADCをフリーラン状態にして)おいて、200kHzインターバルで読み取るという方法でなんとか200kHzサンプリングが実現しました。

やれやれ

----------------------------------------
ちなみに、プログラムはこんな感じです
  while( break_flag == FLAG_OFF )
  {
      if( ADC_TIMER_INT_FlagGet() )
      {
// DMAをキックしてad_buffの内容を転送する
         SYS_DMA_Channel1ForceStart();
         ADC_TIMER_INT_FlagClear();
      }
      
      if( ADC_1_INT_FlagGet() )
      {
//ADC1BUFを読み出してから、割込フラグをクリアする
        ad_buff[0] = ADC1BUF0;
        ad_buff[1] = ADC1BUF1;
        ADC_1_INT_FlagClear();
      }



にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PIC32MZの注文をキャンセルした [PIC32]

(2014.08.29)
楽しみにしていたPIC32MZが発売されて、思わず飛びついて(5個ORDERした)しまったのですが・・・

PIC32MX250でI/Oポートの不具合(I2Cを有効にするとRA0 と RA1の出力がおかしくなる)に遭遇して以来、Microchip社のデバイスに(少しだけ)不信感を抱くようになりました。

入手したデバイスを使う前にデータシートに目を通すのは当然のこと(<==目を通さなければ使えない)ですが、引き続きErrataにも目を通しておかないと、徒にデバッグ時間を費やすことになります。

今回は部品を手に入れる前にPIC32MZのErrata(これです)に目を通してびっくりしました。プレスリリースから半年以上経っても出荷できなかったのですから、Microchip社が苦戦していることは判っていました。しかし、Rev. A4になっても全デバイスに共通する重大な不具合をいくつも抱え込んでいることに驚きました。

ADCは性能が出ないし、I2Cも駄目だし、クリスタル発振も出来ないのでは、オシロジ-32に使えません。(泣)

調べてみるとPIC24辺りから、対策出来ない(Rev. A8になっても改善しない)不具合が幾つもあって、製造段階で設計性能が出せないのでは無く、そもそも設計出来ていないように見受けられました。

PIC32MZのCPUコア(<==MIPS社の設計)に問題は無さそうなので、Harmony(<==PIC32MZの開発フレームワーク)の練習台にはなりそうですが、その先に繋がらないのでは練習する意味がありません。結局、PIC32MZ1024ECG064の注文はキャンセルしました。

suffixAを付けた再設計バージョンが発売される(2015年頃?)という噂もあるようですが、さてどうなるか?

PIC32MZの演算能力を生かしたアプリケーションを考えてみるかなぁ~
でもSPIにも問題があるようだし・・・

ガンバレ、Microchip!

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PIC32MZが発売された [PIC32]

2014.08.17)
久しぶりにMicrochip社のサイトを覗いてみたら、PIC32MZシリーズが”In Production”になりました。 パチパチパチ~
2014_0817_3.pngPIC32MZが発売された

早速値段を調べてみると、プログラムメモリ1M RAM512kのPIC32MZ1024ECG064が9.8ドルとPICの中ではかなり高めです。
2014_0817_1.pngPIC32MZ1024

ついでにプログラムメモリ2M のPIC32MZ2048ECG064も調べると、こちらは11.4ドルです。
2014_0817_2.pngPIC32MZ2048

取り合えず、PIC32MZ1024ECG064(TQFP)を5個ORDERしました。入手出来るのは11月下旬になりそうですが、それまでに基板を作らなければなりません。

う~ん、なんだかとっても楽しみ!
----------------------------------
(2014/08/17 18:00)
PIC32MZ Errataを見てみたら・・・
これです
ちょっと、早まったかなぁ~



にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Oscilogi32の開発環境が整った [PIC32]

(2014.06.25)
PIC32MX250を使った100kSPSのデジタル・オシロと1MSPSのロジアナを”Oscilogi32”と呼ぶことにしました。¥(^_^)

悩んでいたI2C通信が動き始めて一安心と思ったら、新たな問題が発覚しました。C言語で書かれたbcm2835ライブラリ(これです)をJAVAから呼び出すbcmlib_for_java(これです)が途中から動かなくなってしまいます。生成した子プロセスがクラッシュするようです。orz

Raspi-1から持ってきたbcmlib_for_javaを使ったのですが、改めてgithubからRaspi-2にcloneしてmakeし直しました。example/I2c.javaでテストすると・・・O.K.です。無事、インストールできました。

新たにインストールしたbcmlib_for_javaを使ってOscilogi32のJAVAプログラムを動かしてみると・・・今度は大丈夫です、I2C_readとI2C_writeを反復しています。(パチパチパチ~)
2014_0625_1.pngコマンド・テスト用
未だコマンド送受テスト用のウィンドウしか出来ていませんがOscilogi32の開発環境が整いました。

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PIC32MXのI2C通信が動き始めた [PIC32]

(2014.06.24)
Raspi-2とPIC32MX間のI2C通信にてこずっています。PIC18F25k50で使っていたI2CスレーブのプログラムをPIC32MXに移植しようとしたのですが、I2Cモジュールの機能の違いが大きく(<==I2CスレーブはAck/Nackをプログラムで制御できない?)、思うようには行きません。

なんとかPIC32MXのI2Cスレーブ・プログラムを書き上げ、Raspi-2(I2Cマスタ)とのI2C通信を試みましたが、READ要求には一回しか応答できません(WRITE要求の反復なら良い)。しかも、それ以後READ要求にもWRITE要求にも応答出来なくなってしまいます。データ・シートとリファレンス・マニュアルを何度も読み返したのですが、原因が掴めません。orz

あれこれ試していて、デバッガでブレークを掛けるとI2C2STATのRBFフラグがクリアされ、READ要求に(一回は)応答出来るようになることが判りました。

WRITE要求のときはI2C2RCVに入ったI2Cアドレスを読み出していた(そうしないとReceive Overflowになる)のですが、READ要求のときは関係ないと思ってI2C2RCVを読み出していませんでした。

”RBFフラグが立ったままだとアクノリッジ・シーケンスが動かない”とは何処にも書かれていませんが、どうやらそういうことのようです。(I2COVフラグも立たない)

アクノリッジ・シーケンスでI2Cアドレスを読み出すようにして、ようやくREAD要求とWRITE要求の反復が出来るようになりました。

やれやれ

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(1)  トラックバック(0) 
共通テーマ:日記・雑感

タイマ動作を勘違いしていた [PIC32]

(2014.06.07)
殆どのPICアプリケーションで周期タイマを利用しているのですが、その動作を勘違いしていたことに気付きました。

Fosc/4(<==例えば2MHz)をベース・クロックにして周期タイマを構成する場合、PRレジに分周比(<==例えば2000)を設定して、1msecインターバルの割り込みを発生させていました。同じように、PIC32MXで30MHzのPBCLKを使って、2μSインターバルの割り込みを発生するため、PRレジに60を設定しました。

この割り込みインターバルでportBの状態を読み取り、メモリに書き出してロジアナにするつもりだったのですが、読み取りレートが数%足りません。割り込みが競合してインターバル通りに割り込み処理が行えなくなっているものと考え、割り込みプライオリティを制御してみたのですが、状況は改善しません。

そこで割り込み処理を諦め、タイミングの細かな制御が可能なポーリング処理に変えてみたのですが、やっぱり2%程度の遅れが出ます。

タイミング・マージンは十分ある筈なのに、一体何が起きているのでしょうか?
何だ、これは???

ひとしきり悩んだ挙句、ふと思いついてTIMERのリファレンス・マニュアルを読み直し、周期タイマの所にこんな記述を見つけました。

”タイマはTMR カウントレジスタ値がPR 周期レジスタ値に一致するまでインクリメントし続けます。一致すると、次のタイマクロックサイクルで TMRカウントレジスタが0x0000 にリセットした後にインクリメントを再開します。”

親族SNS管理人はTMRとPRが一致したとき、非同期にリセットが掛かる(次のクロックでTMR=1になる)ものと思っていました。上の説明は明らかに違います。

PRレジに60を設定すると61カウント周期のタイマ動作になるのです!
今までPRレジの設定値が大きかったので、周期タイマーの誤差(<==0.1%以下)に気付きませんでした。

PRレジに設定を59に変更して、ようやく500kHzのサンプリング周期になりました。

やれやれ

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

MIPS値が足りない [PIC32]

(2014.06.05)
PIC32MX250のportBとADCの読み取りを並列に動かして、100kSPSのデジタル・オシロと1MSPSのロジアナを実現しようとしています。

タイミングを細かく管理するため、割り込みは使わず、ポーリングで制御する方式を試してみた(最適化レベル1でコンパイルしてインストラクション数をカウントした)のですが、こんな結果になりました。

portB関連処理 1μ秒当たり 47step
AD関連処理 40μ秒当たり 193step

両方合わせると40μ秒当たり 2073step <==52MIPS!
う~ん、MIPS値が足りてません。特にportB関連の処理負担が重過ぎます。

<対策1>
portBのトリガ条件からパターン・マッチを外す<==45MIPS程度
<対策2>
portBのトリガ条件からビット・チェンジを外す<==45MIPS程度
<対策3>
portBのサンプリング・レートを500kSPS以下にする<==29MIPS程度
<対策4>
portBのサンプリング・レートが1MSPSのときはADの並列動作を止める<==48MIPS程度

”手元のPIC32MX250F128Bを使って”という設計条件の下では、安全サイドの<対策3>で行こうと思います。(I2Cの信号も100kBPSなら観測可能?)

--------------------------------------------------
32biデバイスを使った開発で、こんなミリミリしたプログラムを書くことになるとは思ってなかった。
マルチタスク処理なんて、まだずっと先だなぁ
--------------------------------------------------

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Windowsネットワークが見えなくなった [PIC32]

(2014.06.03)
PIC32MX250F128BとRaspi-2をI2Cで繋ごうとしているのですが、なかなか思うように進まず、苦戦しています。PIC32MX250F128BのI2C1(Master)とI2C2(Slave)間のI2C通信は出来ましたが、I2C1(slave)とRaspi-2(Master)のI2C通信はやっぱり上手く行きません。orz

走らせるとSDA1が変な電圧を示します。ロジアナもオシロも未だ無いので(<==作っている最中)、何が起きているのか確認できません。動作したI2C2(Slave)でRaspi-2(Master)とI2C通信してみると・・・動きました。(<==I2C2の割り込みが入った)送信データが無いのでNotAckを返しているだけですが、ようやく一歩前進しました。(<==I2C1はスレーブ動作できない?)

これでRaspi-2のJAVAプログラム開発に掛かれると思ったら、I2C周りで苦戦を続けている間にWindwsネットワークが見えなくなっていて、Raspi-2のsambaディレクトリが使えなくなってしまいました。orz

Raspiだけならsambaサーバの問題かもしれないのですが、NASも見えないので別に原因があるように思われます。”マスタ・ブラウザ”がWindowsネットワークの要らしいのですが、Windows 7のレジストリを弄っても、”マスタ・ブラウザ”になってくれません。(<==セキュリティ対策ソフトが邪魔してる?)

こんな不安定なWindowsネットワークに頼って、開発を続けるのは考え物です。

Netbeansのランタイム・プラットホームにリモートJAVA SEを設定する方法を試すことにします。
(<==sshでログインできればNetbeansでRaspi-2のディレクトリにアクセスできる)

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PIC32MX250のI2Cが少し動いた [PIC32]

(2014.06.01)
PIC32MX250のI2C1とI2C2を使って、Master-Slave間の通信を試してみました。

PIC32MX3xx以上のデバイスに比べて、PIC32MX250のI2C機能は簡略化されている(==>例えばSCIEやPCIEが無い)ことが判ってきました。これではPIC18F25k50で使っていたI2C(スレーブ)のプログラムは動作しません。

また、TIMER2割り込みをDMA転送のトリガに使うロジアナ機能も思うような性能が出ず(何故か数%の遅れが出る==>転送漏れの発生?)、構想の見直しを迫られています。、

限界性能を追求するのは止めて、必要最小限の仕様に改めることにしました。

<設計仕様(改)>
デジタル・オシロ:2CH 100kSPS
ロジアナ:7CH 1MSPS

割り込みを使わず、ポーリングで制御する方式を試してみようと思います。

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。