Real6410/S3C6410裸机LCD驱动

本文档详细介绍了如何在Real6410/S3C6410开发板上实现裸机LCD驱动,包括编译环境、编译命令、链接脚本和源代码。作者首先展示了编译和链接过程,然后提供了关键的源代码片段,包括LCD控制器的初始化、GPIO配置和图像显示。文章强调了查看电路图和理解时序的重要性,并分享了遇到的问题和解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Real6410/S3C6410裸机LCD驱动


简述:能够在裸机驱动LCD,并显示图片,打印字符串的裸机程序。


一、编写目的及环境

  1. 编写目的

                     手上有块real6410开发板,最近为其移植了个u-boot-2012.10。然后想把u-boot的控制台终端改到LCD显示。初次尝试不成功便想从简单入手,先写个裸机的驱动,再移                 植到u-boot中。

  1. 环境

    上位机:ubuntu12.04系统、arm-none-eabi-gcc4.6.1交叉编译器、有tftp服务。

              开发板:运行开发板自带u-boot-1.1.6,通过tftp命令下载程序、go命令执行程序。

    • 板上LCDwxcat43-tg3

    通迅:kermit显示控制开发板上的u-boot

    特别说明:由于没有仿真器,如果使用SD卡起动调试太过麻烦,所以这里用u-boot下载执行。

二、编译命令

  1. 在使用u-boot执行生成的程序期间经常发生”dataabort”。应该都是对齐引起的,后来采用了链接脚本后情况有所好转,担也还是时有发生,原因还在分析中。

    1. Makefile文件

      led_test:

      arm-none-eabi-gcc -o lcd.o lcd.c -c#编译主程序不链接

      arm-none-eabi-gcc -o my_debug.o my_debug.S -c#编译主程序不链接

      arm-none-eabi-ld-T u-boot.lds -Bstatic -Ttext 0xc0008000 -g lcd.o my_debug.o -olcd.elf#链接程序,指定链接脚本并将代码段重定位到到地址0xc0008000

      arm-none-eabi-objcopy-O binary -S lcd.elf lcd.bin#将生成的elf文件处理成bin文件

      sudocp -v lcd.bin /design/tftproot/#将生成的文件复制到tftp服务的目录方便下载

    这里的my_debug.S是控制开发板上led灯亮灭的,用于调试,可要可不要。

    1. 链接脚本u-boot.lds

      这个是从u-boot源码目录复制来的。其实只要.text.rodata .data段就可以了。

      OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm", "elf32-littlearm")

      OUTPUT_ARCH(arm)

      ENTRY(_start)

      SECTIONS

      {

      .= 0x00000000;

      .= ALIGN(4);#关键是这个,让代码段4字节对齐

      .text:

      {

      *(.text)

      }

      .= ALIGN(4);

      .rodata: { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }

      .= ALIGN(4);

      .data: { *(.data) }

      .= ALIGN(4);

      .got: { *(.got) }

      __u_boot_cmd_start= .;

      .u_boot_cmd: { *(.u_boot_cmd) }

      __u_boot_cmd_end= .;

      .= ALIGN(4);

      .mmudata: { *(.mmudata) }

      .= ALIGN(4);

      .rel.dyn: {

      __rel_dyn_start= .;

      *(.rel*)

      __rel_dyn_end= .;

      }

      .dynsym: {

      __dynsym_start= .;

      *(.dynsym)

      }

      _end= .; PROVIDE(end = .);

      .bss__rel_dyn_start (OVERLAY) : {

      __bss_start= .;

      *(.bss)

      .= ALIGN(4);

      __bss_end__= .;

      }

      /DISCARD/: { *(.dynstr*) }

      /DISCARD/: { *(.dynamic*) }

      /DISCARD/: { *(.plt*) }

      /DISCARD/: { *(.interp*) }

      /DISCARD/: { *(.gnu*) }

      }

三、源文件

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值