NGW100での割り込みですが、いろいろいじっててなんとなく2.1以降のtoolchainの対応がわかったので必要事項をメモ書き。
- interrupt系の関数はフレームワークのINTCに移動 (includeはFrameworkのintc.hをsys/interrupt.hの代わりに設定)
- set_interrupt_baseは不要になった模様(フレームワークのcrt0.xで設定)
- Enable_global_interrupt();を明示実行する
- INTC_register_interrupt();は引数変更。割り込み種別とレベルのみ指定関数内で規定値設定)
前に上げたサンプルの修正方法としては、まず最初にSTK1000のフレームワークでINTCのみを有効にして作ったあとに、サンプルのソースコードを加えます。そのあとに、以前にあったtrampoline.xはなくなって、crt0.xが外に出されてそこにtrampoline.xと同じコードが入っていることでブートからジャンプするようになっていますから (_startがcrt0.xで定義されることで、ブートコードと同じ扱いになる)、これをコメントアウトしておきます。そうするとboot.xが機能するようになります。これで、boot.x→crt0.x→main()の順に動きます。
というわけで、GNU toolchain 2.1以降用のサンプルを提示。前のサンプルで.rodataがdata扱いになってたのになぜか動いてたのでw、Optimizationで修正してます(put r/odata ~のとこ)。
しかし、いきなり大幅に変えられると右往左往するので勘弁してほしい(;´Д`)
<補足>
あとで気がつきましたが、Framework設定の最終画面でnewlibを使うかどうかの設定があって、これをnone以外にすると、既存の interrupt関連はそれなりに流用できるっぽいです。基本的にNGWでもSTK1000のFrameworkをベースにして作れって感じみたい。 というわけで、AP7xxxは見捨てられてるかも発言は撤回w
まぁ、NGWがサポートにないのはEvaluation BoardじゃなくてReference Boardなんで、評価用じゃないからサポートしないよ、というのがATMELの立場なのかな。ただ、ヘッダのdefineをみるとNGW100のラベルで切ってあったりするんですけどね。なんにしても基本はFrameworkから作った方が間違 いないかも。
しかし、toolchainのフォルダを漁ったけど、AT32UC3用のライブラリをそのまま使ってるだけなのね。ただ、スタートアップはデフォルトのcrt0.xを使われてしまうので、それなりに修正は必要です。