zoukankan      html  css  js  c++  java
  • (ARM11 S3C6410) ARM11裸机初体验,GPIO寄存器。

    原文出处:

    http://www.cnblogs.com/hebaichuanyeah/

    拿到一款陌生的MCU,通常想的是先跑跑裸机。……通常第一件事是观摩GPIO寄存器。

    OK6410开发板电路图。

    6410的IO口资源……

    想关的寄存器地址

    GPMCON:IO口配备寄存器。

    GPMDAT与GPLPUD寄存器。

    通常,接触一款新的MCU。个人喜好写一个构件库(观摩完所有的寄存器后,构件就全部写好了)。调用自己写好的构件会很方便。

    创建init.s汇编代码

    关看门狗 设置堆栈 设置CPU基地址

        IMPORT main
        AREA init,CODE,READONLY
        PRESERVE8
        ENTRY     
        LDR R0, =0x70000000
        ORR R0, r0, #0x13
        MCR p15,0,R0,c15,c2,4 
        
        LDR    R0, =0x7E004000
        MOV R1, #0
        STR R1, [r0]
        
        ldr SP, =8*1024
        BL    main  
        END

    创建LED.h文件

    #define GPMCON (*(unsigned long volatile *)0x7F008820)   
    #define GPMDAT (*(unsigned long volatile *)0x7F008824)   
    #define GPMPUD (*(unsigned long volatile *)0x7F008828)
    
    
    #define LED1(Switch) if(!Switch)
                            GPMDAT |= 0x01;
                        else
                            GPMDAT &= ~0x01
    
    
    #define LED2(Switch) if(!Switch)
                            GPMDAT |= 0x02;
                        else
                            GPMDAT &= ~0x02
                            
    #define LED3(Switch) if(!Switch)
                            GPMDAT |= 0x04;
                        else
                            GPMDAT &= ~0x04
       
                    
    #define LED4(Switch) if(!Switch)
                            GPMDAT |= 0x08;
                        else
                            GPMDAT &= ~0x08
                            
                            
    extern void Delay(long);   
    
    extern void LED_init(void);      

    创建LED.c文件

    #include "LED.h"
    
    void Delay(long count)   
    {   
        int i;
        while(count--)
            for(i=0;i<100;i++);
             
    }   
    
    void LED_init(void)   
    {   
        GPMCON &= 0xffff1111;  //001:output
        GPMDAT = 0xffffffff;   
    }

    main.c主函数文件

    #include "LED.h"
    
    
    void Main(void)   
    {   
        LED_init();  
    
        while(1)
        {
            LED1(1);
            LED4(0);
            Delay(100000);
            LED1(0);
            LED2(1);    
            Delay(100000);
            LED3(1);
            LED2(0);
            Delay(100000);
            LED3(0);
            LED4(1);    
            Delay(100000);          
        }
       
    }

    一个简单的流水灯程序。。和以前一样,用jlink烧至MCU。

    原文出处:

    http://www.cnblogs.com/hebaichuanyeah/

  • 相关阅读:
    day20:正则表达式
    day19:os模块&shutil模块&tarfile模块
    zynq之TF卡写入常见问题
    verilog之random
    quartus之ram的IP测试
    verilog之readmemb
    verilog之monitor
    verilog之display
    源自opencore的fifo的IP核解析
    veriog之四位全加器
  • 原文地址:https://www.cnblogs.com/hebaichuanyeah/p/3276735.html
Copyright © 2011-2022 走看看