|
3Chipcoin
[轉貼] 第一次使用ARM,遇到以下問題,望各位大大為我指條明路:
" m* q2 j- y- w. ^0 a$ ?# g9 P4 l* } {( k3 m' r, m! p
寫Flash函數如下:; h' }# E% N% V! s- O' {! e0 }+ m
int Write_Page(int *Buffer/*數據源指標*/)
/ k: P8 M7 z" q$ H! m! J* ^5 r{
\$ B8 J. I1 e3 Q& P unsigned int *Flash_Address;9 N. I( I0 o, a: E* g% ~; h
int i; 9 `2 O6 c+ [8 V) s& t" w- I
2 f" w1 a. w' b4 n/ G9 N
& L1 Z# a/ b6 M, M: | if(AT91C_BASE_MC->MC_FSR & 0x01)! ^- T/ [& o$ \7 C$ N' Z
{
& T; F0 y6 @, q b t
5 u7 G1 x( R8 m- f }3 S. u5 p# `% F! l! C+ \
else0 u6 d* ^6 `( v
{
( T* t& K$ O0 b. ]: N6 S return 1;4 i; d' k) Z5 @( D0 W. v
}# @4 m( P- E, ]' _
//1 e1 J1 i6 i0 T$ K2 h& W' J
Flash_Address = (unsigned int *)(0x100000+FLASH_SAVE_PAGE_ADD*256); d! K4 L9 e- Q0 o. | b
9 m' e( T; O4 Q- L! {1 Y /// g* e8 g, B' L8 U, V4 [
for(i=0;i<64;i++)" d- a* O, B) A1 _/ g$ h- f+ s
{7 W4 \$ a4 c5 u1 N, M
*(Flash_Address + i) = Buffer;
" }' ?5 D/ ^( j: [ M, j }
; _: |* S G) `9 K% Q
8 w4 Z, W4 x: W1 Q# N if( ( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) != 1 )
! _1 ]0 ~, U/ g' z, k* s6 d+ W5 h { ' ` e( z6 I0 c0 v4 w
return 1;
' U1 y3 p5 k6 e5 H$ V) A# W) ~3 n& ? }
' v, E5 ]8 O( O4 U 5 q9 r6 f" M- k: L: a- ?
AT91C_BASE_MC->MC_FMR = ((0x48)<<16) | 91C_MC_FWS_1FWS ; * G2 l- z# q# Z6 B- @
//108us ,wait state 2 cycles
" ^ _$ S3 l* X$ z- |5 I
. h% v. Q# O/ J* U AT91C_BASE_MC->MC_FCR = ( 0x5A <<24) | ((FLASH_SAVE_PAGE_ADD<<8)&AT91C_MC_PAGEN) | AT91C_MC_FCMD_START_PROG ;//write page
) m* A3 u; y1 ~8 n ; u7 m6 P7 A* v9 a
a& z, c U% q9 ]/ c
while(1)& f& V! ]# K7 D4 r# n
{ 0 S) b2 I3 Q( @. _( A2 E
if(AT91C_BASE_MC->MC_FSR & 0x01)
% e7 P: d: U/ e4 S4 H4 Q" x { : |& A) ~) F" H$ ~9 P0 d
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_LOCKE). c: c* l( `5 X3 `
{3 z( h H& m4 L7 W
return 1;' Z6 {/ L" |7 ^/ n3 C
} t* j, X& @) g4 O
if(AT91C_BASE_MC->MC_FSR & AT91C_MC_PROGE)
1 f# i4 B" y0 `0 V {
+ s4 Z" k5 w1 l- Q: E8 r return 1;- c! X0 p2 K) D5 ?& x2 P$ T2 C
}$ j: @5 x1 e7 t3 K
+ [1 o+ |% _) v* e
break;
; k' B$ i7 x. Y* k! y }//if
4 \. g c: P8 i } //while
3 x% x, g% }+ ?* f$ _
/ C' X, j! U/ Y" t return 0;+ r I- B. P# H% c5 b, R8 W W
} //Write_Page X6 Q$ R: s3 `" K" S
' w. t8 `# ^% l1 }5 P/ x執行完這段程式以後,程式就跑飛了,不斷地進入未定義指令中斷,我把看門狗打開也不能在超時以後重定系統,但是資料確實已經寫入Flash,斷電或者是按reset以後,從指定的位址�能夠讀出寫入的資料。 |
|