|
3Chipcoin
[轉貼] 第一次使用ARM,遇到以下問題,望各位大大為我指條明路:$ K2 m& e- f7 \0 t! p( Y& I
5 K9 L8 b- q* c, H. r/ N
寫Flash函數如下:
" W* }3 @- Y6 Q9 Qint Write_Page(int *Buffer/*數據源指標*/)
0 j$ c$ R+ r( x {' W) k# v7 g7 u{* t5 [. M7 X$ d; K3 @
unsigned int *Flash_Address;
. `( T9 t* S: L! ]7 {8 w int i;
, v# |+ A W! H! e$ O 2 O! L# o7 d! g8 M o
+ a+ L5 k1 W$ u# W
if(AT91C_BASE_MC->MC_FSR & 0x01)7 a( I) j. o$ q+ {* [5 o; f7 I3 w
{: n! ~/ O4 z' A9 \( t- c) W" L8 i6 y
5 z/ u9 b5 D; V( {5 @* \
}
" c- q2 Q+ n& @) H0 V, G" E else
8 W% ^3 q% f$ H# S# d( b) N$ r7 c {/ n: {# k0 v% O
return 1;7 `/ u) A9 R( W7 t1 ~& B; |) u
}5 [# o: `& P5 f% F+ Q7 l' t- b
//2 m# K! ?. f, J( K
Flash_Address = (unsigned int *)(0x100000+FLASH_SAVE_PAGE_ADD*256);
& }; I9 i' n# W( b& s8 l0 G: X: }+ M
+ H0 h/ B9 ]0 v4 r; `, ]' L% I //
! R( G1 ?# f9 ?1 p5 p0 J for(i=0;i<64;i++)$ q5 I$ i8 W4 d# ~8 S& |
{$ A" t+ j$ F3 }% c
*(Flash_Address + i) = Buffer;
! ^2 D+ K3 k/ W% I" Y+ g2 @ }& P9 v% M; B" q. V6 f( y- ^3 d
' G, {9 D- J0 T! k6 P if( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 )
; g4 M3 u; a5 v/ A( M { ! ]9 v% P, Z3 k5 e7 Q! c7 _- C
return 1;7 s% W/ I' ]6 t1 c
}7 V! Z" E6 ]# y
& z$ {7 U5 p! C AT91C_BASE_MC->MC_FMR = ((0x48)<<16) | 91C_MC_FWS_1FWS ;
# Y; k2 S4 \- B2 u//108us ,wait state 2 cycles( G' A. E c' C( j
. B1 `5 a+ a, m, v2 p
AT91C_BASE_MC->MC_FCR = ( 0x5A <<24) | ((FLASH_SAVE_PAGE_ADD<<8)&AT91C_MC_PAGEN) | AT91C_MC_FCMD_START_PROG ;//write page4 i9 F' e* G2 v1 f8 {
3 c3 c8 [6 Q% n* E5 O0 ?( Y- R, ~% U2 x1 n+ t
while(1)9 [7 f' `* j4 Y8 h: b% F7 l C E8 `8 r
{ ; _, N* s: | ?; w) k
if(AT91C_BASE_MC->MC_FSR & 0x01)
8 Y0 p9 L# W! @- u8 A o { $ b5 Q9 q$ d z# F
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_LOCKE)
- i/ h& T8 U7 c* D {6 ~0 ^, z) l0 C( M+ T
return 1;
5 N" j( L7 e$ }% x& H! g }
' j) \0 _, I$ t P0 n9 M- q if(AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE)
3 H1 ^1 G$ I" f8 e- c {
& p( V, r7 _" |2 l* B$ \7 b! X8 K! p return 1;. J0 n" v2 p/ q
}
! l" y! F9 X( j" d* t* m9 |" A 8 Q# o! P2 B0 F6 c$ j
break;
! S: h6 z: E0 p. p }//if
# z9 t9 p0 y2 } } //while
5 c! Y7 H. t0 P9 C" C6 U( ]8 l
. Y% w- ^ n+ H2 d! E ] return 0;
) c. {" c d7 V" r1 K1 j} //Write_Page
% s4 L. Z2 _5 p3 [8 L2 s/ T; ?5 R" C& c$ l# C+ A- c
執行完這段程式以後,程式就跑飛了,不斷地進入未定義指令中斷,我把看門狗打開也不能在超時以後重定系統,但是資料確實已經寫入Flash,斷電或者是按reset以後,從指定的位址�能夠讀出寫入的資料。 |
|