|
3Chipcoin
[轉貼] 第一次使用ARM,遇到以下問題,望各位大大為我指條明路:
H: O. C& x: s7 A- \8 p7 m+ T" ]. v8 U3 R
寫Flash函數如下:
9 ^: f- i( C2 d( `: y7 {$ Y3 _! A+ Lint Write_Page(int *Buffer/*數據源指標*/)
- g0 P' p" w* m* S{
& U6 h7 O9 y/ S7 x+ d- I unsigned int *Flash_Address;
. d G3 P' \- k+ H% J9 t int i; 3 V3 I/ _( y% z" h
/ h6 a* U; u" S2 o
6 U, k* p* R6 J4 v; ]/ V" Y9 _ if(AT91C_BASE_MC->MC_FSR & 0x01). n, m$ E0 A6 {3 A
{ \% P7 v! s3 Y, O) e4 B
, I4 y% G0 K5 V& X3 w7 b$ F }) L* O$ P J8 U9 l
else& `+ }& g! b' p) F! j% T) n; Q- _
{- g9 S: x% l9 h2 u8 R9 ]) b
return 1;
+ f# s6 v+ O, j- O* \* \% D- G; N }
9 e/ d0 y! }- Z2 v+ U /// V' |6 r( V3 t% q, W# K
Flash_Address = (unsigned int *)(0x100000+FLASH_SAVE_PAGE_ADD*256);
7 J7 `, j& ?. t. v
. y2 z8 f# @2 b* w4 e //3 j' {! N4 P3 F8 [
for(i=0;i<64;i++)
; L+ F" a" U% j M! X, V: o0 |" } {+ ]* f8 Z/ e. }9 ^0 J5 B+ L
*(Flash_Address + i) = Buffer;
$ X3 X3 {3 |" G8 ?% N1 x }
& \& p* G# c0 A& k& T7 P 5 U# m+ A: K1 g# C
if( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 )
( \, [9 U+ P5 a$ S8 q; ~) R4 `0 y2 i1 ]( N {
* S6 @6 J+ a" P8 [6 m. t' x# |5 {: } return 1;1 k: v/ r9 M* [8 n
}
! z+ y; m7 A- T/ k 5 B$ n9 T" `9 ~9 W _
AT91C_BASE_MC->MC_FMR = ((0x48)<<16) | 91C_MC_FWS_1FWS ;
5 ]8 M+ c0 O" @/ g4 U//108us ,wait state 2 cycles
( U7 z' V* H% ^5 o
) w) T' V! B! H* h3 X+ c' t AT91C_BASE_MC->MC_FCR = ( 0x5A <<24) | ((FLASH_SAVE_PAGE_ADD<<8)&AT91C_MC_PAGEN) | AT91C_MC_FCMD_START_PROG ;//write page
2 ^# P) w8 C( b2 S+ K9 ? , o/ T) a2 U2 a3 e$ g
! S" _0 C7 z% |# u; N t
while(1)
4 s) A' I! L. u# o1 ]$ T {
% [0 p! p; k1 b- Q+ q0 o$ J if(AT91C_BASE_MC->MC_FSR & 0x01)2 Y& T5 r6 ^8 _ h
{ % ~3 d0 }( v1 ?8 x4 x
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_LOCKE)/ t7 Q# M( g2 N! ?$ a3 x3 Z& h. A) s+ R
{
7 ^- j9 Z2 x# D* b return 1;% ~) ?0 @1 I# d( [8 A
}
3 X8 ?! c* C. l if(AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE)
" e- ?# j) y- v& x% d; ~6 M {
; r9 _# q" q# Y' f return 1;
2 m0 j, P) R- `% W }7 E# c8 ~# D6 o1 M
" I0 n! x; P; X; ?/ \& u1 }
break; z/ Z4 d& P }9 E/ ^8 D% `! U
}//if
& i \/ ^6 d6 r7 n- ~7 x } //while: f. E. c4 p& m* F- Q9 f
1 @5 o! G% @! `7 }$ E9 }0 @
return 0;
7 T1 Z+ u9 P& r4 G Y* M, g+ E) ^} //Write_Page
* x4 U% ^- H; L( h/ n0 h9 M% L; ~# z3 k1 n6 I7 A; v- z
執行完這段程式以後,程式就跑飛了,不斷地進入未定義指令中斷,我把看門狗打開也不能在超時以後重定系統,但是資料確實已經寫入Flash,斷電或者是按reset以後,從指定的位址�能夠讀出寫入的資料。 |
|