реклама на сайте
подробности

 
 
> как работать с IAP?
cornflyer
сообщение Jan 28 2009, 14:26
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



Кто-нибудь научился работать с флеш-памятью LPC2148 через IAP?
Пока я лучше и проще выхода не нашел как поставить внешний i2c eeprom....
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
cornflyer
сообщение Jan 30 2009, 06:51
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



да, я читал application note AN10256
компилятор Keil, target опция USE THUMB MODE включена....

CODE
/*
* IAP In-System Application Programming
*/

#include <LPC21xx.H>

// Clock Frequency
#define XTAL 12000000 // Oscillator Frequency

#ifdef BYPASS_IAP
#define CPUCLK XTAL // CPU Clock without PLL
#else
#define CPUCLK (XTAL*4) // CPU Clock with PLL
#endif

#define CCLK (XTAL / 1000) // CPU Clock without PLL in kHz

// Phase Locked Loop (PLL) definitions
#define PLL_BASE 0xE01FC080 // PLL Base Address
#define PLLCON_OFS 0x00 // PLL Control Offset
#define PLLSTAT_OFS 0x08 // PLL Status Offset
#define PLLFEED_OFS 0x0C // PLL Feed Offset
#define PLLCON_PLLE 0x01 // PLL Enable
#define PLLCON_PLLD 0x00 // PLL Disable
#define PLLCON_PLLC 0x03 // PLL Connect(0x02) | PLL Enable
#define PLLSTAT_PLOCK 0x0400 //1<<10 // PLL Lock Status


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


/* Default Interrupt Function: may be called when interrupts are disabled */
void def_isr (void) __irq {
;
}


#ifdef BYPASS_IAP
/*
* Switch CPU to PLL clock
*/
void start_pll (void) {
__asm {
LDR R0, =PLL_BASE
MOV R1, #0xAA
MOV R2, #0x55

// Enable PLL
MOV R3, #PLLCON_PLLE
STR R3, [R0, #PLLCON_OFS]
STR R1, [R0, #PLLFEED_OFS]
STR R2, [R0, #PLLFEED_OFS]

// Wait until PLL Locked
LDR R2, =PLLSTAT_PLOCK
PLL_Loop:
LDR R3, [R0, #PLLSTAT_OFS]
CMP R3, R2
BEQ PLL_Loop

// Switch to PLL Clock
MOV R2, #0x55
MOV R3, #PLLCON_PLLC
STR R3, [R0, #PLLCON_OFS]
STR R1, [R0, #PLLFEED_OFS]
STR R2, [R0, #PLLFEED_OFS]
}
}


/*
* Switch CPU to standard XTAL
*/
void stop_pll(void) __arm {
__asm {
LDR R0, =PLL_BASE
MOV R1, #0xAA
MOV R2, #0x55

// Disable PLL
MOV R3, #PLLCON_PLLD
STR R3, [R0, #PLLCON_OFS]
STR R1, [R0, #PLLFEED_OFS]
STR R2, [R0, #PLLFEED_OFS]
}
}

#endif

/*
* Convert 'addr' to sector number
*/
unsigned int get_secnum (void *addr) {
unsigned int n;

n = ((unsigned int) addr >> 13) & 0x1F; // pseudo sector number

if (n >= (0x30000 >> 13)) {
n -= 14; // high small 8kB Sectors (
}
else if (n >= (0x10000 >> 13)) {
n = 7 + (n >> 3); // large 64kB Sectors
}
return (n); // sector number
}


/*
* Erase Sector between 'start' and 'end'
* Return: IAP error code (0 when OK)
* NOTES: start needs to be a 256 byte boundary
* size should be 256, 512, 1024 or 4089
*/
unsigned int erase (void* start, void* end) {
struct iap_in iap; // IAP input parameters
unsigned int result[16]; // IAP results
unsigned int save_VicInt; // for saving of interrupt enable register

save_VicInt = VICIntEnable; // save interrupt enable status
VICIntEnClr = 0xFFFFFFFF; // disable all interrupts

#ifdef BYPASS_IAP
stop_pll(); // IAP requires to run without PLL
#endif

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; // an 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:

#ifdef BYPASS_IAP
start_pll(); // start PLL
#endif

VICIntEnable = save_VicInt; // enable interrupts
return (result[0]);
}


/*
* Program *data to flash_addr. number of bytes specified by size
* Return: IAP error code (0 when OK)
* Note:
*/
unsigned int program (void *flash_addr, void *data, unsigned int size) {
struct iap_in iap; // IAP input parameters
unsigned int result[16]; // IAP results
unsigned int save_VicInt; // for saving of interrupt enable register

save_VicInt = VICIntEnable; // save interrupt enable status
VICIntEnClr = 0xFFFFFFFF; // disable all interrupts

#ifdef BYPASS_IAP
stop_pll(); // IAP requires to run without PLL
#endif

iap.cmd = 50; // IAP Command: Prepare Sectors for Write
iap.par[0] = get_secnum (flash_addr); // start sector
iap.par[1] = iap.par[0]; // end Sektor
iap_entry (&iap, result); // call IAP function
if (result[0]) goto exit; // an error occured?

iap.cmd = 51; // IAP Command: Copy RAM to Flash
iap.par[0] = (unsigned int) flash_addr; // destination-addr
iap.par[1] = (unsigned int) data; // source-addr
iap.par[2] = size; // number of bytes
iap.par[3] = CCLK; // CPU clock
iap_entry (&iap, result); // call IAP function

exit:

#ifdef BYPASS_IAP
start_pll(); // start PLL
#endif

VICIntEnable = save_VicInt; // enable interrupts
return (result[0]);
}



unsigned char vals[512];


void main (void) {
unsigned int i;

unsigned int volatile start;

for (start = 0; start < 1000000; start++) {
; // wait for debugger connection (about 0.3 sec)
}

VICDefVectAddr = (unsigned int) def_isr; // for spurious interrupts

for (i = 0; i < sizeof (vals); i++) {
vals[i] = (unsigned char) i;
}

program (0x30000, vals, sizeof (vals));
program (0x31000, vals, sizeof (vals));
program (0x32000, vals, sizeof (vals));
erase (0x30000, 0x31FFF);
erase (0x32000, 0x33FFF);

while (1);
}


Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- cornflyer   как работать с IAP?   Jan 28 2009, 14:26
- - zltigo   Цитата(cornflyer @ Jan 28 2009, 17:26) Кт...   Jan 28 2009, 15:10
- - cornflyer   на форуме нет внятного описания как работать с IAP...   Jan 29 2009, 12:47
|- - Сергей Борщ   Цитата(cornflyer @ Jan 29 2009, 14:47) вы...   Jan 29 2009, 15:31
|- - zltigo   Цитата(cornflyer @ Jan 29 2009, 15:47) на...   Jan 30 2009, 08:48
|- - ar__systems   Цитата(cornflyer @ Jan 29 2009, 07:47) на...   Mar 16 2009, 02:31
- - Nixon   Кроме документации существует еще и application no...   Jan 29 2009, 13:14
- - Сега   Кстати да, интересная тема. Может ктонибудь объясн...   Jan 31 2009, 16:32
|- - Сергей Борщ   Цитата(Сега @ Jan 31 2009, 18:32) то есть...   Jan 31 2009, 16:36
- - cornflyer   внутренний flash стоит использовать для хранения р...   Feb 2 2009, 07:21
|- - Qwertty   Цитата(cornflyer @ Feb 2 2009, 10:21) вот...   Feb 2 2009, 07:46
|- - yuri_t   По поводу IAP можно посмотреть здесь: http://www....   Feb 2 2009, 08:22
- - cornflyer   преимущества софтового i2c : - софтовый i2c меньше...   Feb 2 2009, 11:17
|- - zltigo   Цитата(cornflyer @ Feb 2 2009, 14:17) со...   Feb 2 2009, 12:48
- - cornflyer   согласен. перечитал еррату - действительно с i2с в...   Feb 3 2009, 07:47
- - bigarmer   RE: как работать с IAP?   Feb 7 2009, 07:32
- - TanT   Позвольте задать вопрос в этой теме касаемо IAP. В...   Feb 18 2009, 12:27
|- - zltigo   Цитата(TanT @ Feb 18 2009, 15:27) а сколь...   Feb 18 2009, 18:16
- - TanT   Я так и думал . А касаемо стирания одного сектора...   Feb 19 2009, 05:49
|- - MrYuran   Цитата(TanT @ Feb 19 2009, 08:49) И вообщ...   Feb 19 2009, 06:06
- - TanT   Цитата(TanT @ Feb 19 2009, 08:49) И вообще имеет ...   Feb 19 2009, 06:45
- - MikePic   TanT ЦитатаОднако, всё таки кто-нибудь сможет отве...   Feb 19 2009, 07:11
|- - zltigo   Цитата(MikePic @ Feb 19 2009, 10:11) А пр...   Feb 19 2009, 09:59
- - TanT   ЦитатаПроизводитель документирует 400 - их и нужно...   Feb 19 2009, 10:04
|- - zltigo   Цитата(TanT @ Feb 19 2009, 13:04) Сколько...   Feb 19 2009, 10:33
- - TanT   Спасибо большое, именно это хотел услышать. А ра...   Feb 19 2009, 11:22
|- - HARMHARM   Если уж хочется что-то поделать пока идет стирание...   Feb 19 2009, 11:41
- - Denisvak   Позвольте задать вопрос в этой же теме дабы не соз...   Feb 24 2009, 14:18
|- - etoja   Прилагаю подробную инструкцию по IAP для использов...   Feb 24 2009, 15:18
- - Denisvak   Цитата(etoja @ Feb 24 2009, 18:18) Прилаг...   Feb 24 2009, 16:26
|- - Сергей Борщ   Цитата(Denisvak @ Feb 24 2009, 18:26) буд...   Feb 24 2009, 18:32
- - TanT   Вопрос в продолжении темы IAP: команда 56 - сравне...   Feb 26 2009, 05:05
|- - etoja   Цитата(TanT @ Feb 26 2009, 08:05) Вопрос ...   Feb 26 2009, 07:21
- - TanT   Если сравнение гарантирует 100% выявление ошибок, ...   Feb 26 2009, 07:52
|- - KRS   Цитата(TanT @ Feb 26 2009, 10:52) Если ср...   Feb 26 2009, 11:05
|- - etoja   Контрольная сумма нужна обязательно, поскольку в м...   Feb 26 2009, 16:12
- - Denisvak   Цитата(TanT @ Feb 26 2009, 10:52) Если ср...   Feb 26 2009, 17:02
- - TanT   ЦитатаКонтрольная сумма нужна обязательно, посколь...   Mar 2 2009, 06:16
|- - etoja   Цитата(TanT @ Mar 2 2009, 09:16) Большие ...   Mar 2 2009, 08:04
|- - HARMHARM   Цитата(TanT @ Mar 2 2009, 08:16) Вообще з...   Mar 2 2009, 09:56
- - TanT   ЦитатаЗапрет прерываний - требование не обязательн...   Mar 2 2009, 12:23
- - Denisvak   Сергей Борщ и etoja Спасибо Вам за помощь все рабо...   Mar 3 2009, 20:15
- - vesago   Прошу совета по сабжу. Я использую LPC2214. C 0 по...   Mar 15 2009, 17:31
- - GetSmart   Ну дык если стёрли нулевой сектор, то стёрли и век...   Mar 15 2009, 18:02
- - vesago   Я думал, что если начало прошивки сконфигурировано...   Mar 15 2009, 18:10
|- - HARMHARM   Цитата(vesago @ Mar 15 2009, 20:10) Я дум...   Mar 15 2009, 19:23
|- - GetSmart   Цитата(vesago @ Mar 15 2009, 23:10) А как...   Mar 15 2009, 19:34
|- - IgorMarx   Цитата(GetSmart @ Mar 15 2009, 23:34) В в...   Aug 27 2009, 19:57
- - vesago   Спасибо, все понятно.   Mar 15 2009, 19:53
- - TanT   Вопрос к etoja по поводу записи, точнее верификаци...   Mar 17 2009, 06:19
|- - ar__systems   Цитата(TanT @ Mar 17 2009, 01:19) Вопрос ...   Mar 17 2009, 11:42
- - TanT   а вы правы, ar__systems. частота стояла из старого...   Mar 17 2009, 12:14
- - HARMHARM   Цитата(TanT @ Mar 17 2009, 14:14) а вы пр...   Mar 17 2009, 12:16
- - KRS   Цитата(TanT @ Mar 17 2009, 15:14) Паузы н...   Mar 17 2009, 12:17
- - Wano   Подскажите всё ли правильно делаю,чтобы зашить в L...   Aug 3 2009, 09:32


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 11:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016