(MIPS 24KEc) MT7688 (LinkIt Smart 7688 Duo) >> Assembly

Watchdog(Polling)


參考資訊:
1. GitHub

Watchdog可以用來Reset System或者當作Timer使用,如果要當Timer使用,WDT2SYSRST_EN要設定成0


PERI_CLK_SEL用來設定需要使用的Clock Source


P.S. 如果要使用Timer,BBPPLL必須要Enable

WDTINT用來判斷Watchdog是否已經發生中斷


WDTPRES用來設定預除數值,WDTEN用來啟動Watchdog下數功能,WDTAL用來設定是否自動從WDTLMT_REG載入數值


自動載入的數值


Watchdog下數數值設定


main.s

    .extern _start
    .set noreorder
 
    .equiv RSTSTAT,     0xb0000038
    .equiv CLKCFG0,     0xb000002c
    .equiv TGLB_REG,    0xb0000100
    .equiv WDTCTL_REG,  0xb0000120
    .equiv WDTLMT_REG,  0xb0000124
    .equiv GPIO_CTRL_1, 0xb0000604
    .equiv GPIO_DATA_1, 0xb0000624
    .equiv LED,         (44 - 32)
 
    .text
_start:
    b reset
   
    .org 0x400
reset:
    li $8, GPIO_CTRL_1
    li $9, (1 << LED)
    sw $9, 0($8)
 
    li $8, CLKCFG0
    lw $9, 0($8)
    or $9, (1 << 4) | (1 << 3) | (1 << 2)
    sw $9, 0($8)
    
    li $8, RSTSTAT
    li $9, 0
    sw $9, 0($8)

    li $8, WDTLMT_REG
    li $9, 1000
    sw $9, 0($8)
 
    li $8, WDTCTL_REG
    li $9, (1000 << 16) | (1 << 7) | (1 << 4)
    sw $9, 0($8)
loop:
    li $8, TGLB_REG
    lw $9, 0($8)
    and $9, 2
    beqz $9, loop
    nop
 
    li $8, GPIO_DATA_1
    xor $10, (1 << LED)
    sw $10, 0($8)
   
    li $8, TGLB_REG
    li $9, 2
    sw $9, 0($8)
 
    b loop
    nop

P.S. WDTPRES = 1000,代表每筆下數的時間為1ms,WDTLMT_REG = 1000,代表每秒產生一次中斷,需要注意的是,不管Watchdog使用XTAL或者BBPPLL當作Clock Source,BBPPLL都必須要Enable

完成


返回上一頁