EmbeddedRelated.com
Forums
The 2024 Embedded Online Conference

Need example project for Rowley CrossWorks for ARM - C/C++

Started by "jim...@rocketmail.com" June 17, 2009
Hello everybody,

I'm new to ARM7 development and I'm looking to compile and load my first test program on my Olimex LPC-P2138 development board.

I'm evaluating the Rowley CrossWorks for ARM compiler/IDE. I've created a solution using the wizard and selected the MCU, Clock Speed etc and a project was created.

However, I don't see a source file created the includes a stub for main().

So a few questions:

1- Anybody have a good simple example project for CrossWorks for the LPC-P2138 ( NXP 2138 ) that is a good template to build from? Perhaps something that just blinks an LED?

2- I have the Olimex ARM-USB-TINY JTag programmer. How does one flash the CPU under CrossWorks to run and debug the simple application?

Any help would be appreciated...

Thank you,

An Engineer's Guide to the LPC2100 Series

j...@rocketmail.com wrote:
> Hello everybody,
>
> I'm new to ARM7 development and I'm looking to compile and load my first test program on my Olimex LPC-P2138 development board.
>
> I'm evaluating the Rowley CrossWorks for ARM compiler/IDE. I've created a solution using the wizard and selected the MCU, Clock Speed etc and a project was created.
>
> However, I don't see a source file created the includes a stub for main().
>
> So a few questions:
>
> 1- Anybody have a good simple example project for CrossWorks for the LPC-P2138 ( NXP 2138 ) that is a good template to build from? Perhaps something that just blinks an LED?
>

Do what I told you to do at the helpdesk. If you can't do that, there
is little hope.

> 2- I have the Olimex ARM-USB-TINY JTag programmer. How does one flash the CPU under CrossWorks to run and debug the simple application?
>

Did you bother to read the tutorial?

-- Paul

----- Original Message -----
From: "j...@rocketmail.com"
To:
Sent: Tuesday, June 16, 2009 10:50 PM
Subject: [lpc2000] Need example project for Rowley CrossWorks for ARM -
C/C++
> Hello everybody,
>
> I'm new to ARM7 development and I'm looking to compile and load my first
> test program on my Olimex LPC-P2138 development board.
>
> I'm evaluating the Rowley CrossWorks for ARM compiler/IDE. I've created a
> solution using the wizard and selected the MCU, Clock Speed etc and a
> project was created.
>
> However, I don't see a source file created the includes a stub for main().
>
> So a few questions:
>
> 1- Anybody have a good simple example project for CrossWorks for the
> LPC-P2138 ( NXP 2138 ) that is a good template to build from? Perhaps
> something that just blinks an LED?
Here's something very simple for CrossWorks:

/*
** led.c
**
** simple program to test switch input and LED output
*/
#include

#define LED_ROW 0x04000000 //P0.26
#define LED_COLUMN 0x00000008 //P0.3
#define SWITCH_PIN 15 // Button 1

void
delay(int d)
{
for(; d; --d);
}

main(void)
{
int sw_state;

while(1)
{
if (IOPIN & (1< LED_on();
else
LED_off();
}
}

LED_on()
{
IODIR = 0x00000000;
IODIR |= (LED_ROW | LED_COLUMN);
IOSET = LED_ROW; // row low
IOSET = LED_COLUMN; // column high
}

LED_off()
{
IODIR = 0x00000000;
IODIR |= (LED_ROW | LED_COLUMN);
IOCLR = LED_ROW; // row low
IOCLR = LED_COLUMN; // column high
}

It's for the Silica LPC2103 demo board (made by Olimex). It has an 8x8 LED
matrix and lights one of the LEDs.

Send me a PM and I'll email you the whole project.

Leon
l...@btinternet.com

Thank you Leon. I appreciate your willingness to help out an
ARM/CrossWorks newbie. I'm having a problem ( I think ) with the
flashing of the program to the LPC2138 though. If I select "Build and
Run" from the Build menu option the program is compiled and loaded
onto the board and runs. And I can use the debugger etc. However, when
I set my build configuration to "ARM Flash Release" and download the
code to the LPC2138 the code doesn't run even after a reset. So I'm
not sure if the CrossWorks code is playing nice with the built-in boot
loader... So how do I go about loading the code into the LPC2138 so
that the image is stored in non-volatile flash/ram and starts
execution after a power-up or reset?

I've included my linker file and memory map that was generated by the
CrossWorks LPC2000 CPU package which includes support for my LP2138.
Perhaps the linker isn't putting the sections in the correct places???

I came up with a program to blink leds. Shown below:

/******************
FOR THE LPC2138
******************/
#include
#define PIN12 (1<<12)
#define PIN13 (1<<13)

/* Stupid but quick way to do a delay.
Will use a Timer in the future
*/
static void delay(void )
{
volatile int i,j;

for (i=0;i<150;i++)
{
for (j=0;j<3000;j++);
}
}
int main( void )
{
IO0DIR |= PIN12 | PIN13; // define LED-Pins as outputs
IO0SET = PIN12 | PIN13; // set Bits = LEDs off (active low)

while (1)
{
IO0CLR = PIN12;
IO0SET = PIN13;
delay();
IO0SET = PIN12;
IO0CLR = PIN13;
delay();
}
}
Linker File: *.ld
====================MEMORY
{
UNPLACED_SECTIONS (wx) : ORIGIN = 0x100000000, LENGTH = 0
AHB_Peripherals (wx) : ORIGIN = 0xffe00000, LENGTH = 0x00200000
APB_Peripherals (wx) : ORIGIN = 0xe0000000, LENGTH = 0x00200000
SRAM (wx) : ORIGIN = 0x40000000, LENGTH = 0x00008000
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000
}
SECTIONS
{
__AHB_Peripherals_segment_start__ = 0xffe00000;
__AHB_Peripherals_segment_end__ = 0x00000000;
__APB_Peripherals_segment_start__ = 0xe0000000;
__APB_Peripherals_segment_end__ = 0xe0200000;
__SRAM_segment_start__ = 0x40000000;
__SRAM_segment_end__ = 0x40008000;
__FLASH_segment_start__ = 0x00000000;
__FLASH_segment_end__ = 0x00080000;

__STACKSIZE__ = 1024;
__STACKSIZE_IRQ__ = 256;
__STACKSIZE_FIQ__ = 256;
__STACKSIZE_SVC__ = 0;
__STACKSIZE_ABT__ = 0;
__STACKSIZE_UND__ = 0;
__HEAPSIZE__ = 1024;

__vectors_ram_load_start__ = __SRAM_segment_start__;
.vectors_ram __SRAM_segment_start__ (NOLOAD) : AT(__SRAM_segment_start__)
{
__vectors_ram_start__ = .;
*(.vectors_ram)
. = MAX(__vectors_ram_start__ + 0x3C , .);
}
__vectors_ram_end__ = __vectors_ram_start__ + SIZEOF(.vectors_ram);

. = ASSERT(__vectors_ram_end__ >= __SRAM_segment_start__ &&
__vectors_ram_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error:
.vectors_ram is too large to fit in SRAM memory segment");

__vectors_load_start__ = __FLASH_segment_start__;
.vectors __FLASH_segment_start__ : AT(__FLASH_segment_start__)
{
__vectors_start__ = .;
*(.vectors .vectors.*)
}
__vectors_end__ = __vectors_start__ + SIZEOF(.vectors);

. = ASSERT(__vectors_end__ >= __FLASH_segment_start__ &&
__vectors_end__ <= (__FLASH_segment_start__ + 0x00080000) , "error:
.vectors is too large to fit in FLASH memory segment");

__init_load_start__ = ALIGN(__vectors_end__ , 4);
.init ALIGN(__vectors_end__ , 4) : AT(ALIGN(__vectors_end__ , 4))
{
__init_start__ = .;
*(.init .init.*)
}
__init_end__ = __init_start__ + SIZEOF(.init);

. = ASSERT(__init_end__ >= __FLASH_segment_start__ && __init_end__
<= (__FLASH_segment_start__ + 0x00080000) , "error: .init is too large
to fit in FLASH memory segment");

__text_load_start__ = ALIGN(__init_end__ , 4);
.text ALIGN(__init_end__ , 4) : AT(ALIGN(__init_end__ , 4))
{
__text_start__ = .;
*(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table)
}
__text_end__ = __text_start__ + SIZEOF(.text);

. = ASSERT(__text_end__ >= __FLASH_segment_start__ && __text_end__
<= (__FLASH_segment_start__ + 0x00080000) , "error: .text is too large
to fit in FLASH memory segment");

__dtors_load_start__ = ALIGN(__text_end__ , 4);
.dtors ALIGN(__text_end__ , 4) : AT(ALIGN(__text_end__ , 4))
{
__dtors_start__ = .;
KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors))
}
__dtors_end__ = __dtors_start__ + SIZEOF(.dtors);

. = ASSERT(__dtors_end__ >= __FLASH_segment_start__ &&
__dtors_end__ <= (__FLASH_segment_start__ + 0x00080000) , "error:
.dtors is too large to fit in FLASH memory segment");

__ctors_load_start__ = ALIGN(__dtors_end__ , 4);
.ctors ALIGN(__dtors_end__ , 4) : AT(ALIGN(__dtors_end__ , 4))
{
__ctors_start__ = .;
KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors))
}
__ctors_end__ = __ctors_start__ + SIZEOF(.ctors);

. = ASSERT(__ctors_end__ >= __FLASH_segment_start__ &&
__ctors_end__ <= (__FLASH_segment_start__ + 0x00080000) , "error:
.ctors is too large to fit in FLASH memory segment");

__rodata_load_start__ = ALIGN(__ctors_end__ , 4);
.rodata ALIGN(__ctors_end__ , 4) : AT(ALIGN(__ctors_end__ , 4))
{
__rodata_start__ = .;
*(.rodata .rodata.* .gnu.linkonce.r.*)
}
__rodata_end__ = __rodata_start__ + SIZEOF(.rodata);

. = ASSERT(__rodata_end__ >= __FLASH_segment_start__ &&
__rodata_end__ <= (__FLASH_segment_start__ + 0x00080000) , "error:
.rodata is too large to fit in FLASH memory segment");

__fast_load_start__ = ALIGN(__rodata_end__ , 4);
.fast ALIGN(__vectors_ram_end__ , 4) : AT(ALIGN(__rodata_end__ , 4))
{
__fast_start__ = .;
*(.fast .fast.*)
}
__fast_end__ = __fast_start__ + SIZEOF(.fast);

__fast_load_end__ = __fast_load_start__ + SIZEOF(.fast);

. = ASSERT((__fast_load_start__ + SIZEOF(.fast)) >__FLASH_segment_start__ && (__fast_load_start__ + SIZEOF(.fast)) <(__FLASH_segment_start__ + 0x00080000) , "error: .fast is too large to
fit in FLASH memory segment");

.fast_run ALIGN(__vectors_ram_end__ , 4) (NOLOAD) :
{
__fast_run_start__ = .;
. = MAX(__fast_run_start__ + SIZEOF(.fast), .);
}
__fast_run_end__ = __fast_run_start__ + SIZEOF(.fast_run);

. = ASSERT(__fast_run_end__ >= __SRAM_segment_start__ &&
__fast_run_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error:
.fast_run is too large to fit in SRAM memory segment");

__data_load_start__ = ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4);
.data ALIGN(__fast_run_end__ , 4) : AT(ALIGN(__fast_load_start__ +
SIZEOF(.fast) , 4))
{
__data_start__ = .;
*(.data .data.* .gnu.linkonce.d.*)
}
__data_end__ = __data_start__ + SIZEOF(.data);

__data_load_end__ = __data_load_start__ + SIZEOF(.data);

__FLASH_segment_used_end__ = ALIGN(__fast_load_start__ +
SIZEOF(.fast) , 4) + SIZEOF(.data);

. = ASSERT((__data_load_start__ + SIZEOF(.data)) >__FLASH_segment_start__ && (__data_load_start__ + SIZEOF(.data)) <(__FLASH_segment_start__ + 0x00080000) , "error: .data is too large to
fit in FLASH memory segment");

.data_run ALIGN(__fast_run_end__ , 4) (NOLOAD) :
{
__data_run_start__ = .;
. = MAX(__data_run_start__ + SIZEOF(.data), .);
}
__data_run_end__ = __data_run_start__ + SIZEOF(.data_run);

. = ASSERT(__data_run_end__ >= __SRAM_segment_start__ &&
__data_run_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error:
.data_run is too large to fit in SRAM memory segment");

__bss_load_start__ = ALIGN(__data_run_end__ , 4);
.bss ALIGN(__data_run_end__ , 4) (NOLOAD) : AT(ALIGN(__data_run_end__ , 4))
{
__bss_start__ = .;
*(.bss .bss.* .gnu.linkonce.b.*) *(COMMON)
}
__bss_end__ = __bss_start__ + SIZEOF(.bss);

. = ASSERT(__bss_end__ >= __SRAM_segment_start__ && __bss_end__ <(__SRAM_segment_start__ + 0x00008000) , "error: .bss is too large to
fit in SRAM memory segment");

__non_init_load_start__ = ALIGN(__bss_end__ , 4);
.non_init ALIGN(__bss_end__ , 4) (NOLOAD) : AT(ALIGN(__bss_end__ , 4))
{
__non_init_start__ = .;
*(.non_init .non_init.*)
}
__non_init_end__ = __non_init_start__ + SIZEOF(.non_init);

. = ASSERT(__non_init_end__ >= __SRAM_segment_start__ &&
__non_init_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error:
.non_init is too large to fit in SRAM memory segment");

__heap_load_start__ = ALIGN(__non_init_end__ , 4);
.heap ALIGN(__non_init_end__ , 4) (NOLOAD) : AT(ALIGN(__non_init_end__ , 4))
{
__heap_start__ = .;
*(.heap)
. = ALIGN(MAX(__heap_start__ + __HEAPSIZE__ , .), 4);
}
__heap_end__ = __heap_start__ + SIZEOF(.heap);

. = ASSERT(__heap_end__ >= __SRAM_segment_start__ && __heap_end__
<= (__SRAM_segment_start__ + 0x00008000) , "error: .heap is too large
to fit in SRAM memory segment");

__stack_load_start__ = ALIGN(__heap_end__ , 4);
.stack ALIGN(__heap_end__ , 4) (NOLOAD) : AT(ALIGN(__heap_end__ , 4))
{
__stack_start__ = .;
*(.stack)
. = ALIGN(MAX(__stack_start__ + __STACKSIZE__ , .), 4);
}
__stack_end__ = __stack_start__ + SIZEOF(.stack);

. = ASSERT(__stack_end__ >= __SRAM_segment_start__ && __stack_end__
<= (__SRAM_segment_start__ + 0x00008000) , "error: .stack is too large
to fit in SRAM memory segment");

__stack_irq_load_start__ = ALIGN(__stack_end__ , 4);
.stack_irq ALIGN(__stack_end__ , 4) (NOLOAD) : AT(ALIGN(__stack_end__ , 4))
{
__stack_irq_start__ = .;
*(.stack_irq)
. = ALIGN(MAX(__stack_irq_start__ + __STACKSIZE_IRQ__ , .), 4);
}
__stack_irq_end__ = __stack_irq_start__ + SIZEOF(.stack_irq);

. = ASSERT(__stack_irq_end__ >= __SRAM_segment_start__ &&
__stack_irq_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error:
.stack_irq is too large to fit in SRAM memory segment");

__stack_fiq_load_start__ = ALIGN(__stack_irq_end__ , 4);
.stack_fiq ALIGN(__stack_irq_end__ , 4) (NOLOAD) :
AT(ALIGN(__stack_irq_end__ , 4))
{
__stack_fiq_start__ = .;
*(.stack_fiq)
. = ALIGN(MAX(__stack_fiq_start__ + __STACKSIZE_FIQ__ , .), 4);
}
__stack_fiq_end__ = __stack_fiq_start__ + SIZEOF(.stack_fiq);

. = ASSERT(__stack_fiq_end__ >= __SRAM_segment_start__ &&
__stack_fiq_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error:
.stack_fiq is too large to fit in SRAM memory segment");

__stack_svc_load_start__ = ALIGN(__stack_fiq_end__ , 4);
.stack_svc ALIGN(__stack_fiq_end__ , 4) (NOLOAD) :
AT(ALIGN(__stack_fiq_end__ , 4))
{
__stack_svc_start__ = .;
*(.stack_svc)
. = ALIGN(MAX(__stack_svc_start__ + __STACKSIZE_SVC__ , .), 4);
}
__stack_svc_end__ = __stack_svc_start__ + SIZEOF(.stack_svc);

. = ASSERT(__stack_svc_end__ >= __SRAM_segment_start__ &&
__stack_svc_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error:
.stack_svc is too large to fit in SRAM memory segment");

__stack_abt_load_start__ = ALIGN(__stack_svc_end__ , 4);
.stack_abt ALIGN(__stack_svc_end__ , 4) (NOLOAD) :
AT(ALIGN(__stack_svc_end__ , 4))
{
__stack_abt_start__ = .;
*(.stack_abt)
. = ALIGN(MAX(__stack_abt_start__ + __STACKSIZE_ABT__ , .), 4);
}
__stack_abt_end__ = __stack_abt_start__ + SIZEOF(.stack_abt);

. = ASSERT(__stack_abt_end__ >= __SRAM_segment_start__ &&
__stack_abt_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error:
.stack_abt is too large to fit in SRAM memory segment");

__stack_und_load_start__ = ALIGN(__stack_abt_end__ , 4);
.stack_und ALIGN(__stack_abt_end__ , 4) (NOLOAD) :
AT(ALIGN(__stack_abt_end__ , 4))
{
__stack_und_start__ = .;
*(.stack_und)
. = ALIGN(MAX(__stack_und_start__ + __STACKSIZE_UND__ , .), 4);
}
__stack_und_end__ = __stack_und_start__ + SIZEOF(.stack_und);

__SRAM_segment_used_end__ = ALIGN(__stack_abt_end__ , 4) +
SIZEOF(.stack_und);

. = ASSERT(__stack_und_end__ >= __SRAM_segment_start__ &&
__stack_und_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error:
.stack_und is too large to fit in SRAM memory segment");

}

================
Memory MAP:
================
Archive member included because of file (symbol)

C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_cclk.o)
ARM Flash Debug/LPC210x.o
(liblpc2000_lpc21xx_get_cclk)
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_pclk.o)
ARM Flash Debug/LPC210x.o
(liblpc2000_lpc21xx_get_pclk)

Memory Configuration

Name Origin Length Attributes
UNPLACED_SECTIONS 0xffffffff 0x00000000 xw
AHB_Peripherals 0xffe00000 0x00200000 xw
APB_Peripherals 0xe0000000 0x00200000 xw
SRAM 0x40000000 0x00008000 xw
FLASH 0x00000000 0x00080000 xr
*default* 0x00000000 0xffffffff

Linker script and memory map

0xffe00000
__AHB_Peripherals_segment_start__ = 0xffe00000
0x00000000
__AHB_Peripherals_segment_end__ = 0x0
0xe0000000
__APB_Peripherals_segment_start__ = 0xe0000000
0xe0200000
__APB_Peripherals_segment_end__ = 0xe0200000
0x40000000 __SRAM_segment_start__ = 0x40000000
0x40008000 __SRAM_segment_end__ = 0x40008000
0x00000000 __FLASH_segment_start__ = 0x0
0x00080000 __FLASH_segment_end__ = 0x80000
0x00000400 __STACKSIZE__ = 0x400
0x00000100 __STACKSIZE_IRQ__ = 0x100
0x00000100 __STACKSIZE_FIQ__ = 0x100
0x00000000 __STACKSIZE_SVC__ = 0x0
0x00000000 __STACKSIZE_ABT__ = 0x0
0x00000000 __STACKSIZE_UND__ = 0x0
0x00000400 __HEAPSIZE__ = 0x400
0x40000000 __vectors_ram_load_start__
= __SRAM_segment_start__

.vectors_ram 0x40000000 0x3c
0x40000000 __vectors_ram_start__ = .
*(.vectors_ram)
0x4000003c . = ((__vectors_ram_start__
+ 0x3c) MAX .)
*fill* 0x40000000 0x3c 00
0x4000003c __vectors_ram_end__ (__vectors_ram_start__ + SIZEOF (.vectors_ram))
0x00000001 . = ASSERT
(((__vectors_ram_end__ >= __SRAM_segment_start__) &&
(__vectors_ram_end__ <= (__SRAM_segment_start__ + 0x8000))), error:
.vectors_ram is too large to fit in SRAM memory segment)
0x00000000 __vectors_load_start__ __FLASH_segment_start__

.vectors 0x00000000 0x3c
0x00000000 __vectors_start__ = .
*(.vectors .vectors.*)
.vectors 0x00000000 0x3c ARM Flash
Debug/Philips_LPC210X_Startup.o
0x00000000 _vectors
0x0000003c __vectors_end__ (__vectors_start__ + SIZEOF (.vectors))
0x00000001 . = ASSERT
(((__vectors_end__ >= __FLASH_segment_start__) && (__vectors_end__ <(__FLASH_segment_start__ + 0x80000))), error: .vectors is too large to
fit in FLASH memory segment)
0x0000003c __init_load_start__ (__vectors_end__ ALIGN 0x4)

.init 0x0000003c 0x260
0x0000003c __init_start__ = .
*(.init .init.*)
*fill* 0x0000003c 0x4 00
.init 0x00000040 0x1d0 ARM Flash Debug/crt0.o
0x00000040 __start
0x00000040 _start
.init 0x00000210 0x8c ARM Flash
Debug/Philips_LPC210X_Startup.o
0x00000210 reset_handler
0x00000280 undef_handler
0x00000288 pabort_handler
0x0000028c dabort_handler
0x00000284 swi_handler
0x00000290 fiq_handler
0x0000029c __init_end__ (__init_start__ + SIZEOF (.init))
0x00000001 . = ASSERT (((__init_end__
>= __FLASH_segment_start__) && (__init_end__ <(__FLASH_segment_start__ + 0x80000))), error: .init is too large to
fit in FLASH memory segment)
0x0000029c __text_load_start__ (__init_end__ ALIGN 0x4)

.text 0x0000029c 0x5f8
0x0000029c __text_start__ = .
*(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table)
.text 0x0000029c 0xf0 ARM Flash Debug/main.o
0x0000030c main
.glue_7 0x0000038c 0x0 ARM Flash Debug/main.o
.glue_7t 0x0000038c 0x0 ARM Flash Debug/main.o
.text 0x0000038c 0x0 ARM Flash Debug/crt0.o
.glue_7 0x0000038c 0x0 ARM Flash Debug/crt0.o
.glue_7t 0x0000038c 0x0 ARM Flash Debug/crt0.o
.text 0x0000038c 0x0 ARM Flash
Debug/Philips_LPC210X_Startup.o
.glue_7 0x0000038c 0x0 ARM Flash
Debug/Philips_LPC210X_Startup.o
.glue_7t 0x0000038c 0x0 ARM Flash
Debug/Philips_LPC210X_Startup.o
.text 0x0000038c 0x128 ARM Flash Debug/LPC210x.o
0x00000498 ctl_get_ticks_per_second
0x000003c4 ctl_start_timer
.glue_7 0x000004b4 0x0 ARM Flash Debug/LPC210x.o
.glue_7t 0x000004b4 0x0 ARM Flash Debug/LPC210x.o
.text 0x000004b4 0x340 ARM Flash Debug/VIC.o
0x0000077c ctl_unmask_isr
0x000004b4 ctl_set_isr
0x000007b8 ctl_mask_isr
.glue_7 0x000007f4 0x0 ARM Flash Debug/VIC.o
.glue_7t 0x000007f4 0x0 ARM Flash Debug/VIC.o
.text 0x000007f4 0x44 ARM Flash Debug/VIC_irq_handler.o
0x000007f4 irq_handler
.glue_7 0x00000838 0x0 ARM Flash Debug/VIC_irq_handler.o
.glue_7t 0x00000838 0x0 ARM Flash Debug/VIC_irq_handler.o
.text 0x00000838 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_cclk.o)
.text.liblpc2000
0x00000838 0x30
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_cclk.o)
0x00000838 liblpc2000_get_cclk
0x00000838 liblpc2000_lpc21xx_get_cclk
.glue_7 0x00000868 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_cclk.o)
.glue_7t 0x00000868 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_cclk.o)
.text 0x00000868 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_pclk.o)
.text.liblpc2000
0x00000868 0x2c
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_pclk.o)
0x00000868 liblpc2000_get_pclk
0x00000868 liblpc2000_lpc21xx_get_pclk
.glue_7 0x00000894 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_pclk.o)
.glue_7t 0x00000894 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_pclk.o)
0x00000894 __text_end__ (__text_start__ + SIZEOF (.text))

.vfp11_veneer 0x00000000 0x0
.vfp11_veneer 0x00000000 0x0 ARM Flash Debug/main.o
.vfp11_veneer 0x00000000 0x0 ARM Flash Debug/crt0.o
.vfp11_veneer 0x00000000 0x0 ARM Flash
Debug/Philips_LPC210X_Startup.o
.vfp11_veneer 0x00000000 0x0 ARM Flash Debug/LPC210x.o
.vfp11_veneer 0x00000000 0x0 ARM Flash Debug/VIC.o
.vfp11_veneer 0x00000000 0x0 ARM Flash Debug/VIC_irq_handler.o
.vfp11_veneer 0x00000000 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_cclk.o)
.vfp11_veneer 0x00000000 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_pclk.o)

.v4_bx 0x00000000 0x0
.v4_bx 0x00000000 0x0 ARM Flash Debug/main.o
.v4_bx 0x00000000 0x0 ARM Flash Debug/crt0.o
.v4_bx 0x00000000 0x0 ARM Flash
Debug/Philips_LPC210X_Startup.o
.v4_bx 0x00000000 0x0 ARM Flash Debug/LPC210x.o
.v4_bx 0x00000000 0x0 ARM Flash Debug/VIC.o
.v4_bx 0x00000000 0x0 ARM Flash Debug/VIC_irq_handler.o
.v4_bx 0x00000000 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_cclk.o)
.v4_bx 0x00000000 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_pclk.o)
0x00000001 . = ASSERT (((__text_end__
>= __FLASH_segment_start__) && (__text_end__ <(__FLASH_segment_start__ + 0x80000))), error: .text is too large to
fit in FLASH memory segment)
0x00000894 __dtors_load_start__ (__text_end__ ALIGN 0x4)

.dtors 0x00000894 0x0
0x00000894 __dtors_start__ = .
*(SORT(.dtors.*))
*(.dtors)
0x00000894 __dtors_end__ (__dtors_start__ + SIZEOF (.dtors))
0x00000001 . = ASSERT (((__dtors_end__
>= __FLASH_segment_start__) && (__dtors_end__ <(__FLASH_segment_start__ + 0x80000))), error: .dtors is too large to
fit in FLASH memory segment)
0x00000894 __ctors_load_start__ (__dtors_end__ ALIGN 0x4)

.ctors 0x00000894 0x0
0x00000894 __ctors_start__ = .
*(SORT(.ctors.*))
*(.ctors)
0x00000894 __ctors_end__ (__ctors_start__ + SIZEOF (.ctors))
0x00000001 . = ASSERT (((__ctors_end__
>= __FLASH_segment_start__) && (__ctors_end__ <(__FLASH_segment_start__ + 0x80000))), error: .ctors is too large to
fit in FLASH memory segment)
0x00000894 __rodata_load_start__ (__ctors_end__ ALIGN 0x4)

.rodata 0x00000894 0x0
0x00000894 __rodata_start__ = .
*(.rodata .rodata.* .gnu.linkonce.r.*)
0x00000894 __rodata_end__ (__rodata_start__ + SIZEOF (.rodata))
0x00000001 . = ASSERT
(((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <(__FLASH_segment_start__ + 0x80000))), error: .rodata is too large to
fit in FLASH memory segment)
0x00000894 __fast_load_start__ (__rodata_end__ ALIGN 0x4)

.fast 0x4000003c 0x0 load address 0x00000894
0x4000003c __fast_start__ = .
*(.fast .fast.*)
0x4000003c __fast_end__ (__fast_start__ + SIZEOF (.fast))
0x00000894 __fast_load_end__ (__fast_load_start__ + SIZEOF (.fast))
0x00000001 . = ASSERT
((((__fast_load_start__ + SIZEOF (.fast)) >= __FLASH_segment_start__)
&& ((__fast_load_start__ + SIZEOF (.fast)) <= (__FLASH_segment_start__
+ 0x80000))), error: .fast is too large to fit in FLASH memory segment)

.fast_run 0x4000003c 0x0
0x4000003c __fast_run_start__ = .
0x4000003c . = ((__fast_run_start__ +
SIZEOF (.fast)) MAX .)
0x4000003c __fast_run_end__ (__fast_run_start__ + SIZEOF (.fast_run))
0x00000001 . = ASSERT
(((__fast_run_end__ >= __SRAM_segment_start__) && (__fast_run_end__ <(__SRAM_segment_start__ + 0x8000))), error: .fast_run is too large to
fit in SRAM memory segment)
0x00000894 __data_load_start__ ((__fast_load_start__ + SIZEOF (.fast)) ALIGN 0x4)

.data 0x4000003c 0x0 load address 0x00000894
0x4000003c __data_start__ = .
*(.data .data.* .gnu.linkonce.d.*)
.data 0x4000003c 0x0 ARM Flash Debug/main.o
.data 0x4000003c 0x0 ARM Flash Debug/crt0.o
.data 0x4000003c 0x0 ARM Flash
Debug/Philips_LPC210X_Startup.o
.data 0x4000003c 0x0 ARM Flash Debug/LPC210x.o
.data 0x4000003c 0x0 ARM Flash Debug/VIC.o
.data 0x4000003c 0x0 ARM Flash Debug/VIC_irq_handler.o
.data 0x4000003c 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_cclk.o)
.data 0x4000003c 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_pclk.o)
0x4000003c __data_end__ (__data_start__ + SIZEOF (.data))
0x00000894 __data_load_end__ (__data_load_start__ + SIZEOF (.data))
0x00000894 __FLASH_segment_used_end__
= (((__fast_load_start__ + SIZEOF (.fast)) ALIGN 0x4) + SIZEOF (.data))
0x00000001 . = ASSERT
((((__data_load_start__ + SIZEOF (.data)) >= __FLASH_segment_start__)
&& ((__data_load_start__ + SIZEOF (.data)) <= (__FLASH_segment_start__
+ 0x80000))), error: .data is too large to fit in FLASH memory segment)

.data_run 0x4000003c 0x0
0x4000003c __data_run_start__ = .
0x4000003c . = ((__data_run_start__ +
SIZEOF (.data)) MAX .)
0x4000003c __data_run_end__ (__data_run_start__ + SIZEOF (.data_run))
0x00000001 . = ASSERT
(((__data_run_end__ >= __SRAM_segment_start__) && (__data_run_end__ <(__SRAM_segment_start__ + 0x8000))), error: .data_run is too large to
fit in SRAM memory segment)
0x4000003c __bss_load_start__ (__data_run_end__ ALIGN 0x4)

.bss 0x4000003c 0x84
0x4000003c __bss_start__ = .
*(.bss .bss.* .gnu.linkonce.b.*)
.bss 0x4000003c 0x0 ARM Flash Debug/main.o
.bss 0x4000003c 0x0 ARM Flash Debug/crt0.o
.bss 0x4000003c 0x0 ARM Flash
Debug/Philips_LPC210X_Startup.o
.bss 0x4000003c 0x4 ARM Flash Debug/LPC210x.o
.bss 0x40000040 0x80 ARM Flash Debug/VIC.o
.bss 0x400000c0 0x0 ARM Flash Debug/VIC_irq_handler.o
.bss 0x400000c0 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_cclk.o)
.bss 0x400000c0 0x0
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_pclk.o)
*(COMMON)
0x400000c0 __bss_end__ (__bss_start__ + SIZEOF (.bss))
0x00000001 . = ASSERT (((__bss_end__
>= __SRAM_segment_start__) && (__bss_end__ <= (__SRAM_segment_start__
+ 0x8000))), error: .bss is too large to fit in SRAM memory segment)
0x400000c0 __non_init_load_start__ (__bss_end__ ALIGN 0x4)

.non_init 0x400000c0 0x0
0x400000c0 __non_init_start__ = .
*(.non_init .non_init.*)
0x400000c0 __non_init_end__ (__non_init_start__ + SIZEOF (.non_init))
0x00000001 . = ASSERT
(((__non_init_end__ >= __SRAM_segment_start__) && (__non_init_end__ <(__SRAM_segment_start__ + 0x8000))), error: .non_init is too large to
fit in SRAM memory segment)
0x400000c0 __heap_load_start__ (__non_init_end__ ALIGN 0x4)

.heap 0x400000c0 0x400
0x400000c0 __heap_start__ = .
*(.heap)
0x400004c0 . = (((__heap_start__ +
__HEAPSIZE__) MAX .) ALIGN 0x4)
*fill* 0x400000c0 0x400 00
0x400004c0 __heap_end__ (__heap_start__ + SIZEOF (.heap))
0x00000001 . = ASSERT (((__heap_end__
>= __SRAM_segment_start__) && (__heap_end__ <(__SRAM_segment_start__ + 0x8000))), error: .heap is too large to fit
in SRAM memory segment)
0x400004c0 __stack_load_start__ (__heap_end__ ALIGN 0x4)

.stack 0x400004c0 0x400
0x400004c0 __stack_start__ = .
*(.stack)
0x400008c0 . = (((__stack_start__ +
__STACKSIZE__) MAX .) ALIGN 0x4)
*fill* 0x400004c0 0x400 00
0x400008c0 __stack_end__ (__stack_start__ + SIZEOF (.stack))
0x00000001 . = ASSERT (((__stack_end__
>= __SRAM_segment_start__) && (__stack_end__ <(__SRAM_segment_start__ + 0x8000))), error: .stack is too large to fit
in SRAM memory segment)
0x400008c0 __stack_irq_load_start__ (__stack_end__ ALIGN 0x4)

.stack_irq 0x400008c0 0x100
0x400008c0 __stack_irq_start__ = .
*(.stack_irq)
0x400009c0 . = (((__stack_irq_start__
+ __STACKSIZE_IRQ__) MAX .) ALIGN 0x4)
*fill* 0x400008c0 0x100 00
0x400009c0 __stack_irq_end__ (__stack_irq_start__ + SIZEOF (.stack_irq))
0x00000001 . = ASSERT
(((__stack_irq_end__ >= __SRAM_segment_start__) && (__stack_irq_end__
<= (__SRAM_segment_start__ + 0x8000))), error: .stack_irq is too large
to fit in SRAM memory segment)
0x400009c0 __stack_fiq_load_start__ (__stack_irq_end__ ALIGN 0x4)

.stack_fiq 0x400009c0 0x100
0x400009c0 __stack_fiq_start__ = .
*(.stack_fiq)
0x40000ac0 . = (((__stack_fiq_start__
+ __STACKSIZE_FIQ__) MAX .) ALIGN 0x4)
*fill* 0x400009c0 0x100 00
0x40000ac0 __stack_fiq_end__ (__stack_fiq_start__ + SIZEOF (.stack_fiq))
0x00000001 . = ASSERT
(((__stack_fiq_end__ >= __SRAM_segment_start__) && (__stack_fiq_end__
<= (__SRAM_segment_start__ + 0x8000))), error: .stack_fiq is too large
to fit in SRAM memory segment)
0x40000ac0 __stack_svc_load_start__ (__stack_fiq_end__ ALIGN 0x4)

.stack_svc 0x40000ac0 0x0
0x40000ac0 __stack_svc_start__ = .
*(.stack_svc)
0x40000ac4 . = (((__stack_svc_start__
+ __STACKSIZE_SVC__) MAX .) ALIGN 0x4)
0x40000ac0 __stack_svc_end__ (__stack_svc_start__ + SIZEOF (.stack_svc))
0x00000001 . = ASSERT
(((__stack_svc_end__ >= __SRAM_segment_start__) && (__stack_svc_end__
<= (__SRAM_segment_start__ + 0x8000))), error: .stack_svc is too large
to fit in SRAM memory segment)
0x40000ac0 __stack_abt_load_start__ (__stack_svc_end__ ALIGN 0x4)

.stack_abt 0x40000ac0 0x0
0x40000ac0 __stack_abt_start__ = .
*(.stack_abt)
0x40000ac4 . = (((__stack_abt_start__
+ __STACKSIZE_ABT__) MAX .) ALIGN 0x4)
0x40000ac0 __stack_abt_end__ (__stack_abt_start__ + SIZEOF (.stack_abt))
0x00000001 . = ASSERT
(((__stack_abt_end__ >= __SRAM_segment_start__) && (__stack_abt_end__
<= (__SRAM_segment_start__ + 0x8000))), error: .stack_abt is too large
to fit in SRAM memory segment)
0x40000ac0 __stack_und_load_start__ (__stack_abt_end__ ALIGN 0x4)

.stack_und 0x40000ac0 0x0
0x40000ac0 __stack_und_start__ = .
*(.stack_und)
0x40000ac4 . = (((__stack_und_start__
+ __STACKSIZE_UND__) MAX .) ALIGN 0x4)
0x40000ac0 __stack_und_end__ (__stack_und_start__ + SIZEOF (.stack_und))
0x40000ac0 __SRAM_segment_used_end__ ((__stack_abt_end__ ALIGN 0x4) + SIZEOF (.stack_und))
0x00000001 . = ASSERT
(((__stack_und_end__ >= __SRAM_segment_start__) && (__stack_und_end__
<= (__SRAM_segment_start__ + 0x8000))), error: .stack_und is too large
to fit in SRAM memory segment)
START GROUP
LOAD ARM Flash Debug/main.o
LOAD ARM Flash Debug/crt0.o
LOAD ARM Flash Debug/Philips_LPC210X_Startup.o
LOAD ARM Flash Debug/LPC210x.o
LOAD ARM Flash Debug/VIC.o
LOAD ARM Flash Debug/VIC_irq_handler.o
LOAD C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks
for ARM/packages/lib/liblpc2000_v4t_a_le.a
LOAD C:/Program Files/Rowley Associates Limited/CrossWorks for ARM
2.0/lib/libarm_v4t_a_le.a
LOAD C:/Program Files/Rowley Associates Limited/CrossWorks for ARM
2.0/lib/libdebugio_dcc_v4t_a_le.a
LOAD C:/Program Files/Rowley Associates Limited/CrossWorks for ARM
2.0/lib/libm_v4t_a_le.a
LOAD C:/Program Files/Rowley Associates Limited/CrossWorks for ARM
2.0/lib/libc_v4t_a_le.a
LOAD C:/Program Files/Rowley Associates Limited/CrossWorks for ARM
2.0/lib/libcpp_v4t_a_le.a
LOAD C:/Program Files/Rowley Associates Limited/CrossWorks for ARM
2.0/lib/libdebugio_v4t_a_le.a
LOAD C:/Program Files/Rowley Associates Limited/CrossWorks for ARM
2.0/lib/libc_targetio_impl_v4t_a_le.a
LOAD C:/Program Files/Rowley Associates Limited/CrossWorks for ARM
2.0/lib/lib_vfprintf_long_v4t_a_le.a
LOAD C:/Program Files/Rowley Associates Limited/CrossWorks for ARM
2.0/lib/lib_vfscanf_long_v4t_a_le.a
LOAD C:/Program Files/Rowley Associates Limited/CrossWorks for ARM
2.0/lib/libc_user_libc_v4t_a_le.a
END GROUP
OUTPUT(ARM Flash Debug/Executable_1.elf elf32-littlearm)

.debug_abbrev 0x00000000 0x247
.debug_abbrev 0x00000000 0x5f ARM Flash Debug/main.o
.debug_abbrev 0x0000005f 0x14 ARM Flash Debug/crt0.o
.debug_abbrev 0x00000073 0x12 ARM Flash
Debug/Philips_LPC210X_Startup.o
.debug_abbrev 0x00000085 0xba ARM Flash Debug/LPC210x.o
.debug_abbrev 0x0000013f 0xf4 ARM Flash Debug/VIC.o
.debug_abbrev 0x00000233 0x14 ARM Flash Debug/VIC_irq_handler.o

.debug_info 0x00000000 0x5af
.debug_info 0x00000000 0x78 ARM Flash Debug/main.o
.debug_info 0x00000078 0xa3 ARM Flash Debug/crt0.o
.debug_info 0x0000011b 0xd2 ARM Flash
Debug/Philips_LPC210X_Startup.o
.debug_info 0x000001ed 0xe2 ARM Flash Debug/LPC210x.o
.debug_info 0x000002cf 0x212 ARM Flash Debug/VIC.o
.debug_info 0x000004e1 0xce ARM Flash Debug/VIC_irq_handler.o

.debug_line 0x00000000 0x527
.debug_line 0x00000000 0x6e ARM Flash Debug/main.o
.debug_line 0x0000006e 0xdf ARM Flash Debug/crt0.o
.debug_line 0x0000014d 0xee ARM Flash
Debug/Philips_LPC210X_Startup.o
.debug_line 0x0000023b 0x10a ARM Flash Debug/LPC210x.o
.debug_line 0x00000345 0x127 ARM Flash Debug/VIC.o
.debug_line 0x0000046c 0xbb ARM Flash Debug/VIC_irq_handler.o

.debug_frame 0x00000000 0x184
.debug_frame 0x00000000 0x5c ARM Flash Debug/main.o
.debug_frame 0x0000005c 0x84 ARM Flash Debug/LPC210x.o
.debug_frame 0x000000e0 0xa4 ARM Flash Debug/VIC.o

.debug_loc 0x00000000 0x183
.debug_loc 0x00000000 0x56 ARM Flash Debug/main.o
.debug_loc 0x00000056 0x81 ARM Flash Debug/LPC210x.o
.debug_loc 0x000000d7 0xac ARM Flash Debug/VIC.o

.debug_pubnames
0x00000000 0xa4
.debug_pubnames
0x00000000 0x1b ARM Flash Debug/main.o
.debug_pubnames
0x0000001b 0x43 ARM Flash Debug/LPC210x.o
.debug_pubnames
0x0000005e 0x46 ARM Flash Debug/VIC.o

.debug_aranges 0x00000000 0xc8
.debug_aranges
0x00000000 0x20 ARM Flash Debug/main.o
.debug_aranges
0x00000020 0x20 ARM Flash Debug/crt0.o
.debug_aranges
0x00000040 0x28 ARM Flash
Debug/Philips_LPC210X_Startup.o
.debug_aranges
0x00000068 0x20 ARM Flash Debug/LPC210x.o
.debug_aranges
0x00000088 0x20 ARM Flash Debug/VIC.o
.debug_aranges
0x000000a8 0x20 ARM Flash Debug/VIC_irq_handler.o

.debug_str 0x00000000 0x2d5
.debug_str 0x00000000 0x49 ARM Flash Debug/main.o
.debug_str 0x00000049 0x17b ARM Flash Debug/LPC210x.o
0x190 (size before relaxing)
.debug_str 0x000001c4 0x111 ARM Flash Debug/VIC.o
0x201 (size before relaxing)

.comment 0x00000000 0x5a
.comment 0x00000000 0x12 ARM Flash Debug/main.o
.comment 0x00000012 0x12 ARM Flash Debug/LPC210x.o
.comment 0x00000024 0x12 ARM Flash Debug/VIC.o
.comment 0x00000036 0x12
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_cclk.o)
.comment 0x00000048 0x12
C:/Users/Jim/AppData/Local/Rowley Associates Limited/CrossWorks for
ARM/packages/lib/liblpc2000_v4t_a_le.a(liblpc2000_lpc21xx_get_pclk.o)

.ARM.attributes
0x00000000 0x10
.ARM.attributes
0x00000000 0x10 ARM Flash Debug/main.o
.ARM.attributes
0x00000010 0x10 ARM Flash Debug/crt0.o
.ARM.attributes
0x00000020 0x10 ARM Flash
Debug/Philips_LPC210X_Startup.o
.ARM.attributes
0x00000030 0x10 ARM Flash Debug/LPC210x.o
.ARM.attributes
0x00000040 0x10 ARM Flash Debug/VIC.o
.ARM.attributes
0x00000050 0x10 ARM Flash Debug/VIC_irq_handler.o

.debug_ranges 0x00000000 0x20
.debug_ranges 0x00000000 0x20 ARM Flash
Debug/Philips_LPC210X_Startup.o

Quoting leon Heller :

> ----- Original Message -----
> From: "j...@rocketmail.com"
> To:
> Sent: Tuesday, June 16, 2009 10:50 PM
> Subject: [lpc2000] Need example project for Rowley CrossWorks for ARM -
> C/C++
>> Hello everybody,
>>
>> I'm new to ARM7 development and I'm looking to compile and load my first
>> test program on my Olimex LPC-P2138 development board.
>>
>> I'm evaluating the Rowley CrossWorks for ARM compiler/IDE. I've created a
>> solution using the wizard and selected the MCU, Clock Speed etc and a
>> project was created.
>>
>> However, I don't see a source file created the includes a stub for main().
>>
>> So a few questions:
>>
>> 1- Anybody have a good simple example project for CrossWorks for the
>> LPC-P2138 ( NXP 2138 ) that is a good template to build from? Perhaps
>> something that just blinks an LED?
> Here's something very simple for CrossWorks:
>
> /*
> ** led.c
> **
> ** simple program to test switch input and LED output
> */
> #include #define LED_ROW 0x04000000 //P0.26
> #define LED_COLUMN 0x00000008 //P0.3
> #define SWITCH_PIN 15 // Button 1
>
> void
> delay(int d)
> {
> for(; d; --d);
> }
>
> main(void)
> {
> int sw_state;
>
> while(1)
> {
> if (IOPIN & (1< > LED_on();
> else
> LED_off();
> }
> }
>
> LED_on()
> {
> IODIR = 0x00000000;
> IODIR |= (LED_ROW | LED_COLUMN);
> IOSET = LED_ROW; // row low
> IOSET = LED_COLUMN; // column high
> }
>
> LED_off()
> {
> IODIR = 0x00000000;
> IODIR |= (LED_ROW | LED_COLUMN);
> IOCLR = LED_ROW; // row low
> IOCLR = LED_COLUMN; // column high
> }
>
> It's for the Silica LPC2103 demo board (made by Olimex). It has an 8x8 LED
> matrix and lights one of the LEDs.
>
> Send me a PM and I'll email you the whole project.
>
> Leon
> l...@btinternet.com

----------------------------------
Jim Norton

"Wrong is wrong even if everyone is doing it; Right is right even if no
one is doing it." -St. Augustine.
-----------------------------------
Jim Norton wrote:
> Thank you Leon. I appreciate your willingness to help out an
> ARM/CrossWorks newbie. I'm having a problem ( I think ) with the
> flashing of the program to the LPC2138 though. If I select "Build and
> Run" from the Build menu option the program is compiled and loaded
> onto the board and runs. And I can use the debugger etc. However, when
> I set my build configuration to "ARM Flash Release" and download the
> code to the LPC2138 the code doesn't run even after a reset.

Try the resources at your disposal. Like our FAQ--the LPC2000 section.
That's why we write these, for customers that have the same problem over
and over again and don't read the startup documentation.

http://ccgi.rowley.co.uk/support/faq.php?do=article&articleid5

> So I'm
> not sure if the CrossWorks code is playing nice with the built-in boot
> loader... So how do I go about loading the code into the LPC2138 so
> that the image is stored in non-volatile flash/ram and starts
> execution after a power-up or reset?
>

-- Paul.


The 2024 Embedded Online Conference