|
3Chipcoin
[轉貼] 第一次使用ARM,遇到以下問題,望各位大大為我指條明路:
; q( W: c3 C' z! m9 c8 G+ [8 k; C9 @# ` }
寫Flash函數如下:4 j b1 h5 k6 G9 D3 d, H, e5 u6 A9 k' m
int Write_Page(int *Buffer/*數據源指標*/)
9 v0 X! [0 T2 r{1 }4 w, m/ T# o- t1 O
unsigned int *Flash_Address;1 {; @$ i) G; [) r2 m0 \$ E) l
int i;
# M! B9 V# f4 H& a: {
0 D: S: f. z$ y( {$ c9 }3 P. [7 ^ + H. b/ R3 d) S9 j) A
if(AT91C_BASE_MC->MC_FSR & 0x01)
" v* s. R: ^: _. O; e {6 n) i$ I" p/ G% F5 K' F! S
, v( d! N+ r6 g& _4 d) }# u }
4 b* x1 G; U# q2 Y# n else- C, g% V: C7 Y
{3 @/ Y% D. Y* m2 g* l3 j
return 1;1 }0 t5 Y+ M8 n8 [1 T% ]& x# W1 @! [
}, \* I, Q+ a5 f
//
4 F. f; ?5 L5 a( }$ B6 q: C Flash_Address = (unsigned int *)(0x100000+FLASH_SAVE_PAGE_ADD*256);
$ o0 ]; d0 g- s! d: r ?
0 a- j) [8 k" e // [5 ^1 F1 ~0 t7 K* E' k5 n
for(i=0;i<64;i++)6 ~: Z g' k( z
{
1 ^. X- K# k3 Y b' l, b *(Flash_Address + i) = Buffer;; M+ k- Z9 u* ~9 B8 _- `2 C
}
7 {; C( v: `$ ]4 ~6 Q/ J( e7 _ ! m8 W( \/ _8 h2 q
if( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 )7 s& u! J" K4 o' L* t( `$ M
{
% M3 G S V0 C$ v6 r6 y9 ^6 q2 q return 1;
% D$ W3 Z$ P, _2 N7 R }7 L4 m* Y$ ^+ e5 c+ @
$ L& P5 i- \+ D z' x
AT91C_BASE_MC->MC_FMR = ((0x48)<<16) | 91C_MC_FWS_1FWS ; ; [' N, u: {' e! B
//108us ,wait state 2 cycles, {) L5 v4 L$ ^" Q2 X. m
7 l& w- M3 ^1 b
AT91C_BASE_MC->MC_FCR = ( 0x5A <<24) | ((FLASH_SAVE_PAGE_ADD<<8)&AT91C_MC_PAGEN) | AT91C_MC_FCMD_START_PROG ;//write page
$ p5 i9 o z9 b. A/ o) P3 N
) i8 p* t L8 K5 w- k
! Q0 ^( z5 D: \# S# ], B7 W3 E while(1)
, L* P8 W6 e/ f* h" S$ W2 N$ H { . y( `% R4 B* z0 `( n! q- v
if(AT91C_BASE_MC->MC_FSR & 0x01)
" Z2 x1 H W/ F2 a* d* h& E1 W { 2 K( x9 P) y6 n. L6 x$ O( u; [0 w& |: o$ J: u
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_LOCKE)
5 t3 m7 ]% t5 b4 Z' c" Q {! N7 R& S3 ]' I9 O' M4 [' @) A
return 1;. C8 Q& t8 q4 U( c9 K& r
}6 {2 _" u! f+ e9 r. ? \
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE)+ N) a8 d# u/ n* U* q* c
{ 1 T1 r9 X& N, L2 X/ i2 ]
return 1;: {" T7 N, H5 s
}& { s: X3 ~$ I o5 m
: x+ z1 j) E1 p& }8 j
break;1 q. J; {0 j/ J8 Z. [9 O2 r( Z" T
}//if
1 J: r9 b' `! I9 V8 `# k } //while+ Y- s% m0 |( {" A9 j
D' \, | e8 |+ b1 u return 0;
# y1 {2 z4 I; f- g* i f} //Write_Page
" M7 ^! a9 v) V+ G9 R
2 M. u4 K4 V6 P% c$ v x執行完這段程式以後,程式就跑飛了,不斷地進入未定義指令中斷,我把看門狗打開也不能在超時以後重定系統,但是資料確實已經寫入Flash,斷電或者是按reset以後,從指定的位址�能夠讀出寫入的資料。 |
|