|
3Chipcoin
[轉貼] 第一次使用ARM,遇到以下問題,望各位大大為我指條明路:8 H( {4 Z( r+ s) ~% ]' {
9 o& k- q, c- B/ ?) u1 d Q- `
寫Flash函數如下:
, D4 ^! E/ ~+ I* ^* B- hint Write_Page(int *Buffer/*數據源指標*/)6 l, X3 A. u* A" Y' f
{: ~' [8 ^6 [) H6 c( {% k! T8 ~
unsigned int *Flash_Address;
/ X3 ]0 p/ o# ]) P. [ int i; . \' F) \; W& m* b
2 }0 u; n" S, A" \/ s6 w
5 E5 q, p+ D# o W if(AT91C_BASE_MC->MC_FSR & 0x01)
V- p! D) J' v' q6 L8 v1 v1 R$ q {* ~, \) X; E, P5 {- }
/ v# a* X6 L) Q/ F+ a* z6 F
}7 s# v |- k0 g- @
else
z* s" p5 F- s; ~6 ? {$ h5 t' ~* Z0 w8 v. [! `4 w4 |
return 1;
. l1 |9 e9 F D- e/ a& m; i }, k: [* N$ v* k; W0 u7 ]( P
//, p) ?0 G1 ^2 h I$ P1 q
Flash_Address = (unsigned int *)(0x100000+FLASH_SAVE_PAGE_ADD*256);
6 L% l" c7 m# h' A/ p9 Y8 y
5 @5 r1 C% `- h9 N% o //
: V" k) q" T( l) i1 @ for(i=0;i<64;i++)7 r$ @. _9 ^* d9 M% u
{
8 L6 X. W" B9 J& G. r+ d; `9 u *(Flash_Address + i) = Buffer; B; B. |1 f( g. A5 p7 T2 K
}6 b& i; o1 ~* }# X8 E' b
4 L% J; q: h9 b- p, i. |+ y' g if( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 )
/ Y' E/ l3 \; j {
" f# u2 u7 U% \8 z" j; G( f% Q1 l return 1;& c1 Z, B) F$ S" x6 s b3 e. t0 W7 k# Y
}; P2 P7 T2 H0 m: K% o9 j! y. d5 l
6 d/ \; s( c3 V2 z" I AT91C_BASE_MC->MC_FMR = ((0x48)<<16) | 91C_MC_FWS_1FWS ; 3 l+ {" P8 E0 x: A" p2 U" C
//108us ,wait state 2 cycles+ ?; V5 f- d+ j- `' z
) {7 ]4 _3 @9 j" \( g
AT91C_BASE_MC->MC_FCR = ( 0x5A <<24) | ((FLASH_SAVE_PAGE_ADD<<8)&AT91C_MC_PAGEN) | AT91C_MC_FCMD_START_PROG ;//write page- I8 R% i8 z" b9 Z. T) R
- ]$ O' ~1 Z; O( W$ T6 g
7 y+ `( X# h/ {6 Z' S while(1)
) l" |) j# W) w2 W! f- ^" j {
) N8 z, ?& ~" u5 z8 `, h3 S if(AT91C_BASE_MC->MC_FSR & 0x01)
( S& _2 V, U: {. [! b& y { 4 V2 v3 k3 o5 j
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_LOCKE)
% Z7 T0 b1 P: P' S" L& N {, `3 E5 M1 o/ E9 N
return 1;
@6 k& Z, [8 ?7 N+ x }4 M6 `" o7 R2 v% E1 R. }8 j+ j
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE)8 F' e5 g) o/ p
{ ; ]9 E+ o4 R$ S: w, E; [
return 1;! Y: c0 E2 [9 o7 ^
}
1 w8 X6 w8 j! q5 o5 D ! j7 G) b7 {) B5 ]2 [) K
break;9 x! x# [3 L+ r1 {/ N2 X5 K
}//if - G# n5 p+ N- Y6 Y$ U) Y4 [9 A
} //while* D2 q5 p( D. b8 m$ A$ [4 w
- D0 `, g6 r, h) i* A return 0;
/ r, p+ }3 v3 Z. S} //Write_Page
' t- ]& P8 v8 R- r C2 r) D5 P" h% @. E# d& B1 R
執行完這段程式以後,程式就跑飛了,不斷地進入未定義指令中斷,我把看門狗打開也不能在超時以後重定系統,但是資料確實已經寫入Flash,斷電或者是按reset以後,從指定的位址�能夠讀出寫入的資料。 |
|