www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

IAP in LPC2378

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
jvolk
Član
Član



Pridružen-a: Ned 05 Mar 2006 1:14
Prispevkov: 737
Aktiv.: 3.35
Kraj: okolica Divače

PrispevekObjavljeno: Tor Jul 07, 2009 9:19 pm    Naslov sporočila:  IAP in LPC2378 Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
pero
Član
Član



Pridružen-a: Sob 02 Avg 2003 10:03
Prispevkov: 145
Aktiv.: 0.65
Kraj: Sevnica

PrispevekObjavljeno: Tor Jul 07, 2009 9:49 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
jvolk
Član
Član



Pridružen-a: Ned 05 Mar 2006 1:14
Prispevkov: 737
Aktiv.: 3.35
Kraj: okolica Divače

PrispevekObjavljeno: Tor Jul 07, 2009 9:55 pm    Naslov sporočila:   Odgovori s citatom

Rad bi pisal v flash iz programa, ker si mora stvar zapomnit par stvari.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Umnik
Član
Član



Pridružen-a: Čet 16 Sep 2004 17:52
Prispevkov: 958
Aktiv.: 4.31
Kraj: Novo mesto

PrispevekObjavljeno: Tor Jul 07, 2009 9:59 pm    Naslov sporočila:   Odgovori s citatom

Pobriši tisto in ne bo več delalo težav Wink

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jvolk
Član
Član



Pridružen-a: Ned 05 Mar 2006 1:14
Prispevkov: 737
Aktiv.: 3.35
Kraj: okolica Divače

PrispevekObjavljeno: Tor Jul 07, 2009 11:02 pm    Naslov sporočila:   Odgovori s citatom

Umnik, hvala za ta kos kode. Deluje odlično. Testiral sem primerom Blinky, ki je zraven uVisiona v MCB2300.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
drVrh
Član
Član



Pridružen-a: Sre 20 Feb 2008 20:17
Prispevkov: 918
Aktiv.: 4.68
Kraj: Slovenija-Koroska-Prevalje-Lese

PrispevekObjavljeno: Pon Jul 27, 2015 12:00 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group