AVR32
とっても久しぶりにAVRのプログラムを書こうとしたら開発環境がAVR StudioからAtmel Studioに変わっていました。AVR32 Studioと統合したみたいですね。浦島太郎状態です。 最新版のAtmel Studio 6.1をダウンロードしましたが、KEE AVR JTAGICE mkIIへ接続で…
前回の続き。 ドキュメント「AT32UC3B Series Preliminary」の「19. Peripheral DMA Controller」部分。 19.4.8 Interrupts IER(Interrupt Enable Register)に書くことで割込を有効にすることができ、IDR(Interrupt Disable Register)に書くことで割込を無効…
今回はAT32UC3BのPDCA(Peripheral DMA Controller)を読んでみる。 ドキュメント「AT32UC3B Series Preliminary」の「19. Peripheral DMA Controller」部分。 19.1 Features USARTとSSC、SPIのような周辺モジュールとの間で転送を起動する。 チャンネル当たり…
AVR32UC3BのHSB Bus Matrix(HMATRIX)(Rev: 2.3.0.1)についてまとめる。以下も参照のこと。 AVR32UC3BのHMATRIX(読んでみただけ) AVR32UC3BのHMATRIX(読んでみただけ2) マスターのメモリ・マッピングについてはよく解らない。 「9.2 Physical Memory Map」で…
HMATRIX関係の話は他の章にも分散しているので、そちらも読んでみる。 9.3 Bus Matrix Connections 未使用エリアへのアクセスはその様なアクセスを要求したマスターにエラーを返す。 バス・マトリックスはいくつかのマスターとスレーブを持つ。各マスターは…
簡単なようでややこしい感じのするHMATRIX(HSB Bus Matrix)。理解していなくても動作しそうであるが、後でバグの原因になると嫌なので、やはり読んでおくことにした。 対象MCUはいつも通りAT32UC3B0256である。ドキュメントは「AT32UC3B Series Preliminary …
「AVR32 UC3B Schematic Checklist」(ドキュメント番号AVR32715)というドキュメントがあって、AVR32UC3B周辺の回路が要求通り正しく設計できているかチェックできる。今回は回路図を作った後にこのドキュメントを発見してしまったが、回路設計前に読んでおく…
AVR32UC3Bシリーズの製品AT32UC3B0〜は64pinパッケージなのに対し、AT32UC3B1〜は48pinパッケージである。ピンが減らされている分、モジュールの数も減らされている。 それ自体は至極まっとうなことであるが、どのモジュールが削られているのか全く説明がな…
最近徐々にマニュアルの周辺モジュールを読み始めているのだが、やはりAVR32って割込が遅いようだ。割込や例外が発生して、ハンドラ先頭命令が実行されるのは早いのだが、ハンドラ本体処理に至までが長いのだ。ソフトウェアにより割込グループと割込ラインを…
私の使っているEAGLE(4.15)の話(最新バージョンは持っていないので知らない)。 CADツールEAGLEの製品付属ライブラリには当然AVR32が含まれていない。こういうときは自分でライブラリ(シンボル、パッケージ、デバイス)を作る必要がある。シンボルが回路図用、…
AVR32 Studio機能でプロジェクトを新規作成すると、ソースファイルを生成してくれるが、どうもこのファイルが古いということに気が付いた。 ソースファイルの元は、AVR32 UC3 Software Frameworkのはずだが、最新版Ver 1.5.0ではなく1.4.0のものが利用されて…
割込処理(exception.xの_int0〜_int3とintc.cの_get_interrupt_handler)を見てスピードの点で不満を持ち、もっと高速化できないものか考えてみた。実際に問題があって高速化するのではないが、「割込ルーチンは出来るだけ短く(早く)」が基本なので。 例とし…
AVR32 Studioから既存プロジェクトに新規作成したリンカ・スクリプトを追加する。OSが存在する場合、まずリンカ・スクリプトでリンカを操作することはないので仕方がないのかもしれないが、組み込みだとリンカ・スクリプト修正が必要となることが多い。 ファ…
以前、AT32UC3B0256における定義済みマクロを紹介した。これらは-marhオプションや-mpartオプションにより定義が変わったり、定義されなくなったりする。 今回はgccのソースからAVR32関係のマクロ名を探してみた。当然だがこれらはコンパイル・オプションに…
AVR32のMPUドライバの例題を使ってみる(その1)からの続き。 まずはMPUドライバのIntroductionを読んでみる。形式的な内容なので「Example operating mode:」以降から。 この例題は、MPUARIエントリと、MPUARDエントリの数を表示することにより開始する。 メ…
今頃気が付いたが、現在ターゲットにしているAT32UC3B0256はSRAMがアドレス0から割り付けられている。つまり変更可能な変数を定義したとき、この変数がSRAM領域先頭に割り付けられると、変数のポインタが0となる。 一方NULLポインタは通常0であり、実際avr32…
「Memory Protection Unit」のことであって、世間一般の「Micro Proccessing Unit」のことではない(私は初め間違えた)。MPUは、MMU(Memory Management Unit」の簡略版の位置付けで、仮想記憶まではサポートしていない。またMMU同様、CPUに近いモジュールのた…
リンカ・スクリプトまで追いかけて、スタック・サイズを規定するシンボルが_stack_sizeであることまでは判ったが、そのシンボル定義が見つからない。 リンク・オプションでもないらしい。じゃあリンカそのものに埋め込まれているのか? という話の続きである…
AT32UC3B0256のスタンドアローン版アプリケーションで暗黙的に使用されるリンカ・スクリプトを読んでみる。リンカ・スクリプトの格納位置についてはこちらを。 今回読むリンカ・スクリプトはavr32elf_uc3b0256.xだ。 参考URL GNU リンカ LD の使い方 − 3. リ…
以前「スタックの指定はどこにあるのだろう?」みたいなことを書いたが、セクションの配置はリンクのお仕事なので、オプションに指定がなければ、リンカ・スクリプトにあるだろうとは察しがついていた。 今まではソースコード中心に見てきたので放っておくこ…
libnewlib_addons-at32ucr1-speed_opt.a内のオブジェクトファイルとシンボルの一覧です。descriptionは該当APIを使うことがあったら書き入れていく。あまり使うことが無いような気もするけど。 object filesymboldescription cpu.oset_cpu_hz get_cpu_hz ude…
AVR32 StudioでAVR32 C Project from templateからStandalone版のアプリケーションを指定し、ビルドするとリンクで以下のようなコマンドが実行される(オブジェクトファイルの指定は削除)。 デバイスはAT32UC3B0256、プロジェクト名「SimpleTest」。 avr32-gc…
AVR32 StudioでAVR32 C Project from templateからStandalone版のアプリケーションを指定すると、以下のライブラリがソースに追加される。 src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr1-speed_opt.a ロード・モジュール(.elf…
AVR32-gcc限定の話ではないが、CPU製品(target)毎の違いを指定するオプションとして、-mcpu=、-march=、-mpart=がある(AVR32-gccだとわざわざ-mcpu=を指定する必要はない)。 これらのオプションと、その指定により別途指定可能となるオプションについてヘル…
AVR32 StudioでAVR32 C Project from templateからStandalone版のアプリケーションを指定すると、C言語ファイルsrc/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.cが作成される。 INTCについてはこちらを。 お勉強としてintc.cを眺めてみる。行番号は私が付加した…
AVR32 StudioでAVR32 C Project from templateからStandalone版のアプリケーションを指定すると、アセンブラ・ファイルsrc/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.xが作成される。 お勉強としてexception.xを眺めてみる。行番号は私が付加したもので、…
Windows環境でgccの定義済みマクロ一覧を取得する方法。 コマンドプロンプトから以下のコマンドを実行する。 "%AVR32_HOME%\bin\avr32-gcc" -dM -E -xc - ファイルに出力したいなら、「> 出力ファイル・パス」を追加すればよい。 デバイス依存の値が定義され…
ここではAVR32の例としてAT32UC3B0256を対象に、ドキュメント「AT32UC3B Series Preliminary」(現在はRev.G)を読んでいく。 外部割込端子(NMIやEXTINT)機能がEICの担当で、内蔵周辺モジュール全般をINTC(Interrupt Controller)が担当している。EICも周辺モジ…
AVR32のINTC(Interrupt Controller)でドキュメントに 割込要求をクリアする奨励手順は、周辺レジスタを制御するstore命令の後に、同一レジスタからのダミーload命令を続ける。これはパイプライン・ストールを引き起こし、割込要求がクリアされる前に割込マス…
AVR32のINTC(Interrupt Controller)の続き。固定ハンドラ・アドレスやEVBAで指し示す例外ハンドラ・テーブルを除き、その他の割込はINTCのIRPレジスタに格納されたAUTOVECTORから計算される。AUTOVECTORから割込ハンドラへのアドレスは EVBA | event_handler…