其实LCD主要用途就是用来显示数据,那么数据的来源和其传输方式就是主要关注点了;做过一个项目是显示红外热像图,通过pico384获取原始图像数据,它会将数据通过一条串行线输出出来,然后通过串行转并行芯片把数据以14路并行GPIF设置好的时序传给cypress,此芯片再通过usb接口传给上位机显示,这只是大概的流程,中间还有很多细节,也不必详述;自定义的GPIF接口时序就是按照pico输出的时序,下图为其时序图:

 

下图为lcd的 时序图与pico的大同小异:

 

 其他的也就是lcd控制器的描像素点的操作了,具体情况具体看,下面看一下Makefile:

复制代码
CC      = arm-linux-gcc
LD      = arm-linux-ld
AR      = arm-linux-ar             #将多个可重定位的目标模块归档为一个函数库文件
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump

INCLUDEDIR     := $(shell pwd)/include    #shell pwd代表在shell输入pwd命令中取得的路径
CFLAGS         := -Wall -O2             #选项可以打印出编译时所有的错误或者警告信息。这个选项不该被遗忘
CPPFLAGS       := -nostdinc -I$(INCLUDEDIR) #不要搜索标准系统头文件目录,仅搜索-I指定的路径。

export     CC LD AR OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS  #导出变量让子Makefile可以使用,同级不能使用

objs := head.o init.o nand.o interrupt.o serial.o lcddrv.o framebuffer.o lcdlib.o main.o lib/libc.a

lcd.bin: $(objs)
    ${LD} -Tlcd.lds -o lcd_elf $^
    ${OBJCOPY} -O binary -S lcd_elf $@
    ${OBJDUMP} -D -m arm lcd_elf > lcd.dis

.PHONY : lib/libc.a
lib/libc.a:
    cd lib; make; cd ..
    
%.o:%.c
    ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

%.o:%.S
    ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

clean:
    make  clean -C lib
    rm -f lcd.bin lcd_elf lcd.dis *.o
    
复制代码
复制代码
objs := div64.o lib1funcs.o ctype.o muldi3.o printf.o string.o vsprintf.o

libc.a: $(objs)
    ${AR} -r -o $@ $^   #库中加入.o文件
    
%.o:%.c
    ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

%.o:%.S
    ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

clean:
    rm -f libc.a *.o        
    
复制代码

.lds

复制代码
SECTIONS {
    . = 0x00000000;
    .init : AT(0){ head.o init.o nand.o}
    . = 0x30000000;
    .text : AT(4096) { *(.text) }
    .rodata ALIGN(4) : AT((LOADADDR(.text)+SIZEOF(.text)+3)&~(0x03)) {*(.rodata*)}   
    .data ALIGN(4)   : AT((LOADADDR(.rodata)+SIZEOF(.rodata)+3)&~(0x03)) { *(.data) }
    __bss_start = .;
    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }
    __bss_end = .;
}
复制代码

 

posted on   lzd626  阅读(266)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现



点击右上角即可分享
微信分享提示