一、实验原理
大家可能会有疑问,不是在BL2目录中的mem_init_tiny4412.S实现了串口初始化了,且也有串口输出函数,要不然怎么串口调试助手上怎么会有打印信息呢,这里为什么还要重新初始化?其实我觉得也可以不用重新初始化,但至少也要实现Printf()这个标准函数里要调用的串口输出函数吧,因为初始化工作在时钟没有改变的情况下,可以只初始化一次,但是到LCD初始化这一步时,CPU已经重定位到DRAM中执行了,前面在mem_init_tiny4412.S实现的函数uart_asm_putc和uart_asm_putx函数现在代码应定位不到了吧,所以应无法调用了,所以我觉得有必要重新初始化,至少实现串口输出函数。
代码实现方式还是从U-BOOT中去COPY修改的,同时也参考了《Linux平台下Mini210S裸机程序开发指南》的第24章代码方式。这一章我不会详细的去说明代码中串口如何实现等等,我只想找出LCD用另一种代码风格没能初始化成功的原因?代码的实现过程,相信大家有了前面几章的说明,自己应想明白吧。
linux系统中提取出来的一些相关文件,虽然我这里重新实现了串口初始化函数,但我也没有在user_bin.bin程序的main执行阶段没有调用此函数进行初始化串口,而是只会通过printf()函数调用putc()输出函数和输入所用getc()函数。所以这也验证了前面的设想,其实一开始串口已初始化好了,我们没有改变时钟什么的,没必要再来初始化一次了。程序实现方式简章不做过多说明。测试过程中我发现,绘制文字一直不是很清晰,三个字库都如此,程序上可能存在什么问题吧,需要好好排查。
Lcd.c中的lcd_draw_bmp()绘图函数我进行了修改,让他的更加灵活一点,它可以绘制由网上比较流行的图片转LCD数据软件“img2lcd”转换出来的,带有8字节图片信息头的字符数组文件。此函数会自动从8字节的信息头中提取图像高度和宽度信息,然后进行绘图。由于我现在提供是800*480的24bit的图片,现在编译生成的user_bin.bin文件会比较大了,现在出来的文件大小已经比较大了,大约有1149K了,所以我们有必要修改一下BL2中mmc_relocate.c,要将其复制的扇区大小改大一些,一个扇区512字节,大家看着自己程序修改吧,但也不能太大了,因为我不清楚FriendlyARM为我们提供的SD-Flasher.exe在格式分区时,第一分区分配大小到底有多大,我不是很确定,我用一个分区工具查看时,发现在大小有150M左右,如下图9-1所示,大家的程序还是控制在5M大小内比较保险吧。
图9-1、SD卡分区示意图
我修改复制的大小为2048K,所以扇区数为4096,代码如下所示:
SDMMC_ReadBlocks(49,4096,0x43e00000);
3、main.c
main.c程序也做了相关修改,主要是复制了《Linux平台下Mini210S裸机程序开发指南》第24章所提供的代码,程序实现通过输入不同数字绘出不同的图形,同时屏幕上会显示字符。程序实现也很简单,这里不过多说明。
三、完整的烧写过程
已将SD卡插入电脑,假设linux识别了SD卡,其识别号为sdb。执行下面命令:
# chmod 777 –R 8_sdram_LCD_Char
# cd 8_sdram_LCD_Char
# make
# ./ fast_fuse /dev/sdb
由于这个程序user_bin.bin程序比较大了,烧写的时间会长一些吧,我的一般要两三分钟了,大家耐心等待,烧写过程中,屏幕没有反应,不是烧写的sh死了。
四、上电实验
将sd卡插入Tiny4412中,选择sd卡启动,和电脑能过串口0连接好,打开一个串口调试助手,然后上电,可以看到以下现象:
串口助手中不但显示了前面从内存中读出的信息,同时也输入了LCD初始化过程中增加的打印信息,我截取了部分输出如下图9-2所示,从图上可以看出VIDTCON2寄存器的初始化值两种风格设置数值果然不同,这就是问题的所在。
图9-2、LCD初始化输出信息
查看代码,原来是代码如下,原来LINEVAL<< 11写借了,EXYNOS_VIDTCON2_LINEVAL(x)已经将值左移11位了,这里我又左移了11位,导致初始化出错。
//VIDTCON2 = ( EXYNOS_VIDTCON2_LINEVAL(LINEVAL<<11) |
EXYNOS_VIDTCON2_HOZVAL(HOZVAL));
将其修改为:
//VIDTCON2 = ( EXYNOS_VIDTCON2_LINEVAL(LINEVAL)|
EXYNOS_VIDTCON2_HOZVAL(HOZVAL));
重新编译上电实验,从下图9-3中截取的部分可以看出现在初值一样了。
图9-3、LCD初始化输出信息
最后,我将这一章的代码修改为第二种风格的书写方式提供给大家,我自己也编译上电验证了,现在程序也能正常工作了。
这一步完成后,即可以验证了main程序了,如下图9-4所示,是发送字符5后绘制一幅图片的效果图。
图9-4、Tiny4412实现效果图
So Sexy ??? Oh haa??
第十章、尾声
一开始我说过,我一开始一直想在U-BOOT中移植成功LCD功能,但始终无法实现,才想着先用裸机程序来实验,验证LCD程序能正常工作了,再去调试U-BOOT,所以才会从网上才找到《Linux平台下Mini210S裸机程序开发指南》的文档,也才有这一篇裸机程序学习记录文档,到此,我的目的已经达到了,后面按Mini210S的文档程序都是通过Minitools来烧写的,但我们的Tiny4412不行,我也不去深入实现其他的裸机代码了,但文档中提供重定位到DRAM中运行的方法,同样可以实现一些程序稍大的裸机程序,有兴趣的朋友可以参考《Linux平台下Mini210S裸机程序开发指南》文档,实现完所有的功能,为广大学习朋友造福,我在此已花支了一段时间了,我学这个是有目的,不想花过多时间深入其他程序,下一步转回到U-BOOT的调试中去。谢谢!
上一篇:tiny4412 裸机程序 七、重定位代码到DRAM
下一篇:tiny4412学习(一)之从零搭建linux系统
推荐帖子
- 关于PievectTablelnit的地址问题
- 请教各位大侠,为什么在下面的程序中有for(i=0;i128;i++)*Dest++=*Source++;这个语句呢?它的作用是什么呢?voidInitPieVectTable(void){int16i;Uint32*Source=(void*)Uint32*Dest=(void*)EALLOW;for(i=0;i128;i++)*Dest++=*Source++;EDIS;//EnablethePIE
- qlb 微控制器 MCU
- 关于16×32LED点阵滚动显示程序问题
- 如图,我做的是用C51单片机、74HC154和74HC595做的LED点阵显示系统。现在只能两块屏幕上显示相同的汉字,不会写滚动(左移)显示程序,求论坛的大神帮忙知道一下!谢谢源程序#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedint#defineLineCtrlP2#defineN2sbitShift_CLK_Pin=P0^1;sbi
- dandelionCZ 51单片机
- 【视频】BlueNGR-Mesh入门指南
- 在意法半导体AMG公众号里看到使用BlueNRG实现蓝牙Mesh的视频,分享给大家。论坛相关帖子:https://bbs.eeworld.com.cn/thread-653679-1-1.html官方介绍页面:https://www.st.com/content/st_com/en/products/embedded-software/wireless-connectivity-software/stsw-bnrg-mesh.html视频中涉及到的STSW-BNRG-Meshso
- littleshrimp 意法半导体-低功耗射频
- MSP430 单片机的智能小车寻迹模块设计方案
- 本文设计方案以MSP430单片机为系统的控制核心,采用反射式光电传感器模块寻迹,实现智能小车的自动寻迹行驶。在实验中采用与白色相差很大的黑色引导线作为智能小车的既定路线,系统驱动采用控制方式为PWM的直流电机。 详细介绍了反射式光电传感器寻迹模块的工作原理,寻迹模块的电路图以及在以MSP430单片机为控制核心的基础上如何实现智能寻迹小车的自动寻迹行驶。并简要介绍了系统的电路图。该技术可用于无人生产线、服务机器人、仓库等领域。 0引言 智能小车又称轮式移动
- Jacktang 微控制器 MCU
- 【FireBeetle 2 ESP32 C6】怎样编译esp32c6的micropython固件
- 编译固件本身不复杂,困难在于安装编译需要的工具链。因为安装工具链需要访问github,从github上下载较多的文件,而目前github访问不太稳定,因此会带来一些麻烦。编译推荐在linux环境下进行,可以是真实Linux主机,或者虚拟机,以及windows的Linux子系统。编译esp32c6和编译其它esp32源码的方法类似,主要就是安装合适版本的ESP-IDF。因为ESP-IDF更新较快,而micropython只适配了部分版本,因此当ESP-IDF更新后
- dcexpert 测评中心专版
- 电子书
- 哪位大神有《自动化机构设计工程师速成宝典:高级篇》这本书籍?电子书是《自动化机构设计工程师速成宝典:高级篇》(又名《凸轮机构设计7日通》)这个吗借楼拿个积分,谢谢楼主,《自动化机构设计工程师速成宝典:高级篇》是的 是的了
- feifei2025 工控电子
设计资源 培训 开发板 精华推荐
- LTC1538CG-AUX高效低噪声5V/3A、3.3V/3A、2.9V/2.6A、12V/200mA、5V/20mA笔记本电脑电源典型应用电路
- LT8330EDDB 4V 至 16V 输入、5V SEPIC 转换器的典型应用电路
- AM6TW-4824DH35Z ±24V 6 瓦双路输出 DC-DC 转换器的典型应用
- 【涂鸦智能】仓鼠智能家居
- AM2M-2409S-NZ 9 Vout、2W 单路输出 DC-DC 转换器的典型应用
- 具有 400mA 突发钳位、fSW = 1MHz 同步降压稳压器的 LTC3621HMS8E-3.3 2.5V Vout 的典型应用
- MC33364临界导通绿线SMPS控制器典型应用电路
- 负精密基准电压源的典型应用电路不使用精密电阻器
- RT7239、5A、18V、650kHz、ACOT同步降压转换器的典型应用
- 使用 Analog Devices 的 LTC2415-1IGN 的参考设计