|
3Chipcoin
[轉貼] 第一次使用ARM,遇到以下問題,望各位大大為我指條明路:
6 c" X7 h Z' Q3 W. |9 U( Q
5 p' a# q3 [3 W6 D" z, I 寫Flash函數如下:
! t3 P5 P" Z+ A3 f/ qint Write_Page(int *Buffer/*數據源指標*/)
, j9 ~4 e7 }( ^( z/ a3 d0 P# s+ d{# V; }" C# O% B5 |+ k: g$ @3 N
unsigned int *Flash_Address;
6 \) p( N' X$ |# y/ @ int i;
( P+ X! |6 X: s* s7 r: W0 m( M
" U( h$ o6 o' g8 t/ L! K : \/ W' [) u* W' \7 }# j! h2 N
if(AT91C_BASE_MC->MC_FSR & 0x01)
; s& ?$ \/ R, e7 l: b8 w% N2 T$ g {6 T' c9 r: p9 d4 ?
$ H4 O6 f' e1 e! T# m2 z+ A } L1 \- y3 f4 ^! ]+ [3 d
else
6 H: P" x0 E/ S' H {: P2 F9 n4 f* A( w: ~' v5 n. f' g
return 1;
* i& U; J8 I, N$ Z5 c }/ }) g1 G: A- @9 ?8 o9 P2 y
//6 v% a: k9 a% _% a5 k9 A2 U9 N
Flash_Address = (unsigned int *)(0x100000+FLASH_SAVE_PAGE_ADD*256);" z4 W1 b9 T0 J0 i7 R5 }7 n4 ]1 Q
4 W4 F" H% Q# b- |% ? //2 B: N! j; a' H
for(i=0;i<64;i++)8 Z' D' v- L! E6 r7 r! e
{4 C& h5 \% I2 N
*(Flash_Address + i) = Buffer;
* D% V I+ v6 C9 L2 c1 a1 o1 ^ }
) ~& P# q% D3 b$ H! l5 o ' \2 h1 b, R9 r" p. r5 G
if( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 )
1 p; r! R8 `# s$ a: U {
5 B) D* f, g" p$ \ return 1;$ i p3 G' d. G ~
}
8 X7 [0 d8 ^. N+ M k8 M8 _6 C/ h7 `' [
AT91C_BASE_MC->MC_FMR = ((0x48)<<16) | 91C_MC_FWS_1FWS ; $ b1 ~: [0 q5 F6 U) t! K
//108us ,wait state 2 cycles
) e6 c; y* Z" T! _4 A3 {7 [% n
3 S% x; E5 @, r* e3 i AT91C_BASE_MC->MC_FCR = ( 0x5A <<24) | ((FLASH_SAVE_PAGE_ADD<<8)&AT91C_MC_PAGEN) | AT91C_MC_FCMD_START_PROG ;//write page
5 y) |9 W' N; ?4 ?
, V! A0 t4 [% {. {$ y9 t9 x4 B: h# E
while(1)
% n; H3 ]6 U/ h3 _ { 3 f: U6 x9 [* |, B6 z) ]
if(AT91C_BASE_MC->MC_FSR & 0x01)* B, v7 n1 L8 z$ b
{ ; b. E' L% Q; K2 o! V2 ]" h
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_LOCKE)1 C' g3 ?; U4 T$ t, G) m3 a
{/ q( e% h5 d7 Y* W! s" @) }) H [
return 1;
' B' a: m# Q$ r5 j2 j }
7 o2 ]- Z6 U) b C) G: I if(AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE)
0 d% V3 Y% `7 h5 K6 g3 q' i ^: h! G {
3 `. g p' D( Y1 ^ return 1;
# a; V: K: i1 n& P2 f5 c* t }
" v$ g7 R% @! Y+ z' H: r; `) z ; R" r, V5 B0 S# J7 M t! I
break;' s1 [9 F% T7 K' W7 [* J; i
}//if
" a* q0 y. o1 W, L, y$ q } //while
' @, I- C7 s; G2 ?. A, D6 T 2 z3 P0 Q; p: C- E: n( ]
return 0;
2 c6 z/ J9 L0 \+ u; O, Y5 W$ U} //Write_Page
7 {& ?# X! @# V* q, L# o1 f! t3 {
/ [( }# Z. Y5 }* q8 r! {' H2 Y2 \執行完這段程式以後,程式就跑飛了,不斷地進入未定義指令中斷,我把看門狗打開也不能在超時以後重定系統,但是資料確實已經寫入Flash,斷電或者是按reset以後,從指定的位址�能夠讀出寫入的資料。 |
|