可以,我就这么做的!
RSEG ICODE:CODE<br /> CODE32<br /><br /> PUBLIC IFlash_Write_Page<br /><br />;--------------------------------------------------------------------;BOOL IFlash_Write_Page(unsigned int page, unsigned int *buff)<br />IFlash_Write_Page:<br /> SUB sp,sp,#4<br /> STMFD sp!,{r0-r3,lr}<br />L0_16:<br /> LDR r1,=L1_00<br /> LDR r2,=L1_88<br /> ADD r2,r2,#4<br /> SUB r0,r2,r1<br /> SUB r0,sp,r0<br /> STR r0,[sp,#20]<br />L0_36:<br /> LDMIA r1!,{r3}<br /> STMIA r0!,{r3}<br /> CMP r1,r2<br /> BCC L0_36<br /> LDMFD sp!,{r0-r3,lr}<br /><br /> LDMFD sp!,{pc} ;Goto ram for write IFLASH<br /><br />L1_00:<br /> MOV r2,#0x100000 ;IFLASH_ADDR_START: 0x100000<br /> ADD r3,r2,r0,LSL #8 ;IFLASH_PAGE_SIZE: 64dword = 256byte<br /> MOV r2,#0<br />L1_12:<br /> LDR r12,[r1],#4<br /> ADD r2,r2,#1<br /> CMP r2,#0x40<br /> STR r12,[r3],#4<br /> BCC L1_12<br /><br /> MOV r1,#0x00480000 ;MCLK = 48M, FMCN = 72<br /> ORR r2,r1,#0x100<br /> MOV r1,#0<br /> STR r2,[r1,#-0xa0]<br /><br /> LDR r1,L1_88<br /> AND r0,r1,r0,LSL #8<br /> ORR r0,r0,#1<br /> ORR r0,r0,#0x5a000000<br /> MOV r1,#0<br /> STR r0,[r1,#-0x9c]<br />L1_56:<br /> LDR r0,[r1,#-0x98]<br /> TST r0,#1<br /> BEQ L1_56<br /><br />; LDR r0,[r1,#-0x98]<br /> TST r0,#0xc<br /> MVNEQ r0,#0<br /> MOVNE r0,#1<br /><br /> BX lr<br />L1_88:<br /> DCD 0x0003ff00<br /><br />;-------------------------------------------------------------------- PUBLIC ARMDisableInt<br />ARMDisableInt:<br /> STMFD sp!, {r0}<br /> MRS r0, CPSR<br /> ORR r0, r0, #0x80<br /> MSR CPSR_cxsf, r0<br /> LDMFD sp!, {r0}<br /> BX lr<br /><br /> PUBLIC ARMEnableInt<br />ARMEnableInt:<br /> STMFD sp!, {r0}<br /> MRS r0, CPSR<br /> BIC r0, r0, #0x80<br /> MSR CPSR_cxsf, r0<br /> LDMFD sp!, {r0}<br /> BX lr<br /><br />;-------------------------------------------------------------------- END<br /><br /><br />根据你使用的编译工具和芯片做简单修改吧,这里提供思想方法!
|
|