2023年8月6日日曜日

BlackFinを使ってみるなり(5) 千里の道もLチカから

こんにちわ.さすらいのポエマー、ひらりんです.

BlackFin BF706の開発環境CrossCoreをインストしたけどなんじゃーこりゃぁ、わからん.

以下はポエムです.

ポエム1
CrossCoreのproject画面にsourceが表示されるのですが、、、main()が1系統しか存在しません.えっ、このmain()ってCPUなのDSPなの?という疑問.ポエマー的にはCPUのmain()とDSPのmain()が2本現われると思っていたのです.
ポエマーはBF706のdatasheetを読みました....
そしたら、CPU+DSPのdual core仕様ではなくて、CPUとDSPが融合されたcoreが1つ在るのがBF706の正体だと判りました.ゆえに、main()はDSPのエントリだと思って良さそうです.

ポエム2
とりあえずLチカでもやろうか.
生成直後のprojectがこれ.これにLチカを追記しようともライブラリが判らないので雲を掴むような話でちょっと無理です.
  #include <sys/platform.h>
  #include "adi_initialize.h"
  #include "test2.h"
  char __argv_string[] = "";
  int main(int argc, char *argv[])
  {
adi_initComponents();
return 0;
  }
ADが提供するsample projectぐらいあるだろうと探し回り中・・・ありました.
CrossCoreのprojectにあるsystem.svcを開きますと、その画面から、各add-in libraryのexampleを表示させる事ができます.
こんなexample codeが表示されます.これはGPIOのPORT_Aをいじるcodeです.callback memoryが必要な理由はわかりません.とりあえずこのcodeはビルドできます.
  int main(void)
  {
ADI_GPIO_RESULT result;
uint32_t gpioMaxCallbacks;
result = adi_gpio_Init((void*)gpioMemory, GPIO_MEMORY_SIZE, &gpioMaxCallbacks);
result = adi_gpio_SetDirection(ADI_GPIO_PORT_A, ADI_GPIO_PIN_0, ADI_GPIO_DIRECTION_OUTPUT);
result = adi_gpio_Set(ADI_GPIO_PORT_A, ADI_GPIO_PIN_0);
  }

気をつけるべきなのは、すぐ隣にある別のGPIO sampleは、なぜかPORT_Gをいじります.このcodeはerrorでビルドが停まってしまいます.
result = adi_gpio_SetDirection(ADI_GPIO_PORT_G,......);
このerr原因は、QFN88のBF706にはportABCしか存在しないためです.target deviceが違うcodeが混じってるのでポエマーとしては要注意だった.

ポエム3
ビルドが通ったので、基板をうごかしてみようか.ADSP-BF706_ezkit_miniの回路図はこちらです.PORT_C_03にLED0がついてます.
↓初回はdebuggerを設定してやるんでしょう、きっと.なんとなく進みます.
↓BF706を選ぶと、EZ-Kit Miniを選べる.
↓debuggerに接続するprojectを選択する.ここではtest2.
↓debuggerのボタンをポチポチ押して、Lチカが動きました.オレンジ色のがLチカです.現状でEEPROM焼きはしてないみたいです.BF706にDLしてるだけですね.
project詰め合わせをこちらに置いときます.(zip)

Lチカは、timer割り込みでやりました.
割り込みハンドラの確保とtimer設定はここがキモのところです.
    eCTmrResult = adi_ctmr_Open (ADI_CTMR_DEV0, CTimerHandler, 0, &phCTimer);
    eCTmrResult = adi_ctmr_SetPeriod(phCTimer, 200000);
    eCTmrResult = adi_ctmr_SetScale(phCTimer, 255);
    eCTmrResult = adi_ctmr_Enable(phCTimer, true);
    eCTmrResult = adi_ctmr_EnableAutoReload(phCTimer, true);
    eCTmrResult = adi_ctmr_Activate(phCTimer, true);
200000と255という数字が分周回数です.255はpre-scalerでしょう.
Timerの仕様をまだ全く読んでないので、pre-scalerが何bitなのか、counterが何bitなのか、などの情報を知らずにテキトーな数字をぶっこんでるだけです.

Timer割り込みのcallbackはこれ.PORTC3をトグルしてるだけ.ハンドラから脱出するのにreturnだけなんですね.よく割り込みフラグを消してからreturnとかするけど、高速化のためにそうゆうのしないんでしょう.
static void CTimerHandler(void *pCBParam, uint32_t Event, void *pArg)
{
    adi_gpio_Toggle(ADI_GPIO_PORT_C, ADI_GPIO_PIN_3);
    return;
}

ポエム4
さすがにdatasheetを読まなくちゃいかんです.出たとこ勝負はこれぐらいにしとかなくちゃ.
I2CかSPIでAD/DAを接続してdataを流せさえすりゃ、あとの信号処理はポエマーのフィールドだからどうにかなると思うんですがねー
ただ、FIFOの生成とかどうするんだろ? まさかmalloc()一発ってこたぁないんじゃね?って思うんだけど.....

今宵はこれまでにしとうございます.

4へ   6へ

かしこ

16 件のコメント:

  1. 読者 お久しぶりです
    いかがお過ごしですか
    昨日は、秋葉原行ってないのでスレ違いませんでした
    ラズパイピコのLチカしました
    ピコの足のハンダツケですが足は、どこへいったのか?
    夕方どしゃ降りで帰還不能かと思いました

    返信削除
    返信
    1. お久しぶりです.コミケの仕込みで大忙しでしょうか?

      昨日は暑かった、暑かった...ぐぇぇ~
      picoのLチカおめでとうございます.
      picoってお値段どのくらいなんだろう?
      意外と安いですね.
      本家ラズパイは随分と値上がりしましたけれど.

      削除
  2. 秋葉原の近くまでいったから買ったほうが早い説。ラズパイのハンダツケする足。

    返信削除
  3. 読者 秋葉原でスレ違いのときにいただきたいとおもったら、秋葉原で買っても良いことに今さら気付いた
    ええ、どこかにあるんですよ、
    それから、温調ハンダゴテ6000円を毎度ながめて、儲かったら買おうと、、決意をかためる

    返信削除
    返信
    1. まぁ¥100ぐらいで買えますかねー

      業務上の利益でHAKKOの¥10000ぐらいする温調コテ買いました.贅沢品を購入です.いつも450℃で使ってますけど.

      削除
  4. 読者 隣にすめば、すぐにもらえそう->秋葉原に住めば、すぐに買える->八潮でもいいかも、千石と、マルツと、若松がないのが難点

    返信削除
    返信
    1. 東京モノレールの沿線で天王洲の次の駅の辺りにも八潮って土地があるんですよね.最初、秋月の通販センターって八潮にあるのか、こんど行ってみようかなどと思ってましたの.ほとんど草加の方向と気付くまでに幾年月.あほ~

      削除
  5. 読者 草加というか、つくば線、
    高速使うひとは、草加の先のイメージなのかな?ジャンクが、多かった、4年前?くらい

    返信削除
    返信
    1. 八潮はつくば線で一本ですか.それは秋月社員的には便利です.

      削除
  6. 読者 片道350円とか、やまのてせんや、地下鉄最大260円民には、高値の花

    返信削除
    返信
    1. 家から所沢の現場最寄り駅まで片道¥600かかってます.
      なんか異様に高価な気がしています.

      昨日起きた東海道線の架線柱衝突は、電車閉じ込め客が蒸し風呂で大変だったみたいですね.熱中症にご注意

      削除
  7. 読者 カフェの椅子は、長く座ると、尻がいたい、座布団いいものないかな?空気入れて潰すと小さくなるやつ。

    返信削除
    返信
    1. 痔の人がつかうドーナツ型座布団とか.あれ空気かな.
      「ぼく痔です」
      というアピール.

      削除
  8. 読者 痔ですアピールしながらドーナッツ座布団にしよう ドンキにでもいけばあるかしら?

    返信削除
    返信
    1. コミケットアピールで痔をアピール

      削除