zoukankan      html  css  js  c++  java
  • iTop4412 裸机开发 LED

    平台:iTop4412 SCP 2G

    开发板有两个可控制的LED灯:分别接到引脚:KP_COL0和VDD50_EN

    KP_COL0就是GPL2_0    

    VDD50_EN就是GPK1_1    

    配置GPX_CON对应位为输出功能,设置GPX_DAT相应管脚输出为1,就可以点亮LED灯了。

    实现代码如下:

    源码1:start.S 

    .global _start
    #include "s3c4412_gpio.h"
    .word 0x2000
    .word 0x0
    .word 0x0
    .word 0x0
    _start:
        ldr r0, =0x1002330C
        ldr r1, [r0]
        orr r1, r1, #0x300
        str r1, [r0]
    
        ldr r0, =0x11000C08
        ldr r1, =0x0
        str r1, [r0]
    
        ldr r0, =GPL2CON
        mov r1, #(0x01 << 0)
        str r1, [r0]
        
        ldr r0, =GPK1CON
        mov r1, #(0x01 << 4)
        str r1, [r0]
    
    1:
        ldr r0, =GPK1DAT
        mov r1, #0x2
        str r1, [r0]
    
        ldr r0, =GPL2DAT
        mov r1, #0x0
        str r1, [r0]
    
        b 1b
    
    halt:
        b halt

    源码2: s3c4412_gpio.h 

    #ifndef S3C4412_GPIO_H
    #define S3C4412_GPIO_H
    
    #define GPX1CON (0x11000000 + 0x0C20)
    #define GPX1DAT (0x11000000 + 0x0C24)
    #define GPX1PUD (0x11000000 + 0x0C28)
    #define GPX1DRV (0x11000000 + 0x0C2C)
    
    #define GPK1CON (0x11000000 + 0x0060)
    #define GPK1DAT (0x11000000 + 0x0064)
    #define GPK1PUD (0x11000000 + 0x0068)
    #define GPK1DRV (0x11000000 + 0x006C)
    
    #define GPL2CON (0x11000000 + 0x0100)
    #define GPL2DAT (0x11000000 + 0x0104)
    #define GPL2PUD (0x11000000 + 0x0108)
    #define GPL2DRV (0x11000000 + 0x010C)
    
    #endif

    源码3: link.lds 

    SECTIONS
    {
        . = 0x0;
        .text : {
            * (.text)
        }
        .rodata ALIGN(4) : {
            * (.rodata*)
        }
        .data ALIGN(4) : {
            * (.data*)
        }
        .bss ALIGN(4) : {
            * (.bss)
            * (COMMON)
        }
    }

    源码4: 

    CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
    %.o : %.S
        $(CROSS_COMPILE)gcc -o $@ $< -c
    %.o : %.c
        $(CROSS_COMPILE)gcc -o $@ $< -c
    
    led.bin : start.o
        $(CROSS_COMPILE)ld -T link.lds -o led.elf $^
        $(CROSS_COMPILE)objcopy -O binary led.elf led.bin
        $(CROSS_COMPILE)objdump -D led.elf > led.dis
    
    .PHONY : clean
    clean :
        rm -rf *.o *.elf *.bin *.dis

    工程压缩包链接: https://download.csdn.net/download/c54255787/11234582

    完成或修改了源代码需每次重复操作以下三个步骤:

    步骤1: 编译生成目标文件,执行  make led.bin

    步骤2:因为这个裸机是s3c4412 datasheet 中所描述的 bl1, 所以编译出的led.bin头16个字节需要处理下,才能正常运行。 执行 ./mk4412 led.bin

    步骤3:烧写处理好的led.bin到sd卡里头,执行 

    sudo mkfs.vfat -F 32 -I /dev/sdb
    sudo dd if=/dev/zero of=/dev/sdb bs=512 seek=1 iflag=dsync oflag=dsync count=2048
    sudo dd if=./led.bin of=/dev/sdb bs=512 seek=1 iflag=dsync oflag=dsync

       请注意加粗标红得"sdb", 也可能是sdc,没插U盘执行df -l,再插入U盘执行df -l,观察多出来得就是sdx就是你的U盘。

    最后就能看到开发板上led2灭,led3被点亮了。

    如果需要LED2也点亮,则start.S中修改:

     ldr r0, =GPL2DAT
        mov r1, #0x1
        str r1, [r0]

    参考链接:https://blog.csdn.net/suz_cheney/article/details/45974139

  • 相关阅读:
    TensorFlow学习('utf-8' codec can't decode byte 0xff in position 0: invalid start byte)
    Python常用库之三:Matplotlib
    线性回归 Python实现
    go 算法 查询字符在字符串中的位置
    Python与Go快速排序
    Python与Go斐波那契数列
    Python与Go选择排序
    Python与Go插入排序
    Python与Go冒泡排序
    git clone直接提交用户名和密码
  • 原文地址:https://www.cnblogs.com/w54255787/p/11000682.html
Copyright © 2011-2022 走看看