|
3Chipcoin
[轉貼] 第一次使用ARM,遇到以下問題,望各位大大為我指條明路:
+ z1 b) M! }( V- m8 ]) c- ?
8 |0 ]4 b; H7 g+ ]; E; p 寫Flash函數如下:- ^6 w: M/ J- ~- q, R
int Write_Page(int *Buffer/*數據源指標*/)9 u9 v: S; X7 F
{- h) e5 h7 y9 m6 H# {3 l
unsigned int *Flash_Address;4 K% z2 A: L N6 i
int i; - k6 ]9 ?- O1 w9 s7 W3 M( }
( R: d0 N( ^' b+ ^$ y
; h+ s- w/ D" `* q2 t if(AT91C_BASE_MC->MC_FSR & 0x01)
/ C1 h) N5 f/ b% J {
5 U$ {9 s8 R+ A& @; o1 q. @* Z
' { i6 \8 V6 I8 E9 }* a9 b }( a3 v, n _' C, ?3 B2 O
else2 o, R- F5 v* [$ i
{
# h1 N3 ~7 K y/ q, @; Z return 1;/ D! d: `/ V8 `; X, C
}% Q! T+ C" ~5 x3 W# b+ g" d* a
//
1 s* e* }- z' T' {2 q& k6 @9 Q Flash_Address = (unsigned int *)(0x100000+FLASH_SAVE_PAGE_ADD*256);# d& l& m7 v2 w* A$ g
8 u* b* Z: ]( ?" s/ y+ [. o
//: A7 s, Q: o, g; q$ m
for(i=0;i<64;i++)
7 n" S' c6 x! ^. O0 N8 X {6 k; A$ t) ~' u0 s% G0 {0 Z P) ]
*(Flash_Address + i) = Buffer;
4 r* n$ o9 O& k5 g }
" f$ Q3 E4 `3 T7 n6 ? ' d2 h: z" a) u' S0 P1 n. Q
if( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 )
7 P7 H/ U/ e% G/ s* P6 { {
0 t) S6 _% A) m/ K, k; x7 C- | return 1;
. S7 B S* d2 O# y/ t+ c, x }: d9 n1 P4 {! z# A
/ a5 x- F+ b& K; _ AT91C_BASE_MC->MC_FMR = ((0x48)<<16) | 91C_MC_FWS_1FWS ;
. l- R+ j! l2 @, r" _3 h. y. f. P//108us ,wait state 2 cycles& Y2 w" Z$ F9 L4 `7 y8 o
$ e& [5 W. h( h8 l+ ?' R- p2 ? AT91C_BASE_MC->MC_FCR = ( 0x5A <<24) | ((FLASH_SAVE_PAGE_ADD<<8)&AT91C_MC_PAGEN) | AT91C_MC_FCMD_START_PROG ;//write page% h# z& [( C/ t
) K& B6 W- M" j
0 r3 u, z8 l4 y, N% E/ b3 c while(1)
' q5 }2 | B" }% d* P6 z' J( `, f9 A { 4 _6 S* h5 L0 Z' J( W
if(AT91C_BASE_MC->MC_FSR & 0x01)
& N; n+ \- ]4 ?9 S# k {
! s% |/ {, \* V if(AT91C_BASE_MC->MC_FSR & AT91C_MC_LOCKE)+ q5 t# P, d9 M' A% B* v5 U
{
9 ~2 j6 l( y# _4 [2 p- ` return 1;
" f8 B; m1 y/ X" q0 f }) C% `. F; p% Z8 r4 }. l/ {
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE)
3 z- J1 j! h2 X0 B( i k2 U { 6 t& E- S2 B% W- u- V6 Z
return 1;3 f+ u$ F4 C( _6 s! {
}
; q" e; {! R2 P1 d; R
+ t& e3 L/ c5 |5 J0 I break;
7 l1 ]4 w6 v) i0 O4 ] o5 C }//if
" t7 d5 N6 W& i/ v5 F7 _5 S3 A) i } //while9 ~: u# Y. @$ g' V m0 c
1 X: w6 u$ G% l g& v& M/ I
return 0;5 D' G+ ]8 D; F) h+ @* f8 g f
} //Write_Page
% e5 l$ a. W# X, L- M; d* P1 f
執行完這段程式以後,程式就跑飛了,不斷地進入未定義指令中斷,我把看門狗打開也不能在超時以後重定系統,但是資料確實已經寫入Flash,斷電或者是按reset以後,從指定的位址�能夠讀出寫入的資料。 |
|