2014/08/17からのアクセス回数 6259
残念ながら、SAM7-LA2ボードのgccでのコンパイル環境が整えられなかったので、FM3でU-Boot, uCLinuxの構築を 試すことにしました。
CMSISをダウンロードします。
ねむいさんの例題おきばから「MB9BF618T(FRK-FM3-GARBAGEBOARD Compatible Circuit)」のLED-Blink & UARTをダウンロードしました。
さすがねむいさんの例題は、きれいな構成になっています。スタートアップ関数は、CMSISを使っています。
私の環境に合わせるために、修正したのは以下の変数です。
# Toolchain prefix (i.e arm-none-eabi -> arm-none-eabi-gcc.exe) TCHAIN = arm-none-eabi # OpenOCD prefix OCD = /usr/local/bin/openocd # Select SWD Writer WRITER = VERSALOON # Development Tools based on GNU Compiler Collection DEVTOOL = SOURCERY REMOVAL = rm # Check BuildTools TOOLDIR = ~/local/arm/CodeSourcery/ # Set UNIX-Like tools (Coreutils) MAKEDIR = /opt/local/bin/ # Set Flasher and Debugger OCDIR = /usr/local/share/openocd/scripts/ WSHELL = sh MSGECHO = echo GDBDIR = $(TOOLDIR)/arm/bin INSIGHT =
fm3.cfgは、DVDとねむいさんの両方を見比べながら、以下の様にしてlib/openocdディレクトリに入れました。
openocd.cfgは、以下の様にしました。
# OpenOCD fm3.cfg with Flash proc set CHIPNAME mb9bfxx6 set CPUTAPID 0x4ba00477 source [find interface/vsllink.cfg] source [find target/fm3.cfg] proc flash_program {ELF_FILENAME} { halt flash probe 0 flash write_image erase $ELF_FILENAME #flash write_bank 0 $ELF_FILENAME 0x0 echo "flash program complete. reset and run" resume exit } init halt
私のVersaloon対応openocdではfm3のドライバーがないので、以下の手順でfm3のドライバーを追加しました。
extern struct flash_driver fm3_flash;
flash_driversに以下を追加
static struct flash_driver *flash_drivers[] = { の最後のNULLの前に以下を追加 &fm3_flash, NULL, };
am__objects_1 = aduc702x.lo at91sam3.lo at91sam7.lo avrf.lo cfi.lo \ ecos.lo em357.lo faux.lo lpc2000.lo lpc288x.lo lpc2900.lo \ non_cfi.lo ocl.lo pic32mx.lo stmsmi.lo stellaris.lo stm32x.lo \ stm32f2xxx.lo str7x.lo str9x.lo str9xpec.lo tms470.lo \ virtual.lo fm3.loCFLAGSの-Werrorを外す
CFLAGS = -g -O2 -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls
ねむいさんのmain.cを以下の様に修正して、LEDを点滅するだけのシンプルなもので動作確認をしました。
main.c
/********************************************************************************/ /*! @filemain.c @author Nemui Trinomius (http://nemuisan.blog.bai.ne.jp) @version W.I.P @date 2013.07.10 @brief KickStart program For MB9BF618T JunkBoard!@n @section HISTORY 201.07.10Vx.xx See Whatnew.txt. @section LICENSE BSD License. See Copyright.txt */ /********************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "hw_config.h" /* Defines -------------------------------------------------------------------*/ /* Variables -----------------------------------------------------------------*/ /* Constants -----------------------------------------------------------------*/ /* Function prototypes -------------------------------------------------------*/ /* Functions -----------------------------------------------------------------*/ /**************************************************************************/ /** * @brief This function handles SysTick Handler. * @param : None * @retval : None */ /**************************************************************************/ void SysTick_Handler(void) { /* every 1mSec for _delay_ms() */ TimingDelay_Decrement(); /* another function See hw_config.h !*/ Cyclic_Exec(); #ifdefined(USE_ADS7843) static uint16_t cnt=0; /* every 100 mSec */ if( cnt++ >= 100 ) { cnt = 0; scaned_tc =1; } #endif } /**************************************************************************/ /*! @briefMain Function @paramnone @retvalnone */ /**************************************************************************/ int main(void) { #if defined(USE_SEMIHOSTING) initialise_monitor_handles(); #endif /* Set 1mSec Timer */ SysTickInit(INTERVAL); /* Initialise GPIO for the LED. */ FM3_GPIO->PDORF_f.P3 =0;/* Set Clr(at first)*/ FM3_GPIO->PFRF_f.P3 =0;/* Use PF3 as GPIO*/ FM3_GPIO->DDRF_f.P3 =1;/* Mode Output */ FM3_GPIO->PZRF_f.P3 =1;/* Port Tristate */ while (1)/* loop forever */ { /* Invert Pin */ FM3_GPIO->PDORF_f.P3 = ~FM3_GPIO->PDORF_f.P3; /* wait 500mSec a.k.a. _delay_us(500*1000); */ _delay_ms(500); } } /* End Of File ---------------------------------------------------------------*/
makeを実行して、正常に終了したら、openocdを使ってROMにプログラムを書き込みます。
$ make $ openocd -s lib/openocd -f openocd.cfg -c "flash_program main.elf"
正常に書き込みができたら、以下の様にLM3のLEDが点滅します。
プログラムのデバッグは、 arm/LED点灯の作成とデバッグ に従ってデバッグを設定します。
デバッグのコンフィグタブのInitialize commands以下の様に変更し、Run Commandsは空のままにしてください。
target remote localhost:3333 set remote hardware-breakpoint-limit 6 monitor reset halt load monitor reset init thbreak main
MacOSXでは、VersaloonのCDCがOSのドライバーに取られしまうため、一時的にそれをいったん止めます。
$ sudo kextunload /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDC.kext
元に戻すには、
$ sudo kextload /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDC.kext
最初にTerminalでプロジェクトのあるディレクトリに移動して、openocdを起動します。
$ openocd -s lib/openocd -f openocd.cfg Open On-Chip Debugger 0.5.0-dev-00783-g0123985-dirty (2014-08-17-11:36) Licensed under GNU GPL v2 For bug reports, read http://openocd.berlios.de/doc/doxygen/bugs.html Warn : must select a transport. adapter_nsrst_delay: 100 jtag_ntrst_delay: 100 trst_only separate trst_push_pull 500 kHz cortex_m3 reset_config sysresetreq Error: Fail to receive usb data, error string is Operation timed out. Info : Versaloon(0x15)by Simon(compiled on Jan 29 2011) Info : USB_TO_XXX abilities: 0x0000024F:0x010001EF:0xC0000007 Info : clock speed 500 kHz Info : JTAG tap: mb9bfxx6.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4) Info : mb9bfxx6.cpu: hardware has 6 breakpoints, 4 watchpoints
これで、EclipseのDebug ConfigurationsからZylin Embedded debug(Native)のFM_Sample Debugを選択しデバッガを起動します。
fm3のドライバーがないので苦肉の策で、最新のopenocdをインストールしてARM-USB-TINYを使うようにしたら上手く認識できました。
最新のopenocdは、すごいですね。
使ったopenocd.cfgは以下の通りです。
adapter_khz 500 interface ft2232 set CHIPNAME mb9bfxx6 set CPUTAPID 0x4ba00477 source [find interface/olimex-jtag-tiny.cfg] source [find target/fm3.cfg] proc flash_program {ELF_FILENAME} { halt flash probe 0 flash write_image erase $ELF_FILENAME #flash write_bank 0 $ELF_FILENAME 0x0 echo "flash program complete. reset and run" resume exit } init halt
FLASH USB DIRECT Programmerをダウンロードしたが、手元のWindows XPではUSBのドライバーが上手く認識できない
皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。
スパム防止に画像の文字列も入力してください。