|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
jvolk Član
Pridružen-a: Ned 05 Mar 2006 1:14 Prispevkov: 737 Aktiv.: 3.35 Kraj: okolica Divače
|
Objavljeno: Tor Jul 07, 2009 9:19 pm Naslov sporočila: IAP in LPC2378 |
|
|
Pozdravljeni.
Uporabljam uVision3, ulink2 in LPC2378
Že drugi dan se trudim usposobit IAP (in Application Programming) na LPC2378.
Primera za LPC23xx ne najdem, zato se trudim usposobit Keilov primer za ploščico MCB2100 (tisti, ki je priložen instalaciji na C:\Keil\ARM\Boards\Keil\MCB2100\IAP)
Problem je v tem, da registra VICDefVectAddr, ki ga LPC21xx ima v LPC23xx ni.
V primeru je uporabljen tule:
Koda: |
VICDefVectAddr = (unsigned int) def_isr; // for Spurious Interrupts |
Je v LPC23xx kje register z isto funkcijo? Če ima kdo primer kode za IAP in LPC23xx oz. vsak kak namig bi bil presrečen. |
|
Nazaj na vrh |
|
|
pero Član
Pridružen-a: Sob 02 Avg 2003 10:03 Prispevkov: 145 Aktiv.: 0.65 Kraj: Sevnica
|
Objavljeno: Tor Jul 07, 2009 9:49 pm Naslov sporočila: |
|
|
Kolikor se spomnim je bil pri lpc21xx VICDefVectAddr "catch all" vektor.
Pri LPC23xx ima vsak interrupt svoj vektor.
Delaš bootloader ali bi rad pisal v flash iz programa?
Za bootloader je za keil par primerov ( poglej na NXP pod application notes ) |
|
Nazaj na vrh |
|
|
jvolk Član
Pridružen-a: Ned 05 Mar 2006 1:14 Prispevkov: 737 Aktiv.: 3.35 Kraj: okolica Divače
|
Objavljeno: Tor Jul 07, 2009 9:55 pm Naslov sporočila: |
|
|
Rad bi pisal v flash iz programa, ker si mora stvar zapomnit par stvari. |
|
Nazaj na vrh |
|
|
Umnik Član
Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.31 Kraj: Novo mesto
|
Objavljeno: Tor Jul 07, 2009 9:59 pm Naslov sporočila: |
|
|
Pobriši tisto in ne bo več delalo težav
Tole so v bistvu prepisane IAP funkcije, preizkušene na LPC21xx, na 23xx pa žal ne. Poizkusi, verjetno bi morale biti enake. Pazi na frekvence v headerju, entry point pa se mi zdi da je enak.
Koda: |
/******************************************************************************/
/* */
/* iap.c */
/* */
/******************************************************************************/
#include <LPC2103.H>
#include "iap.h"
/*
* Convert 'addr' to Sector Number
*/
unsigned int get_secnum (unsigned int addr) {
unsigned int n;
n = ((unsigned int) addr >> 12) & 0x1F; // Pseudo Sector Number
return (n); // Sector Number
}
/*
* Erase Sector between 'start' and 'end'
* Return: IAP Error Code (0 when OK)
*/
unsigned int erase (unsigned int start, unsigned int end) {
struct iap_in iap; // IAP Input Parameters
unsigned int result[16]; // IAP Results
unsigned int save_VicInt; // for saving VICIntEnable
save_VicInt = VICIntEnable; // Save Interrupt Enable Status
VICIntEnClr = 0xFFFFFFFF; // Disable all Interrupts
iap.cmd = 50; // IAP Command: Prepare Sectors for Write
iap.par[0] = get_secnum (start); // Start Sector
iap.par[1] = get_secnum (end); // End Sector
iap_entry (&iap, result); // Call IAP Function
if (result[0]) goto exit; // Error occured?
iap.cmd = 52; // IAP Command: Erase Flash
iap.par[0] = get_secnum (start); // Start Sector
iap.par[1] = get_secnum (end); // End Sector
iap.par[2] = CCLK; // CPU Clock
iap_entry (&iap, result); // Call IAP Function
exit:
VICIntEnable = save_VicInt; // Restore Interrupt Enable Status
return (result[0]);
}
/*
* Program *data to addr, number of bytes specified by size
* Return: IAP Error Code (0 when OK)
* NOTES: size should be 512, 1024, 4096 or 8192
*/
unsigned int program (unsigned int addr, unsigned char *data, unsigned int size) {
struct iap_in iap; // IAP Input Parameters
unsigned int result[16]; // IAP Results
unsigned int save_VicInt; // for saving VICIntEnable
save_VicInt = VICIntEnable; // Save Interrupt Enable Status
VICIntEnClr = 0xFFFFFFFF; // Disable all Interrupts
iap.cmd = 50; // IAP Command: Prepare Sectors for Write
iap.par[0] = get_secnum (addr); // Start Sector
iap.par[1] = iap.par[0]; // End Sector
iap_entry (&iap, result); // Call IAP Function
if (result[0]) goto exit; // Error occured?
iap.cmd = 51; // IAP Command: Copy RAM to Flash
iap.par[0] = addr; // Destination Address
iap.par[1] = (unsigned int) data; // Source Address
iap.par[2] = size; // Number of Bytes
iap.par[3] = CCLK; // CPU Clock
iap_entry (&iap, result); // Call IAP Function
exit:
VICIntEnable = save_VicInt; // Restore Interrupt Enable Status
return (result[0]);
}
|
In še header
Koda: |
/******************************************************************************/
/* */
/* iap.h */
/* */
/******************************************************************************/
#ifndef __IAP_H
#define __IAP_H
// Clock Frequency
#define XTAL 12000000 // Oscillator Frequency
#define CPUCLK (XTAL*1) // CPU Clock with PLL
#define CCLK (CPUCLK / 1000) // CPU Clock in kHz
struct iap_in {
unsigned int cmd;
unsigned int par[4];
};
typedef void (*IAP)(struct iap_in *in, unsigned int *result);
#define iap_entry ((IAP) 0x7FFFFFF1) // IAP Entry Point
extern unsigned int get_secnum (unsigned int addr);
extern unsigned int erase (unsigned int start, unsigned int end);
extern unsigned int program (unsigned int addr, unsigned char *data, unsigned int size);
#endif // __IAP_H
|
|
|
Nazaj na vrh |
|
|
jvolk Član
Pridružen-a: Ned 05 Mar 2006 1:14 Prispevkov: 737 Aktiv.: 3.35 Kraj: okolica Divače
|
Objavljeno: Tor Jul 07, 2009 11:02 pm Naslov sporočila: |
|
|
Umnik, hvala za ta kos kode. Deluje odlično. Testiral sem primerom Blinky, ki je zraven uVisiona v MCB2300. |
|
Nazaj na vrh |
|
|
drVrh Član
Pridružen-a: Sre 20 Feb 2008 20:17 Prispevkov: 918 Aktiv.: 4.68 Kraj: Slovenija-Koroska-Prevalje-Lese
|
Objavljeno: Pon Jul 27, 2015 12:00 pm Naslov sporočila: |
|
|
Pozdrav,
za LPC1114
bi mi lahko pomagali kako naj ugotovim na katere naslove lahko shranjujem podatke.
Sedaj imam program dol 21 K toda se bo še dopolnjeval tako ne vem na kateri naslov lahko shranim podatke.
Podatke bi rad shranjevla iz polja, ki naj bi bil dolg nekje 42 Bajtov. polje je veliko
48 x 7 = 336 bitov (42 bajtov).
Imam nek meni v kateremu uporabnik nastavi vrednosti v polje in to polje bi rad shranil. _________________ Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 47 dni
Powered by phpBB © 2001, 2005 phpBB Group
|