Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 5175|回復: 1
打印 上一主題 下一主題

如何對ARM內部Flash編程?

[複製鏈接]
跳轉到指定樓層
#
發表於 2006-11-13 12:11:02 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
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以後,從指定的位址�能夠讀出寫入的資料。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
1#
發表於 2008-12-10 17:52:27 | 只看該作者
有时候程序跑飞不一定是程序本身的问题,跟调试器的设置也有关系。我碰到过这样的情况,调试器中定义的是在RAM里面跑程序,但在起始地址中我又设为绝对地址0,部分程序没问题,但是有时候不知道怎么就跑飞了。
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-6-14 06:43 AM , Processed in 0.112014 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表