2009-11-01から1ヶ月間の記事一覧

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関連のまとめ

(随時追記) プリプロセッサ avr32-gccのAVR32関連マクロ AVR32 Studio Standalone版アプリケーション構成ファイル AVR32周辺モジュール AVR32UC3BのHMATRIX(まとめ) EAGLE チップ部品サイズの対応表

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. リ…

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

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

AVR32 StudioのStandalone版アプリケーション構成ファイル

AVR32 Studioのプロジェクト作成で「AVR32 C Project from template」からStandalone版のアプリケーションを指定したとき、作成される各種ファイルや設定等について記事をまとめた。 対象ボードはEVK1101で、搭載チップはAT32UC3B0256。 このページはまとめ…

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…

AVR32のINTC(Interrupt Controller)

ここではAVR32の例としてAT32UC3B0256で説明する。 ドキュメント「AT32UC3B Series Preliminary」(現在はRev.G)を参照のこと。 「15.2 Block Diagram」を見ると判るように、大雑把に3段構成になっている(NMIを除く)。 1段目で各IRQ信号(IRR0〜nレジスタで…

AVR32 C Project from templateのcrt0.x

AVR32 StudioでAVR32 C Project from templateからStandalone版のアプリケーションを指定すると、アセンブラ・ファイルsrc/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.xが作成される。trampoline.xのリセット・ハンドラ_trampoline→program_start→こ…

AVR32 C Project from templateのtrampoline.x

AVR32 StudioでAVR32 C Project from templateからスタンドアローン版のアプリケーションを指定すると、アセンブラ・ファイルsrc/SOFTWARE_FRAMEWORK/ASM/trampoline.xが作成される。他にもソース・ファイルが作成されるが、この「トランポリン」というファ…

仮想オペコード

AVR32 StudioについてくるGAS(Gnu ASM)には仮想オペコードというのがあり、これはAVR32 Architecture Manualに載っていない。それでいてプロジェクトのテンプレートに含まれているので、ソースコードを追っていると面食らってしまう。 仮想オペコードの情報…

KEE AVR JTAGICE mkIIによるデバッグ動作確認

KEE AVR JTAGICE mkII(以下JTAGICE)とEVK1101評価ボード、そしてAVR32 Studioで本当にデバッグできるのか確認してみる。 前回の作業で接続できることは確認済み。AVR32 StudioはEVK1101用デモ・ソフトを例題プロジェクトとして持っているが、これはパソコン…

AVR32 StudioでFlushROM書き込みロックが解除されない

AVR32 StudioでEVK1101とKEE AVR JTAGICE mkII(以下JTAGICE)の組み合わせデバッグが出来るか確認中。 アプリケーションをAVR32 StudioからJTAGICE経由でEVK1101へ書き込もうとすると、「LOCKE error」が発生してFlushROM領域(0x80000000)への書き込みに失敗…