|
3Chipcoin
[轉貼] 第一次使用ARM,遇到以下問題,望各位大大為我指條明路:
+ D( l' g1 D7 U, N3 ~9 Q2 b3 [/ }. c& {7 n' o* _
寫Flash函數如下:5 w5 U( }. m1 y0 ~! `' L. o8 U
int Write_Page(int *Buffer/*數據源指標*/)0 Q% y/ [# L0 v/ i% h4 q
{
# ?+ o+ P6 e9 l; I7 o unsigned int *Flash_Address;
- w- }% f2 H2 l6 R& N: Q5 J int i;
' X4 G/ G' A8 f ?* O
8 T+ }% q) @" s' f0 Q 8 n# [2 ^' |* a( p1 C
if(AT91C_BASE_MC->MC_FSR & 0x01)7 \* }! q, i; F6 ?# l$ b
{, |5 E: G$ ]" C" I; m y1 O
) P6 W0 D0 Z. P5 f, Y
}
* f; Z# A6 l; V( d- c) X else
+ O) X& W; ~ d0 x, {" c {
+ |5 E5 ?7 |4 S: \3 t return 1;2 J. V! a8 S- K
}
* x4 w" M- @0 W; @3 R //+ V& G7 A6 y6 }: `3 Q6 ?
Flash_Address = (unsigned int *)(0x100000+FLASH_SAVE_PAGE_ADD*256);
% D- p# E0 R- L. V) H
! R' |. Q" o7 T; [; E) v) R" s //) \, I' _7 {7 `5 n+ G, y% d
for(i=0;i<64;i++)
, g! y4 h5 n) ~% N! q { ]6 n2 H3 M5 j6 P- L2 w# V: b/ R/ B
*(Flash_Address + i) = Buffer;
) O8 {9 e" Z2 C/ Y1 L: y% H }+ o: H% K% @+ h0 T# h
8 \8 H$ i, o/ Z7 k; G' B8 v, o if( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 )' }& n3 _' W& k3 L- ?( r
{ - Z$ n; i8 L1 q) `# s+ _/ O; v
return 1;- X1 A$ c# n$ D8 O3 e' {2 v
}
) g+ e: N3 I- h3 V* a [1 g0 a1 q
3 w9 j2 F6 @: e) H x$ }+ P# [! r AT91C_BASE_MC->MC_FMR = ((0x48)<<16) | 91C_MC_FWS_1FWS ; . B6 U! |5 w/ P- M/ v# P
//108us ,wait state 2 cycles
5 ^7 g/ q& x& o1 {( _ I; u0 Q$ R" ~7 g" v
AT91C_BASE_MC->MC_FCR = ( 0x5A <<24) | ((FLASH_SAVE_PAGE_ADD<<8)&AT91C_MC_PAGEN) | AT91C_MC_FCMD_START_PROG ;//write page
% D9 {& b5 t% V4 W, \8 A
- V# R$ G0 T" L: x( T2 d5 b& ^! X5 ^
while(1)
( B1 ?( C% t7 q/ N {
4 _0 i- r: b! g b, q' R' U: Q* K if(AT91C_BASE_MC->MC_FSR & 0x01)( ?1 R1 i% P( X
{ + Q+ v! v6 z) O+ }1 q( q
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_LOCKE)
+ [! Y! `: ], o6 U {
7 b$ A$ T# B) F+ ]! B4 G return 1;6 d# P J) P9 v
}
9 p/ e( [6 e' L0 P3 N& b' q if(AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE)1 [2 [6 p% U( y% `% w% O% H2 D( {' r
{ : e" _/ l* J5 _3 {4 d& ~( [: _( l
return 1;: K; c0 A( ]3 `/ `& j/ O" v% k
}/ K, e9 N$ k4 @ S& X0 o
4 u: f. _8 ?& ]( d break;; z3 Z& U, @( v3 w1 ?
}//if
( f/ q. W2 {) `9 c } //while# b# f+ l: y5 u) a4 n
8 M$ j1 ?# Y- T5 A6 l3 w- O
return 0;
2 O" R8 e! ^# N5 m& s4 p( Z1 F: O0 w% u} //Write_Page9 ~7 |8 _+ G" b0 [4 r
I. y% o# ?* g- B) ?執行完這段程式以後,程式就跑飛了,不斷地進入未定義指令中斷,我把看門狗打開也不能在超時以後重定系統,但是資料確實已經寫入Flash,斷電或者是按reset以後,從指定的位址�能夠讀出寫入的資料。 |
|