AVR32

Atmel Studio(6.1)からKEE AVR JTAGICE mkIIへ接続できない

とっても久しぶりにAVRのプログラムを書こうとしたら開発環境がAVR StudioからAtmel Studioに変わっていました。AVR32 Studioと統合したみたいですね。浦島太郎状態です。 最新版のAtmel Studio 6.1をダウンロードしましたが、KEE AVR JTAGICE mkIIへ接続で…

AT32UC3BのPDCA(読んでみただけ2)

前回の続き。 ドキュメント「AT32UC3B Series Preliminary」の「19. Peripheral DMA Controller」部分。 19.4.8 Interrupts IER(Interrupt Enable Register)に書くことで割込を有効にすることができ、IDR(Interrupt Disable Register)に書くことで割込を無効…

AT32UC3BのPDCA(読んでみただけ)

今回はAT32UC3BのPDCA(Peripheral DMA Controller)を読んでみる。 ドキュメント「AT32UC3B Series Preliminary」の「19. Peripheral DMA Controller」部分。 19.1 Features USARTとSSC、SPIのような周辺モジュールとの間で転送を起動する。 チャンネル当たり…

AVR32UC3BのHMATRIX(まとめ)

AVR32UC3BのHSB Bus Matrix(HMATRIX)(Rev: 2.3.0.1)についてまとめる。以下も参照のこと。 AVR32UC3BのHMATRIX(読んでみただけ) AVR32UC3BのHMATRIX(読んでみただけ2) マスターのメモリ・マッピングについてはよく解らない。 「9.2 Physical Memory Map」で…

AVR32UC3BのHMATRIX(読んでみただけ2)

HMATRIX関係の話は他の章にも分散しているので、そちらも読んでみる。 9.3 Bus Matrix Connections 未使用エリアへのアクセスはその様なアクセスを要求したマスターにエラーを返す。 バス・マトリックスはいくつかのマスターとスレーブを持つ。各マスターは…

AVR32UC3BのHMATRIX(読んでみただけ)

簡単なようでややこしい感じのするHMATRIX(HSB Bus Matrix)。理解していなくても動作しそうであるが、後でバグの原因になると嫌なので、やはり読んでおくことにした。 対象MCUはいつも通りAT32UC3B0256である。ドキュメントは「AT32UC3B Series Preliminary …

回路図チェックリスト

「AVR32 UC3B Schematic Checklist」(ドキュメント番号AVR32715)というドキュメントがあって、AVR32UC3B周辺の回路が要求通り正しく設計できているかチェックできる。今回は回路図を作った後にこのドキュメントを発見してしまったが、回路設計前に読んでおく…

AT32UC3B1〜で減らされたUSARTモジュール

AVR32UC3Bシリーズの製品AT32UC3B0〜は64pinパッケージなのに対し、AT32UC3B1〜は48pinパッケージである。ピンが減らされている分、モジュールの数も減らされている。 それ自体は至極まっとうなことであるが、どのモジュールが削られているのか全く説明がな…

AVR32の割込って...遅い?

最近徐々にマニュアルの周辺モジュールを読み始めているのだが、やはりAVR32って割込が遅いようだ。割込や例外が発生して、ハンドラ先頭命令が実行されるのは早いのだが、ハンドラ本体処理に至までが長いのだ。ソフトウェアにより割込グループと割込ラインを…

EAGLEにおけるAT32UC3Bのパッケージ for OLIMEX

私の使っているEAGLE(4.15)の話(最新バージョンは持っていないので知らない)。 CADツールEAGLEの製品付属ライブラリには当然AVR32が含まれていない。こういうときは自分でライブラリ(シンボル、パッケージ、デバイス)を作る必要がある。シンボルが回路図用、…

AVR32 Studioがアップデート(2.3)していた

AVR32 Studio機能でプロジェクトを新規作成すると、ソースファイルを生成してくれるが、どうもこのファイルが古いということに気が付いた。 ソースファイルの元は、AVR32 UC3 Software Frameworkのはずだが、最新版Ver 1.5.0ではなく1.4.0のものが利用されて…

割込処理の高速化(案)

割込処理(exception.xの_int0〜_int3とintc.cの_get_interrupt_handler)を見てスピードの点で不満を持ち、もっと高速化できないものか考えてみた。実際に問題があって高速化するのではないが、「割込ルーチンは出来るだけ短く(早く)」が基本なので。 例とし…

AVR32 Studioへリンカ・スクリプトを追加

AVR32 Studioから既存プロジェクトに新規作成したリンカ・スクリプトを追加する。OSが存在する場合、まずリンカ・スクリプトでリンカを操作することはないので仕方がないのかもしれないが、組み込みだとリンカ・スクリプト修正が必要となることが多い。 ファ…

avr32-gccのAVR32関連マクロ

以前、AT32UC3B0256における定義済みマクロを紹介した。これらは-marhオプションや-mpartオプションにより定義が変わったり、定義されなくなったりする。 今回はgccのソースからAVR32関係のマクロ名を探してみた。当然だがこれらはコンパイル・オプションに…

AVR32のMPUドライバの例題を使ってみる(その2)

AVR32のMPUドライバの例題を使ってみる(その1)からの続き。 まずはMPUドライバのIntroductionを読んでみる。形式的な内容なので「Example operating mode:」以降から。 この例題は、MPUARIエントリと、MPUARDエントリの数を表示することにより開始する。 メ…

AVR32のSRAM開始アドレス&NULLポインタ問題

今頃気が付いたが、現在ターゲットにしているAT32UC3B0256はSRAMがアドレス0から割り付けられている。つまり変更可能な変数を定義したとき、この変数がSRAM領域先頭に割り付けられると、変数のポインタが0となる。 一方NULLポインタは通常0であり、実際avr32…

AVR32のMPUドライバの例題を使ってみる(その1)

「Memory Protection Unit」のことであって、世間一般の「Micro Proccessing Unit」のことではない(私は初め間違えた)。MPUは、MMU(Memory Management Unit」の簡略版の位置付けで、仮想記憶まではサポートしていない。またMMU同様、CPUに近いモジュールのた…

スタック・サイズのデフォルト値

リンカ・スクリプトまで追いかけて、スタック・サイズを規定するシンボルが_stack_sizeであることまでは判ったが、そのシンボル定義が見つからない。 リンク・オプションでもないらしい。じゃあリンカそのものに埋め込まれているのか? という話の続きである…

AT32UC3B0256のデフォルト・リンカ・スクリプト

AT32UC3B0256のスタンドアローン版アプリケーションで暗黙的に使用されるリンカ・スクリプトを読んでみる。リンカ・スクリプトの格納位置についてはこちらを。 今回読むリンカ・スクリプトはavr32elf_uc3b0256.xだ。 参考URL GNU リンカ LD の使い方 − 3. リ…

デフォルトのリンカ・スクリプトの場所

以前「スタックの指定はどこにあるのだろう?」みたいなことを書いたが、セクションの配置はリンクのお仕事なので、オプションに指定がなければ、リンカ・スクリプトにあるだろうとは察しがついていた。 今まではソースコード中心に見てきたので放っておくこ…

newlib内のオブジェクトファイルとシンボルの一覧

libnewlib_addons-at32ucr1-speed_opt.a内のオブジェクトファイルとシンボルの一覧です。descriptionは該当APIを使うことがあったら書き入れていく。あまり使うことが無いような気もするけど。 object filesymboldescription cpu.oset_cpu_hz get_cpu_hz ude…

AVR32 C Project from templateのリンク・オプション

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のtargetヘルプ

AVR32-gcc限定の話ではないが、CPU製品(target)毎の違いを指定するオプションとして、-mcpu=、-march=、-mpart=がある(AVR32-gccだとわざわざ-mcpu=を指定する必要はない)。 これらのオプションと、その指定により別途指定可能となるオプションについてヘル…

AVR32 C Project from templateのintc.c

AVR32 StudioでAVR32 C Project from templateからStandalone版のアプリケーションを指定すると、C言語ファイルsrc/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.cが作成される。 INTCについてはこちらを。 お勉強としてintc.cを眺めてみる。行番号は私が付加した…

AVR32 C Project from templateのexception.x

AVR32 StudioでAVR32 C Project from templateからStandalone版のアプリケーションを指定すると、アセンブラ・ファイルsrc/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.xが作成される。 お勉強としてexception.xを眺めてみる。行番号は私が付加したもので、…

avr32-gccの定義済みマクロ

Windows環境でgccの定義済みマクロ一覧を取得する方法。 コマンドプロンプトから以下のコマンドを実行する。 "%AVR32_HOME%\bin\avr32-gcc" -dM -E -xc - ファイルに出力したいなら、「> 出力ファイル・パス」を追加すればよい。 デバイス依存の値が定義され…

AVR32のEIC(External Interrupts Controller)

ここではAVR32の例としてAT32UC3B0256を対象に、ドキュメント「AT32UC3B Series Preliminary」(現在はRev.G)を読んでいく。 外部割込端子(NMIやEXTINT)機能がEICの担当で、内蔵周辺モジュール全般をINTC(Interrupt Controller)が担当している。EICも周辺モジ…

割込要求をクリアする奨励手順

AVR32のINTC(Interrupt Controller)でドキュメントに 割込要求をクリアする奨励手順は、周辺レジスタを制御するstore命令の後に、同一レジスタからのダミーload命令を続ける。これはパイプライン・ストールを引き起こし、割込要求がクリアされる前に割込マス…

AUTOVECTORの割込ハンドラ・アドレス

AVR32のINTC(Interrupt Controller)の続き。固定ハンドラ・アドレスやEVBAで指し示す例外ハンドラ・テーブルを除き、その他の割込はINTCのIRPレジスタに格納されたAUTOVECTORから計算される。AUTOVECTORから割込ハンドラへのアドレスは EVBA | event_handler…