/****************************************Copyright (c)**************************************************<br />** IAP 写内部FLASH函数 API<br />**<br />*******************************************************************************************************<br />*/<br />#include "LPC214x.h"<br />#include "BlueFengUser.h"<br />#include "iapuser.h"<br /><br />OS_TID Iap_Task; /* IAP任务句柄 */<br /><br />#define SYS32Mode 0x1F<br />#define IRQ32Mode 0x12<br />#define FIQ32Mode 0x11<br />#define I_Bit 0x80 ; when I bit is set, IRQ is disabled<br />#define F_Bit 0x40 ; when F bit is set, FIQ is disabled<br />#define IAPMode 0x92 ;(IRQ32Mode|I_Bit)<br /><br /><br />static unsigned int sysreg; /* used as LR register */<br />#define IENABLE __asm { MRS sysreg, SPSR; MSR CPSR_c, #SYS32Mode; }<br />#define IDISABLE __asm { MSR CPSR_c, #0x92; MSR SPSR_cxsf, sysreg; }<br /><br />const unsigned int LED=(1<<24); //P1.24控制LED,低电平点亮<br /> <br /><br /><br /><br />void testiap(void){<br /><br /> unsigned char IapBuffer[256];<br /> unsigned int i;<br /> for(i=0; i<256; i++){<br /> IapBuffer = i;<br /> }<br /> os_dly_wait(1);<br /><br /> IDISABLE<br /> Erase1Sector(0x8000);<br /> ProgramPage(0x8000,256,IapBuffer);<br />IENABLE<br />os_dly_wait(1);<br /><br />}<br /><br /><br />void IAP_TASK(void){<br /> for (;;) {<br /><br /> //os_evt_wait_or(0xFFFF, 0xFFFF); /* Wait for an Event */<br /><br /> IO1CLR=LED;<br /> os_dly_wait(10);<br /><br /> IO1SET=LED;<br /> testiap();<br /> os_dly_wait(10);<br /> }<br />}<br /><br />void Iap_task_create(void){<br /> <br /> PINSEL2=PINSEL2&(~0x08);<br /> IO1DIR=LED;<br /><br /> Iap_Task = os_tsk_create(IAP_TASK, 2);<br />}<br /><br /><br /><br />
|