女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網 > 電子技術應用 > 嵌入式技術 > 嵌入式操作系統 >

從Flash和SRAM中觸發中斷的過程示例(2)

2011年09月28日 11:29 本站整理 作者:葉子 用戶評論(0
啟動匯編代碼

  ;*********************************************************************

  ; 匯編指令

  ;******************************************************************

  AREA asm_code,CODE ;新的代碼段

  CODE32 ;ARM模式

  IMPORT _main ;main 不要在此段中定義

  EXPORT start ;全局標志,參考ivt.s

  ;********************************************************************

  start

  ; Enable interrupts

  MSR cpsr_c,#0x13

  為管理模式設置SP。由應用程序所需要的堆??臻g來決定這個值。

  LDR SP,=0x4……..

  設置IRQ模式的SP。在設置SP_irq前轉換模式到IRQ,然后再返回管理模式。

  MRS R0,CPSR

  BIC R1,R0,#0x1F

  ORR R1,R1,#0x12

  MSR cpsr_c,R1

  LDR SP,=0x4……..

  MSR cpsr_c,R0

  跳轉到C代碼

  LDR lr,=_main

  MOV pc,lr

  END

  這段代碼在第一條指令鏈接到ivt.s。如果建立堆棧指針失敗,將導致數據取消,因此堆棧的建立應當在跳轉到C main()前建立。

  C 代碼

  這樣的話,TIMER1中相關的寄存器就被建立起來了,當寄存器匹配的時候,TIMER將會中斷CPU的核。TIMER1 將會以60M Hz的速度運行。這段代碼已經在實驗板上測試過。實驗板使用10 M Hz的晶振,同樣地設置PLL。有關定時器的操作請參考LPC2106、5、4用戶手冊相關的章節。ISR的寄存器將為空,然后根據需要由后面的用戶來設置。_irq編譯關鍵字被用來定義IRQHandler()函數,作為一個IRQ ISR。

  執行下面的指令,將會執行 init.s 中的C main

  LDR lr,=_main

  MOV pc,lr

  下面是C代碼:

  /*********************************************************************

  函數功能說明

  ************************************************************************/

  _irq void IRQHandler(void);

  void feed(void);

  void Initialize(void);

  /*****************************************************************

  頭文件

  *************************************************************/

  #include “LPC210x.h”

  /*************************************************************

  MAIN

  ***********************************************************/

  int main()

  {

  /*建立系統*/

  Initialize();

  /*啟動定時器*/

  T1_TCR=0x1;

  while(1)

  {

  }

  }

  /*******************************************************************

  初始化

  *******************************************************************/

  void Initialize()

  {

  /*初始化PLL(使用10MHz晶振配置),使CPU時鐘達到60MHz*/

  /*設置驅動和應用*/

  PLLCFG=0x25;

  Feed();

  /*開PLL*/

  PLLCON=0x1;

  Feed();

  /*等待PLL設置頻率并鎖定*/

  while(!PLLSTAT & PLOCK)){}

  /*連接PLL作為時鐘源*/

  PLLCON=0x3;

  Feed();

  開啟MAM,設置時鐘數來取得FLASH MEMORY。

  MAMCR=0x2;

  MAMTIM=0x4;

  設置設備的時鐘(pclk)到系統時鐘(cclk)

  VPBDIV=0X1;

  初始化GPIO

  IODIR = 0Xffff;

  IOSET = 0Xffff;

  初始化TIMER1

  T1_TCR = 0x0;

  T1_TC = 0x0;

  T1_PR = 0x0;

  T1_PC = 0x0;

  后面的用戶來填充相關的值

  T1_MR0 = 0x……;

  復位,進入相關的中斷

  T1_MCR = 0x3;

  初始化VIC

  VICINTSEL = 0x0; /*TIMER1選擇為IRQ*/

  VICINTEN = 0x20; //TIMER1 中斷允許

  VICCNTL0 = 0x25;

  ISR 的地址

  VICVADDR0 = (unsigned long)IRQHandler;

  }

  /********************************************************************

  TIMER1 ISR

  ******************************************************************/

  _irq void IRQHandler()

  {

  /*這里是中斷服務子程序。這個中斷需要在TIMER1中清除,然后寫入一個合適的值到VIC向量地址寄存器來更新VIC硬件優先級。*/

  T1_IR = 0x1;

  VICVADDR = 0Xff;

  }

  /**************************************************************

  PLL的反饋頻率

  *************************************************************/

  void feed()

  {

  PLLFEED = 0Xaa;

  PLLFEED = 0x55;

  }

  

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

( 發表人:葉子 )

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?