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)への書き込みに失敗…

KEE AVR JTAGICE mkIIとEVK1101の接続

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のインストール

AVR32 Studioは、AtmelのWEBからダウンロードできるし、インストールも特に問題はありませんが、コンパイラ・ツール類が含まれていません。別途avr32-gnu-toolchainをダウンロード&インストールしてください。 avr32-gnu-toolchainをインストールしていない…

Atmel ATEVK1101のデモ・ソフト

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円/ドルでした。

Microchip PIC24F関係の残骸

CPU性能、チップ・サイズ、機能、値段からMicrochip社のPIC24Fで開発しようと考え、ハードウェアとソフト(アセンブラなのでASM30)を勉強し始めた。 巷では「PICは大変、AVRの方が開発しやすい」という声があるが、8bitCPU系での話であり、16bitで設計し直さ…

REPEAT命令

PIC24FのREPEAT命令でバグ作ってしまった。リテラル指定した繰り返し回数が1つ多かったのだ。 この命令は、リテラル(即値)でもレジスタでも、指定ループ回数+1だけループする。 そのため直後のmov命令を3回繰り返すとき repeat #3 mov w1, [w0++]と書く…

PIC24Fにおける割込禁止/許可方法

PIC24Fにおける割込禁止/許可方法を挙げておく。 方法 具体的な操作 影響範囲 DISI命令 DISI命令を実行。禁止クロック数を定数で指定するため、見積もれないと使いにくい。 レベル6以下の全割込 割込有効化制御レジスタ IECレジスタの該当ビットをクリア。 …

PIC24FのCPSGT命令とCPSLT命令 こんな命令セット誰が考えた?!(その2)

その1では、CPSGT命令とCPSLT命令について「スキップ条件ではなく実行条件で書かせろ」的な話をした。次命令のスキップ条件と実行条件は論理的に反転しているので、マクロで疑似命令を作成すれば解決できそうにも思える。しかしC言語等の高級言語と異なり、…

PIC24FのCPSGT命令とCPSLT命令 こんな命令セット誰が考えた?!(その1)

PIC24FのCompare&Skip系(CPS〜)命令の中で、CPSGT命令は「Wb-Wn, Skip if Wb > Wn」(レジスタWbからWnを引くことにより、もしWb>Wnが成り立つなら次の命令をスキップ)。一方、CPSLT命令は「Wb-Wn, Skip if Wb レジスタWbからWnを引くことにより、もしWb しか…

C30コンパイラのアセンブル出力

PIC24F,H,dsPIC用CコンパイラC30でコンパイルすると通常オブジェクトファイル(.o)が出力される。このコンパイラの実体はgccなので、中間結果のアセンブラ出力も可能である。 ところがMPLABのインタフェースにはアセンブル出力指示が出来ないので、どうやれば…

データ・コンテキスト内の実行シンボル(その2)

昨日の続き。 「MPLAB ASM30/LINK30 and Utilities User’s Guide」の「5.8 USING EXECUTABLE SYMBOLS IN A DATA CONTEXT」に該当する話が書いてある。一度目を通したはずだが、理解せずに忘れてしまったようだ。 要は、プログラム・アドレスは24bitで、デー…

データ・コンテキスト内の実行シンボル(その1)

私の言う「データ・コンテキスト内の実行シンボル」とは .section .str_area, code TEXT1: .string "Hello world!\n" .text .global _main _main: mov #TEXT1, w1 TBLRDL.b [w1], w0における「TEXT1」のこと。ちなみに上の記述はエラーになる。 ???.s: Assem…

ASM30におけるテーブル・メンバの増減処理

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…