TQ2440裸机实验(键盘和LED结合)

来源:互联网 发布:js对象添加属性及方法 编辑:程序博客网 时间:2024/05/20 08:41

           IMPORT main 
           AREA    Init,CODE,READONLY  ;程序入口的地方
        ENTRY 
START
            ldr     r0, =0x56000010    ; @ WATCHDOG寄存器地址
            mov     r1, #0x0                    
            str   r1, [r0]             ; @ 写入0,禁止WATCHDOG,否则CPU会不断重启
           
            ldr     sp, =1024*4        ; @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
                                       ; @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
            bl      main               ; @ 调用C程序中的main函数
halt_loop
            b       halt_loop
这是开始一点初始化使用汇编写的,下面是功能函数:


#define GPB5_out        (1<<(5*2))    //GPB5位[11:10]=01就可以把对应端口设为输出
#define GPB6_out        (1<<(6*2))
#define GPB7_out        (1<<(7*2))
#define GPB8_out        (1<<(8*2))


#define GPF4_in    ~(3<<(4*2))        //把GPF4位[9:8]设为0:0就可以把按键设为输入,具体对应关可以看芯片手册
#define GPF1_in     ~(3<<(1*2))
#define GPF2_in     ~(3<<(2*2))
#define GPF0_in     ~(3<<(0*2))

int  main()
{
   
   
        unsigned long dwDat;
        // LED1-LED4对应的4根引脚设为输出
        GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out ;

        // K1-K2对应的2根引脚设为输入
        GPFCON = GPF0_in & GPF1_in & GPF2_in & GPF4_in;
       
       
        while(1){
            
            //若Kn为0(表示按下),则令LEDn为0(表示点亮)
            dwDat = GPFDAT;             // 读取GPG管脚电平状态
       
            if (dwDat & (1<<0))        // K1没有按下
                GPBDAT |= (1<<5);       // LED1熄灭
            else  
               
                GPBDAT &= ~(1<<5);      // LED1点亮
            
            if (dwDat & (1<<1))         // K2没有按下
                GPBDAT |= (1<<6);       // LED2熄灭
            else  
                GPBDAT &= ~(1<<6);      // LED2点亮
              
                
           
            if (dwDat & (1<<2))         // K3没有按下
                GPBDAT |= (1<<7);       // LED3熄灭
            else   
                GPBDAT &= ~(1<<7);      // LED3点亮
           
                
   
            if (dwDat & (1<<4))         // K4没有按下
                GPBDAT |= (1<<8);       // LED4熄灭
            else
               
                GPBDAT &= ~(1<<8);
                 // LED4点亮            
                              
    }

    return 0;
}

0 0
原创粉丝点击