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…
ここではAVR32の例としてAT32UC3B0256で説明する。 ドキュメント「AT32UC3B Series Preliminary」(現在はRev.G)を参照のこと。 「15.2 Block Diagram」を見ると判るように、大雑把に3段構成になっている(NMIを除く)。 1段目で各IRQ信号(IRR0〜nレジスタで…
AVR32 StudioでAVR32 C Project from templateからStandalone版のアプリケーションを指定すると、アセンブラ・ファイルsrc/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.xが作成される。trampoline.xのリセット・ハンドラ_trampoline→program_start→こ…
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(以下JTAGICE)とEVK1101評価ボード、そしてAVR32 Studioで本当にデバッグできるのか確認してみる。 前回の作業で接続できることは確認済み。AVR32 StudioはEVK1101用デモ・ソフトを例題プロジェクトとして持っているが、これはパソコン…
AVR32 StudioでEVK1101とKEE AVR JTAGICE mkII(以下JTAGICE)の組み合わせデバッグが出来るか確認中。 アプリケーションをAVR32 StudioからJTAGICE経由でEVK1101へ書き込もうとすると、「LOCKE error」が発生してFlushROM領域(0x80000000)への書き込みに失敗…
KEE AVR JTAGICE mkII(以下JTAGICE)に添付されてきたCDの中身は AVR Studio Firmware file Quick user guide(PDF) readme.txt のみ。しかもガイドが8bit AVR向けのみ。ファームウェアも拡張子が.datですが、C:\Program Files\Atmel以下を検索しても.datとい…
AVR32 Studioは、AtmelのWEBからダウンロードできるし、インストールも特に問題はありませんが、コンパイラ・ツール類が含まれていません。別途avr32-gnu-toolchainをダウンロード&インストールしてください。 avr32-gnu-toolchainをインストールしていない…
AtmelのEVK1101(Evaluation kit for AT32UC3B)を購入したので、まずは動作確認です。箱の中に「AVR32 EVK1101 Getting Started Guide」という紙が入っていて、これを見ると、添付のデモ・ソフトで簡単に動作確認ができるらしい。 当然かも知れないけど、あり…
AVR32の開発に必要な機材を購入しました。 Atmel ATEVK1101 KEE AVR JTAGICE mkII 為替レートが円高のタイミング(88円/ドル)を見計らって、ATEVK1101が\7,883-、AVR JTAGICE mkIIが\11,455-でした。KEEはPaypal経由なので若干高めの90.59円/ドルでした。
CPU性能、チップ・サイズ、機能、値段からMicrochip社のPIC24Fで開発しようと考え、ハードウェアとソフト(アセンブラなのでASM30)を勉強し始めた。 巷では「PICは大変、AVRの方が開発しやすい」という声があるが、8bitCPU系での話であり、16bitで設計し直さ…
PIC24FのREPEAT命令でバグ作ってしまった。リテラル指定した繰り返し回数が1つ多かったのだ。 この命令は、リテラル(即値)でもレジスタでも、指定ループ回数+1だけループする。 そのため直後のmov命令を3回繰り返すとき repeat #3 mov w1, [w0++]と書く…
PIC24Fにおける割込禁止/許可方法を挙げておく。 方法 具体的な操作 影響範囲 DISI命令 DISI命令を実行。禁止クロック数を定数で指定するため、見積もれないと使いにくい。 レベル6以下の全割込 割込有効化制御レジスタ IECレジスタの該当ビットをクリア。 …
その1では、CPSGT命令とCPSLT命令について「スキップ条件ではなく実行条件で書かせろ」的な話をした。次命令のスキップ条件と実行条件は論理的に反転しているので、マクロで疑似命令を作成すれば解決できそうにも思える。しかしC言語等の高級言語と異なり、…
PIC24FのCompare&Skip系(CPS〜)命令の中で、CPSGT命令は「Wb-Wn, Skip if Wb > Wn」(レジスタWbからWnを引くことにより、もしWb>Wnが成り立つなら次の命令をスキップ)。一方、CPSLT命令は「Wb-Wn, Skip if Wb レジスタWbからWnを引くことにより、もしWb しか…
PIC24F,H,dsPIC用CコンパイラC30でコンパイルすると通常オブジェクトファイル(.o)が出力される。このコンパイラの実体はgccなので、中間結果のアセンブラ出力も可能である。 ところがMPLABのインタフェースにはアセンブル出力指示が出来ないので、どうやれば…
昨日の続き。 「MPLAB ASM30/LINK30 and Utilities User’s Guide」の「5.8 USING EXECUTABLE SYMBOLS IN A DATA CONTEXT」に該当する話が書いてある。一度目を通したはずだが、理解せずに忘れてしまったようだ。 要は、プログラム・アドレスは24bitで、デー…
私の言う「データ・コンテキスト内の実行シンボル」とは .section .str_area, code TEXT1: .string "Hello world!\n" .text .global _main _main: mov #TEXT1, w1 TBLRDL.b [w1], w0における「TEXT1」のこと。ちなみに上の記述はエラーになる。 ???.s: Assem…
C言語でテーブル・メンバをインクリメントするとき tbl->memb ++;これをASM30で直接コードを記述すると ; tbl = w0 mov [w0 + MEMB_OFFSET], w1 inc w1, w1 mov w1, [w0 + MEMB_OFFSET]となるが、以下のように記述すると効率がよい。 ; tbl = w0 add w0, #ME…
私が書いた日記内で、残しておきたい記事をまとめたものです。 PIC24F命令一覧表 MPLAB Tips C30コンパイラのアセンブル出力
このアセンブラ(ASM30)のオフセット記述はとても変だ。 例えばC言語的に書くと func(short w1, short* w0) { w0[5] = w1; }ということをやりたいとき mov w1, [w0 + 5]のように記述すると、以下のようにエラーである。 Error: Word operations expect even o…