<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    S5PV210的中斷應用實例

    發布時間:2016-1-21 10:54    發布者:designapp
    關鍵詞: ARM , S5PV210
      實驗程序可以從四個方面設計:一是啟動程序的設計,主要是對ARM工作模式的配置和中斷服務程序的設計;二是初始化程序,包括S5PV210中斷控制器的初始化、GPIO引腳的配置;三是主程序設計;最后編寫Makefile,編譯生成目標文件。下面就從這四方面編寫測試代碼以及代碼的詳解。
      1.啟動程序start.S
      前面已介紹過,S5PV210本身的固化代碼(iROM)在上電后配置好IRQ中斷的棧,以及系統模式所使用的棧,所以在啟動代碼中可以不用設置這些棧(如果重新配置也可以),所以實驗的啟動程序比較簡單,主要是當中斷發生時先保存現場,跳到中斷服務程序執行中斷處理,處理結束再恢復現場。具體代碼示例如下:
      01 .text
      02 .global _start/*聲明一個全局的標號*/
      03 .global IRQ_handle
      04_start:
      06mrs r0,cpsr
      07bic r0,r0,#0x00000080/*使能IRQ中斷bit[7]=0 */
      08msr cpsr,r0
      09bl main
      10 halt_loop:
      11bhalt_loop/*死循環,不讓程序跑飛*/
      12
      13 IRQ_handle:
      14sub lr, lr, #4/*計算返回地址*/
      15stmdb sp!, {r0-r12, lr} /*保存用到的寄存器*/
      16bl irq_handler/*跳到中斷服務函數*/
      17ldmia sp!, {r0-r12, pc}^/*中斷返回, ^表示將spsr的值復制到cpsr */
      2.初始化階段
      初始化階段重點講下外部中斷控制寄存器的配置方法,以及中斷向量控制寄存器的設置,關于LED相關的引腳配置不作重復介紹。
      ……
      08 #define GPH0CON*((volatile unsigned int *)0xE0200C00)
      09 #define GPH0DAT*((volatile unsigned int *)0xE0200C04)
      10 #define EXT_INT_0_CON*((volatile unsigned int *)0xE0200E00)
      11 #define EXT_INT_0_MASK*((volatile unsigned int *)0xE0200F00)
      12
      13 #define VIC0IRQSTATUS*((volatile unsigned int *)0xF2000000)
      14 #define VIC0INTSELECT*((volatile unsigned int *)0xF200000C)
      15 #define VIC0INTENABLE*((volatile unsigned int *)0xF2000010)
      16 #define VIC0VECTADDR0*((volatile unsigned int *)0xF2000100)
      17 #define VIC0VECTADDR1*((volatile unsigned int *)0xF2000104)
      18 #define VIC0ADDRESS*((volatile unsigned int *)0xF2000F00)
      19
      20 extern void IRQ_handle(void);
      ……
      38 //配置中斷引腳
      39 void init_key(void)
      40 {
      41//配置GPIO引腳為中斷功能
      42GPH0CON &= ~(0xFF int.dis
      07
      08 %.o : %.c
      09arm-linux-gcc -c -O2 $< -o $@
      10
      11 %.o : %.S
      12arm-linux-gcc -c -O2 $< -o $@
      13
      14 clean:
      15rm -f *.o *.elf *.bin *.dis
      將以上編寫好的源代碼上傳到宿主機上編譯生成可執行的目標文件int.bin,然后燒寫到開發板上電測試。
      實驗最終結果是:當按下“KEY1”,LED1燈會被點亮或熄滅;當按下“KEY2”,LED2燈會被點亮或熄滅。
                                   
                                                                   
                                   
                   
    本文地址:http://www.portaltwn.com/thread-160226-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷