2012/10/10
■ [ARM]LPC1114 (ARM Cortex-M0)始めました
トラ技10月号の付録は、ARM Cortex-M0コアのCPUと開発環境が入ったDVDでしたので久しぶりに買ってみました。
CPUはNXP社のLPC1114で、今時珍しくパッケージはDIP28、型番はPLC1114FN28/102のようです、スリムタイプだったらもっとよかったのに、残念。
特徴は以下のとおり
- 32bit CPUなのに秋月で1個 110円!
- シリアルワイヤデバッグ対応
- クロック: 50MHz max、12MHzのRCオッシレータ内蔵(精度1%)、 PLL内蔵
- メモリ: Flash 32KB ページ(256バイト)単位で、IAPで消去可、RAM 4KB
- タイマ: 32bit x 2、 16bit x 2(PWM)、 systick、 ウオッチドック
- 周辺: UART(RS485) x 1、I2C x 1、 SPI x 1、 ADC x 6、 GPIO x 22
- アクティブ電流 @3.3V 50MHz 5.8mA、 12MHz 1.4mA、 3MHz 600uA
- Flashメモリプログラミングファームウェア内蔵、シリアルポートから書込み可
詳しくは参考リンクのデータシートやユーザーズマニュアルを参照。
さて、ブレッドボードで簡単にLチカまでやってみたメモです、環境はWindows7/Linux Ubuntu12.04(64bit)。
Windowsでは開発環境はLPCXpresso IDE、プログラムの書き込みはFlashMagic。 まずは動くかどうかTeratermでチェックし、その後FlashMagicで書込みました。
- 秋月USB-シリアル変換モジュールで3.3V電源をUSBから供給し、RXDとTXDをクロス接続
- CPUのP0_1をGNDに落としリセットする、PCはWin7でTeraTermを使用、ボーレイトは自動判別なんでとりあえず9600bps 8bit1Stop、パリティなし、改行は<CR><LF>
- PCから?を送るとSynchronizedが返ってくるので、更にSynchronizedを送るとOKが返ってきてISPセッションが始まる
- ISPコマンドはFlashの読み書き(W,R)やイレース(E)、ブランクチェック(I)、指定アドレスからの実行(G)もある。 他にもPartID(J),BootCodeVersion(K),ReadUID(N)とか。 例えば、R 268435456 512 と打ち込むとアドレス0x1000 0000から512バイト読み出す、ただし UU-encodeされてる
- LPCXpress IDE を、付属のDVDからトラ技を見ながら入れる。 Eclipseじゃん、、 (汗
- 後は付属のDVDからFlashMagicをインストールして書き込む、取りあえずサンプルを入れてsw_led_testのhexファイルを書き込みました(MyARM_sample、フォルダはC:\workspace)
Linuxでは開発環境はLPCXpresso for Linux、書込みはlpc21ispを使用。
- LPCXpresso for Linuxからダウンロードして解凍・インストールする。その前に sudo apt-get install ia32-libs-multiarch:i386が必要だった
- pc21ispのソースコードをダウンロード。LPC1114FN28は定義が無いのでLPC1114FN28 with Open Source Toolsを参考に追加してコンパイル
- Windows側からサンプルソースをコピーするがビルドできないので、CMSISv2p00_LPC11xxはlinux側で追加し、main.dとcr_startup_lpc11.dのパスの\と/を書き換える
- 書込みは lpc21isp -wipe -verify filename /dev/ttyUSB0 115200 12000 接続チェックは -detectonly や -termonly
2009/11/11
■ [linux][h8]vine5.0 64bitで h8 gcc4クロス開発環境構築の構築
H8tiny用のgccクロス開発環境を構築する。 結構大変でいろいろトライしたけど、結果的には以下の組み合わせで、、
binutils,gccについては RingServerのGNUから、 newlibについては RedHatから、適当なバージョンをダウンロードするのが吉かと。
ちなみに、Vine5.0(64bit?)の場合 mpfrパッケージの関係で gcc-4.2.4より新しいのはコンパイルできませんでした(涙。 さらに 3.4.6とか 4.0.3 とかの古いのもダメでした(組み合わせた binutilsと newlibのバージョンが悪かったのかもしれませんが)
また以前はオブジェクトは COFF形式で使用してましたが、最近は ELFしかサポートされなくなってます。 VirtualBoxとかで古い Linux環境作って古い組み合わせで COFFな環境を作った方が楽だったかも、、
※ --prefix= や --with-headers= のパスは環境に合わせます。
ダウンロードしたファイルを解凍
$ tar zxf binutils-2.20.tar.bz2 $ tar zxf gcc-4.2.4.tar.bz2 $ tar zxf newlib-1.17.0.tar.gz
binutils
$ cd binutils-2.20 $ mkdir work $ cd work $ ../configure --prefix=/usr/local/h8 --target=h8300-elf --disable-nls $ make all $ su # make install # exit $ export PATH=/usr/local/h8/bin:$PATH $ h8300-elf-as -v GNU assembler version 2.20 (h8300-elf) using BFD version (GNU Binutils) 2.20 ^C ← [CTRL]+C 入力
gcc
$ cd gcc-4.2.4 $ mkdir work $ cd work $ su # ../configure --target=h8300-elf --prefix=/usr/local/h8 --enable-languages="c" -with-newlib \ --disable-libssp --disable-libgomp --disable-nls \ --disable-shared --disable-threads --enable-multilib \ --disable-__cxa_atexit --enable-target-optspace \ --enable-optimize --disable-win32-registry \ --with-headers=/home/hoge/gcc/newlib-1.17.0/newlib/libc/include # make # make install # exit $ h8300-elf-gcc -v Using built-in specs. Target: h8300-elf Configured with: ../configure --target=h8300-elf --prefix=/usr/local/h8 --enable-languages=c -with-newlib --disable-libssp --disable-libgomp --disable-nls --disable-shared --disable-threads --enable-multilib --disable-__cxa_atexit --enable-target-optspace --enable-optimize --disable-win32-registry --with-headers=/home/hoge/gcc/newlib-1.17.0/newlib/libc/include Thread model: single gcc version 4.2.4
newlib
$ cd newlib-1.17.0 $ mkdir work $ ../configure --prefix=/usr/local/h8 --target=h8300-elf $ make all $ su # make install $ exit
アセンブラソースの変更
- .h8300hn
Makefile の変更
- CC=h8300-elf-gcc
- OBJCOPY=h8300-elf-objcopy
- CFLAGS = -O2 -mh -mn
hoge.x (リンカスクリプト)の該当部分の変更と行追加。
- OUTPUT_FORMAT("elf32-h8300")
- OUTPUT_ARCH(h8300hn)
- SEARCH_DIR("/usr/local/h8/h8300-elf/lib/h8300h/"); /* newlib */
- SEARCH_DIR("/usr/local/h8/lib/gcc/h8300-elf/4.2.2/h8300h"); /* libgcc */
- *(.rodata*)
2008/08/01
■ [linux]vine4.2にsambaとswat、さらにinetを入れる
VineLinux4.2はそのままではwindowsマシンとファイル共有するためのsambaサーバーや、GUI設定ツールのsamba swat(とsawtを呼び出すinet)が入っていない、なのでパッケージをダウンロードしてインストールする(ついでにアップデートされた新しいパッケージに入れ換える)。
http://www.t.ring.gr.jp/archives/linux/Vine/Vine-4.2/updates/RPMS/ などから
- samba-3.0.23d-1.6vl4.i386.rpm
- samba-client-3.0.23d-1.6vl4.i386.rpm
- samba-common-3.0.23d-1.6vl4.i386.rpm
- samba-doc-3.0.23d-1.6vl4.i386.rpm
- samba-libsmbclient-3.0.23d-1.6vl4.i386.rpm
- samba-swat-3.0.23d-1.6vl4.i386.rpm
http://www.t.ring.gr.jp/archives/linux/Vine/VinePlus/4.2/i386/RPMS.plus/ などから
- inetd-0.17-0vl4.i386.rpm
をダウンロードし、rootになって
# apt-get install samba-3.0.23d-1.6vl4.i386.rpm \ samba-client-3.0.23d-1.6vl4.i386.rpm \ samba-common-3.0.23d-1.6vl4.i386.rpm samba-doc-3.0.23d-1.6vl4.i386.rpm \ samba-libsmbclient-3.0.23d-1.6vl4.i386.rpm \ samba-swat-3.0.23d-1.6vl4.i386.rpm \ inetd-0.17-0vl4.i386.rpm \
でインストール、次に
/etc/inetd.conf の一番最後の行の頭の # を消去
swat stream tcp nowait.400 root /usr/sbin/tcpd swat
/etc/hosts.allow に以下を追加(localhostだけアクセス許可)
swat: 127.0.0.1
そしてsmbpasswdで既存のユーザーをsambaにも追加して
# /etc/rc.d/init.d/inet start (又はrestart)
ブラウザから http://localhost:901 にアクセスし、samba swat から共有の設定をしてからサービスを開始する。