Hi All, I am not an expert on ARM yet but an average guy for uC.
I am trying to get hands on with LPC2148 and plan to use it in next project.
One wonderful thing that I came across (I come form a background where we use 8051/mega16 uC) is USB IAP. So without any UART/Serial cable, I can flash program just by using USB cable.
Did some changes like 1. generating bin file (using fromelf --bin ....) and 2. changing IROM1 from 0x0 to 0x2000
to make program work with IAP.
I tasted some program and those worked very well.
But the issue is arising when I try to use Timer0 interrupt. I see controller getting stuck somewhere just after 1st int.
I checked with "Use Memory Layout with Target Dialog" selected and de-selected both. Nothing worked.
This has something to do with vector table but I am not able to make out what?
Any help on this would be appreciated.
Remember, I just made 3 above mentioned changes after creating new project. If there is anything else, please let me know.
Hi John, Something good, something bad... I told you about the link from where I got USB_IAP.hex. (originally Memory.hex) which is USB based secondary bootloader.
Link : www.nxp.com/search
Here, with the code of USB bootloader, there is a sample code as well for user program. I used it and copied it over the board (with some modification for my board) (project name : blinky)
And VOILA, It worked.
Now, I am trying to figure out the changes between two.
John, A really strange thing is going on. After the Blinky worked well. I moved back to my earlier project and flash it. It just worked. I'm not sure how.
Even after spending some good, I couldn't figure out the issue.
So I decided to start a new project in keil and just copied the C file from the earlier version (Remember, this file was never touched in the whole process).
I made sure that Startup.s is original only (original of Keil, without RAM_INTVEC).
The only changes I made was to change IROM1 from 0x0 to 0x2000 and added Run Cmd to generate .bin.
NO ADDITION OF REMAP, RAM_MODE or RAM_INTVEC.
And, it worked.
Now, I am totally confused about what is going on.
Just to be careful about data in RAM, I re-plugged the power supply as well. Still it worked.
Did that Blinky made some changes?
I am planning to order one more of the same board. So will check this issue on that also. Till then, do you have some experiments which I should be trying on this board?
It is possible.
=== Flash === Bootloader Vector -> Both Bootloader and Application use this Vector Bootloader PROGRAM Bootloader PROGRAM Bootloader PROGRAM Bootloader PROGRAM Bootloader PROGRAM Bootloader ISR PROGRAM -> Both Bootloader and Application use this ISR ============= Application PROGRAM Application PROGRAM Application PROGRAM Application PROGRAM Application PROGRAM Application PROGRAM
One of the bootloaders you have tried, provided a usable ISR PROGRAM. If you did not erase this usable ISR PROGRAM, every Applications work fine.
LPC2148 seems quite old. LPC23xx/LPC24xx seem a little old. It is now LPC17xx. (LPC13xx?)
I think you are right.
So, in short, If 1. I get a new board (or completely erase the flash) 2. Program the USB Bootloader 3. Copy the newly working binary (not the Blinky)
it will not work immediately. I will need to run blinky once to make it running :)
LPC2148 may be old. But til now I was using AVR (8-bit) controllers. So I planned to move a level up so that next projects can be better.
And, to get familier with the uC, I got this Development board at very good rate. "">www.nex-robotics.com/.../arm7-lpc2148-development-board.html"
This will ramp up the development time.
I surely have a look at LPC17xx/13xx. But now as I have started with this, I plan to understand it properly. So the jump to 17/13xx would be easier.
BTW, thanks for suggestion.
Exception Vectors -> ARM design Vectored Interrupt Controller -> NXP design One of the Exception Vectors is linked to Vectored Interrupt Controller.
LPC21xx / LPC23xx -> ARM7 -> VIC LPC17xx (LPC13xx?) -> ARM Cortex-M -> NVIC
ARM7 is very different from Cortex-M; and due to the foundry process etc, Cortex-M might be cheaper than ARM7. But of course, different projects have different considerations, LPC2148 might still be the best choice for your projects. (When will NXP terminate LPC21xx?)