標題: MCU輪巡檢測程序 [打印本頁]

作者: Resandom    時間: 2019-12-10 18:20
標題: MCU輪巡檢測程序
.globl _start

_start:
//設(shè)置開機鍵按下后運行程序
        ldr r0, =0x1002330c
        ldr r1,[r0]
        orr r1,r1,#0x300
        str r1,[r0]

        // 關(guān)閉看門狗
        ldr        r0, =0x10060000                        
        mov        r1, #0
        str        r1, [r0]

        // 設(shè)置棧,以便調(diào)用c函數(shù)
        ldr        sp, =0x02060000                                                

        // 調(diào)用c函數(shù)
        bl        main        

halt:
        b halt
key.c
#define     GPM1CON     (*(volatile unsigned long *) 0x11000280)
#define     GPM1DAT     (*(volatile unsigned long *) 0x11000284)
#define     GPX1CON     (*(volatile unsigned long *) 0x11000C20)
#define     GPX1DAT     (*(volatile unsigned long *) 0x11000C24)

#define     GPX2CON     (*(volatile unsigned long *) 0x11000C40)
#define     GPX2DAT     (*(volatile unsigned long *) 0x11000C44)

static void GPIO_Init(void)
{
        /*LED_INIT*/
        GPM1CON &= ( ~(0xF << 16));
        GPM1CON |= (0x1 << 16);
        GPM1DAT &= 0x0;

        GPX1CON &= ( ~(0xF << 12));
        GPX1CON |= (0x1 << 12);
        GPX1DAT &= 0x0;

        //GPX2CON &= ( ~(0xF << 8));
        //GPX2CON |= (0x1 << 8);
        //GPX2DAT |= (0x1 << 2);

        /*KEY_INIT*/
        GPX2CON &= ~0xFF;
        GPX2CON |= 0x00;

        GPX2CON &= ( ~(0xFF <<16));
        GPX2CON |= (0x00 << 16);

        GPX2DAT &= 0x0;
}

void delay(int time)
{
        while (time--)
                ;   
}

int main(void)
{
        unsigned char keyValue1 ;
        unsigned char keyValue2 ;
        GPIO_Init();
        while(1)
        {
                keyValue1 = GPX2DAT;
                keyValue1 &= (~(0xFF << 2));
                keyValue2 = GPX2DAT >> 4;
                keyValue2 &= (~(0xFF << 2));

                switch(keyValue1){
                        case 0x01:
                                GPM1DAT |= (0x1 << 4);
                                GPX1DAT |= (0x1 << 3);
                                break;
                        case 0x02:
                                GPM1DAT |= (0x1 << 4);
                                break;
                        default :
                                GPM1DAT &= ~(0x1 << 4);
                                GPX1DAT &= ~(0x1 << 3);
                                break;
                }
                switch(keyValue2){
                        case 0x01:
                                GPM1DAT |= (0x1 << 4);
                                GPX1DAT &= ~(0x1 << 3);
                                delay(0x10000);
                                GPX1DAT |= (0x1 << 3);
                                GPM1DAT &= ~(0x1 << 4);
                                delay(0x10000);
                                break;
                        case 0x02:
                                GPX1DAT |= (0x1 << 3);
                                break;
                        default :
                                GPM1DAT &= ~(0x1 << 4);
                                GPX1DAT &= ~(0x1 << 3);
                                break;
                }
        }
        return 0;
}



作者: admin    時間: 2019-12-10 23:01
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1