http://akizukidenshi.com/catalog/g/gM-05028/
秋月電子の NUC120-SDK Cortex-m0ボードを購入してみた。
通販では、開発用DVDが梱包されてなかったが、メールで問い合わせしたところ、DVDが届いた。
秋月には、Cortex-m0として、LPC1114 http://akizukidenshi.com/catalog/g/gM-03597/ があるが
このNUC120-SDKはUSBとADC(12bit)機能が嬉しい。 また、FLASH128Kbyte,SRAM 16Kbyteと広大であります。
開発ツールは IAR とKeil がDVDに付属するがいずれも、機能またはサイズ制限版なので、動作確認できたら
CodeSourceryLiteGccに移行しましょう。
サンプルソースが付属するので使い勝手がよいです。USB VCOMも問題なく動作しました。
ところで、CodeSourceryLiteGccでは当然header fileがないので、辛いです。
IAR ツールをインストールすると nuc1xx.hが手に入るので、流用すると捗ります。
------HOS V4a 20110405版での動作確認例
http://ryuz.txt-nifty.com/blog/2011/04/cortex-m0hos-f8.html
を参考して、動作確認します。
PIN17 PB0 RXD0
PIN18 PB1 TXD0
PIN19 PB2 GPIO LED
PIN20 PB3 GPIO LED
以下はsample/arm/lpc1114 を修正したもの
1) gcc/link.lds 修正箇所のみ
ro : o = 0x000000c0, l = 0x0001ff40
rw : o = 0x20000000, l = 0x00004000
2) main.c
* Sample program for Hyper Operating System V4 Advance
*
* @file main.c
* @brief %jp{メイン関数}%en{main}
*
* Copyright (C) 1998-2006 by Project HOS
* http://sourceforge.jp/projects/hos/
*/
#include "kernel.h"
#define GCR_BA (0x50000000) /* System Manager Control Register */
#define REG_GPA_MFP ((volatile UW *)(GCR_BA+0x030)) /* GPIO Register */
#define REG_GPB_MFP ((volatile UW *)(GCR_BA+0x034)) /* GPIO Register */
#define REG_GPC_MFP ((volatile UW *)(GCR_BA+0x038)) /* GPIO Register */
#define REG_GPD_MFP ((volatile UW *)(GCR_BA+0x03c)) /* GPIO Register */
#define REG_GPE_MFP ((volatile UW *)(GCR_BA+0x040)) /* GPIO Register */
#define REG_WRPROT ((volatile UW *)(GCR_BA+0x100)) /* REGWRPROT Register */
#define CLK_BA (0x50000200) /* System Clock Control Register */
#define REG_PWRCON ((volatile UW *)(CLK_BA+0x00)) /* PWRCON Register */
#define REG_AHBCLK ((volatile UW *)(CLK_BA+0x04)) /* AHBCLK Register */
#define REG_APBCLK ((volatile UW *)(CLK_BA+0x08)) /* APBCLK Register */
#define REG_CLKSEL0 ((volatile UW *)(CLK_BA+0x10)) /* CLKSEL0 Register */
#define REG_CLKSEL1 ((volatile UW *)(CLK_BA+0x14)) /* CLKSEL1 Register */
#define REG_CLKDIV ((volatile UW *)(CLK_BA+0x18)) /* CLKDIV Register */
#define REG_CLKSEL2 ((volatile UW *)(CLK_BA+0x1c)) /* CLKSEL2 Register */
#define REG_PLLCON ((volatile UW *)(CLK_BA+0x20)) /* PLLCON Register */
#define GP_BA (0x50004000) /* System Manager Control Register */
#define REG_GPIOB_PMD ((volatile UW *)(GP_BA+0x040)) /* GPIOB Register */
#define REG_GPIOB_DOUT ((volatile UW *)(GP_BA+0x048)) /* GPIOB Register */
static void UNLOCK(){
*REG_WRPROT=0x59;
*REG_WRPROT=0x16;
*REG_WRPROT=0x88;
}
static void ENLOCK(){
*REG_WRPROT=0x00;
}
static void
Delay (unsigned int delayCnt)
{
while (delayCnt--)
{
asm ("nop");
asm ("nop");
}
}
/** %jp{メイン関数} */
int main()
{
/* %jp{ハードウェアの初期化} */
UNLOCK ();
*REG_PWRCON |= 1;/* ExClk 12MHz */
*REG_PLLCON = 0;
Delay (1000);
*REG_CLKSEL0 = 2;
Delay (100);
*REG_PLLCON = 0xc22e;/* 48MHz */
ENLOCK();
/* LEDをつけてみる */
*REG_GPA_MFP = 0x00;
*REG_GPB_MFP = 0x00;
*REG_GPC_MFP = 0x00;
*REG_GPD_MFP = 0x00;
*REG_GPE_MFP = 0x00;
*REG_GPIOB_PMD = 0x50;/* PB2,PB3 */
*REG_GPIOB_DOUT = 0x04;/* PB2 */
/* %jp{カーネルの動作開始} */
vsta_knl();
return 0;
}
/* dummy */
void _sbrk(void)
{
}
/* end of file */
3) uart.c 修正箇所のみ
* Sample program for Hyper Operating System V4 Advance
*
* @file uart.c
* @brief %jp{UARTへの出力}%en{UART device driver}
*
* Copyright (C) 1998-2011 by Project HOS
* http://sourceforge.jp/projects/hos/
*/
#include "kernel.h"
#define CLK_BA (0x50000200) /* System Clock Control Register */
#define REG_PWRCON ((volatile UW *)(CLK_BA+0x00)) /* PWRCON Register */
#define REG_AHBCLK ((volatile UW *)(CLK_BA+0x04)) /* AHBCLK Register */
#define REG_APBCLK ((volatile UW *)(CLK_BA+0x08)) /* APBCLK Register */
#define REG_CLKSEL0 ((volatile UW *)(CLK_BA+0x10)) /* CLKSEL0 Register */
#define REG_CLKSEL1 ((volatile UW *)(CLK_BA+0x14)) /* CLKSEL1 Register */
#define REG_CLKDIV ((volatile UW *)(CLK_BA+0x18)) /* CLKDIV Register */
#define REG_CLKSEL2 ((volatile UW *)(CLK_BA+0x1c)) /* CLKSEL2 Register */
#define REG_PLLCON ((volatile UW *)(CLK_BA+0x20)) /* PLLCON Register */
#define GCR_BA (0x50000000) /* System Manager Control Register */
#define REG_GPB_MFP ((volatile UW *)(GCR_BA+0x034)) /* GPIOB Register */
#define UART0_BA (0x40050000) /* UART0 */
#define REG_U0RBR ((volatile UW *)(UART0_BA+0x00)) /* UART Receiver Buffer Register */
#define REG_U0THR ((volatile UW *)(UART0_BA+0x00)) /* UART Transmitter Holding Register */
#define REG_U0BAUD ((volatile UW *)(UART0_BA+0x24)) /* UART Divisor Latch LSB and MSB Registers */
#define REG_U0IER ((volatile UW *)(UART0_BA+0x04)) /* UART Interrupt Enable Register */
#define REG_U0ISR ((volatile UW *)(UART0_BA+0x1c)) /* UART Interrupt Identification Register */
#define REG_U0FCR ((volatile UW *)(UART0_BA+0x08)) /* UART FIFO Control Register */
#define REG_U0LCR ((volatile UW *)(UART0_BA+0x0c)) /* UART Line Control Register */
#define REG_U0MCR ((volatile UW *)(UART0_BA+0x10)) /* UART0 Modem Control Register */
#define REG_U0FSR ((volatile UW *)(UART0_BA+0x18)) /* UART FSR Register */
#define REG_U0ALTCON ((volatile UW *)(UART0_BA+0x2c)) /* UART */
#define REG_U0FUNSEL ((volatile UW *)(UART0_BA+0x30)) /* UART */
/* %jp{UARTの初期化} */
void Uart_Initialize(void)
{
/* CLK */
*REG_CLKDIV &= ~(15<<8);/* UART_N = 0 */
*REG_CLKSEL1 &= ~(3<<24);/* ExClk Source = ExClk 12MHz */
*REG_APBCLK |= (1<<16);/* UART CLK Enable */
/* (GPB_MFP).BIT0,1=1 */
*REG_GPB_MFP |= 0x03;
/* UART */
*REG_U0ALTCON = 0x00;
*REG_U0FUNSEL= 0x00;
*REG_U0BAUD = (3<<28)|(15<<24)|((12000000/115200) -2);
*REG_U0LCR = 0x03; /* 8bit nonparity */
*REG_U0FCR = 0x06; /* FIFO reset & enable */
}
/* %jp{1文字出力} */
void Uart_PutChar(int c)
{
while ( !(*REG_U0FSR & (1<<22)) ) /* TX_EMPTY != 0 */
;
*REG_U0THR = c;
}
------
0 件のコメント:
コメントを投稿