lpc2368 flash memory data

Başlatan armsistem, 20 Şubat 2013, 19:18:49

armsistem

Arkadaşlar merhaba , işlemcinin flash memory'sine bir data yazmak istiyorum fakat bir türlü olmadı ciddi anlamda araştırdım fakat bir yerde hata yapıyorum yaptıklarım adım adım anlatmaya çalışacağım.

1-PLL ayarları
[jstex]osc : 16 Mhz
M   :  9
N   :  1
CCLK:  6
UCLK:  6
CCLK:48 Mhz
PCLK:48 Mhz
PCLK/2: 24 Mhz
PCLK/4: 12 Mhz
PCLK/8:  6 Mhz[/jstex]


2-Keil options for target ayarları: Flash'ın 6000 ve 7000 adreslerini ayırdım.



3- Program
#include <lpc23xx.h>
#include "uart.h"

#define IAP_LOCATION 0x7FFFFFF1 // iap adresi ?
char Ram_Array[] = "picproje"; // flash yazılacak veri
unsigned long command[5]; // komut dizini
unsigned long result[2]; // dönen yanıt
typedef void (*IAP)(unsigned long [], unsigned long []); // burayı tam olarak halen anlayamadım iap gösterici bir fonksiyon var
IAP iap_entry;                                                                  // iap entry diye başka bir gösterici fonksiyon mu yapıyoruz
void Write_to_Flash()                                                      // flash yaz
{ 
command[0] = 52;                                                          // flash sil
command[1] = 0x00007000;                                         // başlangıç adresi
command[2] = 0x00008000;                                         // bitiş adresi 7000-8000 arasındaki flash veriyi sil
command[3] = 48000; // PCLK == 48000 KHz	            // hızımız 48 Mhz
iap_entry(command,result);                                       //işle
//******************************************
command[0] = 50;                                                    //flası hazırla
command[1] = 0x00007000;                                   //başlangıç adresi
command[2] = 0x00008000;                                // bitiş adresi hazırla
command[3] = 48000; // PCLK == 48000 KHz	     //48 Mhz
iap_entry(command,result);
//******************************************	
command[0] = 51;                                         // burasını yanlış anlamış olabilirim
command[1] = 0x40000100;                          //[b]ram adresi[/b]
command[2] = 0x00007000;                      // flash memory adresine kopyala
command[3] = 256;	                                  // 256 byte olarak
command[4] = 48000; // PCLK == 48000 KHz	  // 48 Mhz
iap_entry(command,result);                       // işle
//******************************************	
	
}

void
u1_karakter_gonder (unsigned char ch){ // Karakteri seri porta yaz
while (!(U0LSR & 0x20)); // bus idle oluncaya kadar bekle
U0THR=ch; // karakter bus'a
}

   void
u1_string_gonder(const char *ch){ // string yazilacak
while(*ch) //
u1_karakter_gonder(*ch++);
}


int main(void)
{
unsigned long i;

char *Ram_Pointer;  // gösterici
 	char *Flash_Pointer;	// gösterici
	
	UART0Init(57600);  // baudrate hızımız uart problem yok istediğim veriyi uarta yazdırabiliyorum

      Ram_Pointer = (char*)0x40000100; // Ram_pointer göstericisine başlangıç adresini veriyorum burası [b]RAM[/b] adresi 
    	Flash_Pointer = (char*)0x00007000; // Flash memory adresindeki başlangıç değeri veriyorum 
	    iap_entry = (IAP)IAP_LOCATION;// burasını halen anlamakta zorlanıyorum
	
	for (i=0;i<256;i++)  // 256 kere dön sayıya ulaşmak için
{if(i<=8) {*Ram_Pointer = Ram_Array[i];} // burada ram pointer değişken olarak picproje adresini yazıyoruz.
else {*Ram_Pointer = "0";}  8 den sonra geri kalan her yere 0 yazıyoruz yani 248 kere
Ram_Pointer++;}
//Ram_Pointer=&Ram_Array[0]; // yukarıdakini çok gerekli görmedi aşağıdaki yaptığımda daha kolay oluyor dizinin ilk adresini pointer yazıyoruz
Write_to_Flash();                                   // flash yaz diyoruz
u1_string_gonder(Ram_Pointer);         // hımm işte burada yanlış bir şey yapabilirim burada istediğim o ram adresinde hangi değişken varsa oku
u1_string_gonder(Flash_Pointer);      // burada da istediğim flash memeory okumak
while(1);
}



?????? nerelerde hata yapmış olabilirim.