Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

如何對ARM內部Flash編程?

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

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2024-5-17 12:39 PM , Processed in 0.112514 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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