2009-01-01から1年間の記事一覧
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…
下らない思い違いで半日つぶしてしまった。 A/D Converterの制御レジスタにADCON3というのがあり、ADCON3つまりSAMC4:SAMC0でTADのサイクル時間を設定できる(と思いこんでしまった)。しかしTADはA/D変換のクロック周期で、12周期でA/D変換が完了する。この…
"PIC24F Family Reference Manual", 分冊"Section 17. 10-Bit A/D Converter", Page 17-11(PDF page 11), 「Equation 17-1: A/D Conversion Clock Period」。 最下段の注意書きで「TCY = FOSC/2」は誤り。 周期TCYと周波数FOSCが等号を挟んで並ぶはずがない…
オリジナルはPIC24FJ64GA004 Data SheetのTABLE 25-1と25-2です。違いは以下の通り。 SYMBOLへのリンクがある。 オペコードに{.B}と{W}を追加している。 並び順をdsPIC30F/33F Programmer’s Reference Manual掲載順に変更している。 "dsPIC30F/33F Programme…
PIC24Fには32bitタイマそのものは無いが、16bitタイマ2つを連携して32bit動作させることが可能である。 リファレンスマニュアルによると、タイマにはタイプA、タイプB、タイプCの3種類があり、タイプBとCを組み合わせる。タイプB(クロック同期回路有り)がL…
PIC24FJ64GA002を使用して、PIC24Fの機能確認用テスト・ボードを作成している。正確には製作途中だが、ユニバーサル基板に半田付けしていることもあり、すべて実装する前に少しずつ動作確認している。機能は、 3端子レギュレータで電源電圧調整(BOR(Brown O…