Difference between revisions of "LPC2138"

From Electriki
Jump to navigationJump to search
 
(One intermediate revision by the same user not shown)
Line 2: Line 2:
  
 
I'm doing it from zero, since I plan to write some super cool OS for it.
 
I'm doing it from zero, since I plan to write some super cool OS for it.
 +
 +
Just an update, I've successfully written some asm routines for task switching. Which is super cool IMO! Gained quite some knowledge of ARM/LPC in the process.
 +
Also met some gas idiocies. ie. '''stmfd  sp!, {r0-r14}^''', doesn't even exist, but gas warns about some other stuff and compiles it into '''stmfd  sp, {r0-r14}^''' (no exclamation mark after sp, meaning sp isn't decremented). W/O JTAG this would be a bit more difficult.
 +
  
 
== Memory mapping ==
 
== Memory mapping ==
Line 24: Line 28:
  
 
== arm exception vector locations ==
 
== arm exception vector locations ==
 +
Read all about that on:
 
[[LPC2138/crt | Bootup, vectors and linker script]]
 
[[LPC2138/crt | Bootup, vectors and linker script]]
ok, so these fuckers can be remapped:
 
* boot loader mode (on start up), boot block vectors are mapped here
 
* user flash mode (from boot code), activated by BL, needs valid program sig and non-forced BL. non re-mapped vectors (== stays in flash, bottom)
 
* user ram mode (from program), user program can remap vectors to bottom of SRAM
 
 
The 64-byte block is remapped. So some handlers can fit there.
 
 
{| cellspacing="0" border="1"
 
|+ arm vectors
 
|-
 
|0x0
 
| Reset
 
|-
 
|0x4
 
| Undefined Instruction
 
|-
 
|0x8
 
| Software Interrupt
 
|-
 
|0xc
 
| Prefetch Abort
 
|-
 
|0x10
 
| Data Abort
 
|-
 
|0x14
 
|2's complement of checksum of vectors
 
|-
 
|0x18
 
|IRQ
 
|-
 
|0x1c
 
|FIQ
 
|}
 
  
== after reset ==
 
The 12kB boot block is mapped into 0x7d000. It's also visible at 0x7fff d000.
 
  
Bootloader checks for valid checksum of vectors, then hands off control to flash at 0x0, or start serial port shit.
+
[[Category: Projects]]

Latest revision as of 19:12, 31 January 2009

OK, LPC2138 is an ARM7TDMI, 512kB flash, 32kB ram from NXP/Philips.

I'm doing it from zero, since I plan to write some super cool OS for it.

Just an update, I've successfully written some asm routines for task switching. Which is super cool IMO! Gained quite some knowledge of ARM/LPC in the process. Also met some gas idiocies. ie. stmfd sp!, {r0-r14}^, doesn't even exist, but gas warns about some other stuff and compiles it into stmfd sp, {r0-r14}^ (no exclamation mark after sp, meaning sp isn't decremented). W/O JTAG this would be a bit more difficult.


Memory mapping

memory mapping
0x0 flash
0x4000 0000 sram
0x7fff d000 boot block
0xe000 0000 vpb peripherals
0xffe0 0000 ahb peripherals

arm exception vector locations

Read all about that on: Bootup, vectors and linker script