zoukankan      html  css  js  c++  java
  • TQ210裸机编程(2)——LED流水灯

    两个文件start.S和led.c

    start.S

    .global _start                @声明一个全局的标号
    _start:
        bl main                    @跳转到C函数去执行
    halt:
        b halt                    @死循环


    led.c

    #define GPC0CON        *((volatile unsigned int *)0xE0200060)
    #define GPC0DAT        *((volatile unsigned int *)0xE0200064)

    void delay(volatile unsigned int t)
    {
        volatile unsigned int t2 = 0xFFFF;
        while (t--)
            for (; t2; t2--);
    }

    int main()
    {
        int toggle = 0;
        GPC0CON &= ~(0xFF << 12);
        GPC0CON |= 0x11 << 12;    // 配置GPC0_3和GPC0_4为输出
        
        while (1)
        {
            GPC0DAT &= ~(0x3 << 3);        // 熄灭LED1和LED2
            
            if (toggle)
                GPC0DAT |= 1 << 3;        // 点亮LED1
            else
                GPC0DAT |= 1 << 4;        // 点亮LED2
            
            toggle = !toggle;
            delay(0x50000);
        }
        
        return 0;
    }


    Makefile

    led.bin: start.o led.o
        arm-linux-ld -Ttext 0x20000000 -o led.elf $^
        arm-linux-objcopy -O binary led.elf $@
        arm-linux-objdump -D led.elf > led.dis
        
    led.o : led.c
        arm-linux-gcc -c $< -o $@
    start.o : start.S
        arm-linux-gcc -c $< -o $@
        
    clean:
        rm *.o *.elf *.bin *.dis

  • 相关阅读:
    斐波那契数列
    用两个栈实现队列
    从尾到头打印链表
    HDOJ5877(dfs序+离散化+树状数组)
    HDOJ5876(补图的最短路)
    POJ3090(欧拉函数)
    POJ2478(欧拉函数)
    POJ2407(欧拉函数)
    POJ2142(扩展欧几里得)
    POJ3020(最小边覆盖)
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3367852.html
Copyright © 2011-2022 走看看