新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > GNU ARM匯編--(八)s3c2440的watchdog

GNU ARM匯編--(八)s3c2440的watchdog

作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
  • msrcpsr_c,#0xd2@進(jìn)入中斷模式
  • ldrsp,=3072@中斷模式的棧指針定義
  • msrcpsr_c,#0xd3@進(jìn)入系統(tǒng)模式
  • ldrsp,=4096@設(shè)置系統(tǒng)模式的棧指針
  • @--------------------------------------------
  • ldrr0,=GPBUP
  • ldrr1,=0x03f0
  • strr1,[r0]
  • ldrr0,=GPFCON
  • ldrr1,=0x2ea@0x2
  • strr1,[r0]
  • ldrr0,=EXTINT0
  • @ldrr1,=0x8f888@0x0@0x8f888@~(7|(7<<4)|(7<<8)|(7<<16))//低電平觸發(fā)中斷
  • ldrr1,=0xafaaa@0x0@0x8f888//下降沿觸發(fā)中斷
  • strr1,[r0]
  • ldrr0,=EINTPEND
  • ldrr1,=0xf0@0b10000
  • strr1,[r0]
  • ldrr0,=EINTMASK
  • ldrr1,=0x00@0b00000
  • strr1,[r0]
  • ldrr0,=SRCPND
  • ldrr1,=0x3ff@0x1@0b11111
  • strr1,[r0]
  • ldrr0,=SUBSRCPND
  • ldrr1,=0x1<<13
  • strr1,[r0]
  • ldrr0,=INTPND
  • ldrr1,=0x3ff@0x1@0b11111
  • strr1,[r0]
  • ldrr0,=INTSUBMSK
  • ldrr1,=0x0<<13
  • strr1,[r0]
  • ldrr0,=INTMSK
  • ldrr1,=0xfffff000@0b00000
  • strr1,[r0]
  • MRSr1,cpsr
  • BICr1,r1,#0x80
  • MSRcpsr_c,r1
  • blmain
  • irq:
  • sublr,lr,#4
  • stmfdsp!,{r0-r12,lr}
  • blirq_isr
  • ldmfdsp!,{r0-r12,pc}^
  • irq_isr:
  • ldrr2,=GPBDAT
  • ldrr1,=0x0e0
  • strr1,[r2]
  • ldrr0,=EINTPEND
  • ldrr1,=0xf0
  • strr1,[r0]
  • ldrr0,=SRCPND
  • ldrr1,=0x3ff@0b11111
  • strr1,[r0]
  • ldrr0,=SUBSRCPND
  • ldrr1,=0x1<<13
  • strr1,[r0]
  • ldrr0,=INTPND
  • ldrr1,=0x3ff@0b11111
  • strr1,[r0]
  • movpc,lr
  • delay:
  • ldrr3,=0xffffff
  • delay1:
  • subr3,r3,#1
  • cmpr3,#0x0
  • bnedelay1
  • movpc,lr
  • clock_setup:
  • ldrr0,=LOCKTIME
  • ldrr1,=0xffffffff
  • strr1,[r0]
  • ldrr0,=CLKDIVN
  • ldrr1,=(DIVN_UPLL<<3)|(HDIVN<<1)|(PDIVN<<0)
  • strr1,[r0]
  • ldrr0,=UPLLCON
  • ldrr1,=(U_MDIV<<12)|(U_PDIV<<4)|(U_SDIV<<0)@Fin=12MUPLL=48M
  • strr1,[r0]
  • nop
  • nop
  • nop
  • nop
  • nop
  • nop
  • nop
  • ldrr0,=MPLLCON
  • ldrr1,=(M_MDIV<<12)|(M_PDIV<<4)|(M_SDIV<<0)@Fin=12MFCLK=400M
  • strr1,[r0]
  • movpc,lr
  • main:
  • ldrr0,=WTDAT
  • ldrr1,=Count_reload
  • strr1,[r0]
  • ldrr0,=WTCNT
  • ldrr1,=Count
  • strr1,[r0]
  • ldrr0,=WTCON
  • ldrr1,=(Pre_scaler<<8)|(wd_timer<<5)|(clock_select<<3)|(int_gen<<2)|(reset_enable)
  • strr1,[r0]
  • ledloop:
  • ldrr1,=0x1c0
  • strr1,[r2]
  • bldelay
  • ldrr1,=0x1a0
  • strr1,[r2]
  • bldelay
  • ldrr1,=0x160
  • strr1,[r2]
  • bldelay
  • ldrr1,=0x0e0
  • strr1,[r2]
  • bldelay
  • bledloop
  • undefined_instruction:
  • nop
  • software_interrupt:
  • nop
  • prefetch_abort:
  • nop
  • data_abort:
  • nop
  • not_used:
  • nop
  • fiq:
  • nop

  • 程序?qū)崿F(xiàn)的是:一個正常的流水燈,定時器每隔2s觸發(fā)一次中斷,中斷處理中點(diǎn)亮第四個LED.

    本文引用地址:http://butianyuan.cn/article/201611/321723.htm

    稍微該一下上面的代碼:

    .equ int_gen, 0 @關(guān)中斷
    .equ reset_enable, 1 @打開重啟信號

    打開重啟信號,則可以看到每隔2s系統(tǒng)就重啟一次.

    如果在循環(huán)中加入:

    ldr r0, =WTCNT @喂狗
    ldr r1, =Count
    str r1, [r0]

    那么,這又是一個標(biāo)準(zhǔn)的流水燈了.而且是有watchdog保護(hù)的流水燈了.


    上一頁 1 2 下一頁

    關(guān)鍵詞: ARM匯編s3c2440watchdo

    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉