|
3Chipcoin
[轉貼] 第一次使用ARM,遇到以下問題,望各位大大為我指條明路:
1 y; Q0 y; e7 O2 @/ `- o" z% _* Q* K$ i3 |
寫Flash函數如下:1 r7 f9 p% I+ K: n; w4 N* g3 Q$ P
int Write_Page(int *Buffer/*數據源指標*/)
' I! W& i% Q: M7 r{
% c5 ]4 X, r: A2 D6 ~ unsigned int *Flash_Address;
7 X5 ?3 M% B0 j int i; " l; W h$ x4 I% ]+ C* j- `6 ?
& J6 U3 l! ^# Y) x. V% l # Q/ j( T/ P R$ F
if(AT91C_BASE_MC->MC_FSR & 0x01)) N- l4 i5 b. w1 p, G; P
{- C( @1 o6 N9 r% H+ j
* V1 }) R/ j4 k+ e2 ^* K! N
}
5 s. |8 a8 t% T else: A. X- d+ L6 Y" V* @0 D) l. j
{% H- s$ h' _4 Z" I. a
return 1;
3 p" q1 P$ X% b6 @0 i2 d! ^ }8 W( ?4 T/ Q6 j- Z# \! h, i7 V
//) X9 a/ S( m6 q& c
Flash_Address = (unsigned int *)(0x100000+FLASH_SAVE_PAGE_ADD*256);3 I* r. V6 E) n) \* z; Z
7 L; a+ f' x+ X" A. R& @
//0 H. O- k: e3 U; [8 J
for(i=0;i<64;i++)8 }1 V! i8 U: B2 F" C# A$ s0 @3 S
{" z7 v9 }% `0 h1 P2 c: w
*(Flash_Address + i) = Buffer;! U1 Q; _0 x1 p+ l4 K
}6 v8 k9 ]3 o: y, _0 J
7 B/ J5 B! u- v: w9 N# \9 _; \- p if( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 )' |' t1 ]. {7 ]; R7 |
{ 2 n1 X0 O5 e; c, ]6 S
return 1;
- u8 z% ` t+ J( x' ?$ I# K; Z }
4 X( m5 e, I% k2 r* K- R0 W $ ?! t; ?5 l( T; C6 t) `
AT91C_BASE_MC->MC_FMR = ((0x48)<<16) | 91C_MC_FWS_1FWS ; # j$ |( f! {" _$ k0 ~& W4 `, {' V
//108us ,wait state 2 cycles1 J, N+ i% u0 w' A" R( o- O! K
% Y6 t9 e8 D. F# T8 G5 F
AT91C_BASE_MC->MC_FCR = ( 0x5A <<24) | ((FLASH_SAVE_PAGE_ADD<<8)&AT91C_MC_PAGEN) | AT91C_MC_FCMD_START_PROG ;//write page
" i9 u o6 e- k8 S+ X) Z7 c
3 ]" X W" U3 R: @- B/ d- Q: g
M# S4 I% M+ t2 I1 I# \+ Z while(1)
6 m, F. }* M( w" z, x6 e6 c7 r {
* k5 ]# ]$ b" s5 j if(AT91C_BASE_MC->MC_FSR & 0x01)* Z0 S+ z3 v Q9 c/ j
{ 3 `+ P2 z+ ?! b7 x
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_LOCKE)! Y( [( Q" G" L- ~' h+ y
{
% G4 C3 q0 v5 c9 S return 1;
( W" \1 Q# I' t& l3 g+ W- `1 ~% a }
5 n; a: W$ Z2 n r) \8 I# k9 B if(AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE)
# c$ G% e% D8 h' L& c {
. Z' y6 r+ O; x o return 1;. s; A @" i" R! x+ N
}
5 Z( c7 W+ ^: `% p/ W
b0 W, ?; [2 S2 H9 G break;: b) w |5 ~0 r, U. z( z3 O
}//if : X8 a9 t' N$ Y4 k0 g
} //while& L5 R9 [4 n6 B$ e! z
; ~% m! u' k# x' o( y
return 0;
; `7 ` P& w, R8 K1 Y" R$ I} //Write_Page8 F, i) ^8 E" ~& ~% K3 U1 G: m! F
6 Q# U# r% a/ ]' u5 p) X. G
執行完這段程式以後,程式就跑飛了,不斷地進入未定義指令中斷,我把看門狗打開也不能在超時以後重定系統,但是資料確實已經寫入Flash,斷電或者是按reset以後,從指定的位址�能夠讀出寫入的資料。 |
|