tiny4412 裸机程序 九、串口排查驱动原因及字符图片显示

Exynos4412裸机开发 —— UART 一、Exynos4412 UART 的特性       Exynos4412 中UART,有4 个独立的通道,每个通道都可以工作于中断模式或DMA 模式,即 UART 可以发出中断或 DMA 请求以便在UART 、CPU 间传输数据。UART 由波特率发生器、发送器、接收器和控制逻辑组成。     使用系统时钟时,Exynos4412 的 UART 波特率可以达到 4Mbps 。波特率可以通过 阅读详情

一、实验原理

大家可能会有疑问,不是在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用另一种代码风格没能初始化成功的原因?代码的实现过程,相信大家有了前面几章的说明,自己应想明白吧。

二、程序说明

1、UART.C

代码增加了uart.h和uart.c以及从linux系统中提取出来的一些相关文件,虽然我这里重新实现了串口初始化函数,但我也没有在user_bin.bin程序的main执行阶段没有调用此函数进行初始化串口,而是只会通过printf()函数调用putc()输出函数和输入所用getc()函数。所以这也验证了前面的设想,其实一开始串口已初始化好了,我们没有改变时钟什么的,没必要再来初始化一次了。程序实现方式简章不做过多说明。

2、LCD.C

在lcd.c中我copy了《Linux平台下Mini210S裸机程序开发指南》第24章提供的代码中绘图和绘制字符的函数,并对其进行了必要修改,还有从Linux提取了三个字库文件,分别是font_8x16.h、font_10x18.h和font_sun12x22.h,这三个文件分别用来提供不同大小的字模,程序中可以通过LCD.h中的宏定义来选择一种字模来做为LCD中输出文字,LCD输出字的方法也是很古老的,就是移位比较字模数据中那一bit是1,即在相应位置描点。但这种方法实现字符输出,在测试过程中我发现,绘制文字一直不是很清晰,三个字库都如此,程序上可能存在什么问题吧,需要好好排查。

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的调试中去。谢谢!


备注:说明一下,后面两章的代码已上传到我的资源里,我要了两个下载分,不好意思,我的资源分太少了,我得赚点,我相信我的程序是绝对能运行的,觉得值就去下载。

资源地址:

http://download.youkuaiyun.com/detail/eshing/7598297

http://download.youkuaiyun.com/detail/eshing/7601447

使用F1C200S从零制作掌机之点灯大法 F1C200S 点灯驱动 阅读详情

相关推荐

4412裸机程序之IIC

IIC总线是个比较重要的模块,很多外设都通过IIC来传输数据,下面大致说下IIC总线协议原理: IIC只有2条线,SDA(数据线)/SCL(时钟线),分为主机(IIC控制器)和从机(EEPROM),2条线上可以挂很多从机设备,主机通过向从机发地址,哪个从机响应了,就与哪个从机通信。 当SCL/SDA都为高电平时,拉低SDA作为起始信号,  SCL为高,拉高SDA做为

cyj88jyc的专栏 1567

12. 如何实现基于Cortex-A9 的UART裸机驱动并实现printf函数

前言 通讯问题,和交通问题一样,也有高速、低速、拥堵、中断等等各种情况。如果把串口通讯比做交通,UART比作车站,那么一帧的数据就好比汽车。汽车跑在路上,要遵守交通规则。如果是市内,一般限速30、40,而高速公路则可以到120。而汽车走什么路,限速多少,就要看协议怎么规定了。常见的串口协议有RS-232、RS-422、RS-485等,他们之间有何细微差别?下面我们就一起来探讨一下。 UART是什么 UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmi

一口Linux的专栏 1332

stm32在SDIO模式下SD写入错误的问题

重写bsp_driver_sd.c文件中的BSP_SD_WriteBlocks函数是_weak 函数,可以在自己的源文件myfile.c中重写该函数,当写发生错误后,清除错误标记,再重试几次即可,在我的单片机上,一般第一次重试即可成功。更改sdio.c中的MX_SDIO_SD_Init函数,将hsd.Init.ClockDiv = 0改为hsd.Init.ClockDiv = 2,写频率会变成原来的1/2,在我的单片机上降频1/2之后,写错误将不再发生。优点:上层应用软件不需要更改,也不需要禁用中断。

qizhi321123的博客 4436

Tiny4412裸机开发过程(四) --- 点亮LED灯和下载裸机程序

        本节算是切入正题,正式开始编写我们裸机程序。那么在编写裸机程序时与我们写单片机程序如STM32有什么不同?其实在编写时的步骤与单片机时一般无二,基本步骤一般是查看硬件原理图,查看芯片手册,编写程序,下载程序。下面我们也按这个步骤来编写程序。查看硬件原理图:        通过查看原理图我们知道了两个信息:四个LED灯连接在GPM4_0-GPM4_3的IO口上,且是低电平有效(即给低...

qq_35281599的博客 3098

(Exynos4412) Tiny4412 裸机开发 - 点亮 LED 灯

点亮 LED 灯是嵌入式系统中最基本的任务之一。本指南介绍如何在 Exynos4412 Tiny4412 裸机系统上点亮 LED 灯。在Tiny4412开发板上进行裸机开发时,点亮LED灯是一项常见的入门任务,它涉及到直接操作Exynos4412处理器的GPIO(General Purpose Input/Output)接口,以控制板载LED的亮灭状态。这一过程有助于开发者熟悉硬件资源访问、寄存器操作等底层开发技能,为后续更复杂的驱动开发奠定基础。

走向CTO的路上... 835

ITOP—4412裸机教程

基于ITOP—4412开发板的裸机教程,希望对大家有所帮助

tiny4412 裸机程序 九、串口排查驱动原因及字符图片显示【转】

本文转载自:http://blog.youkuaiyun.com/eshing/article/details/37410571 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[+] 一、实验原理 大家可能会有疑问,不是在BL2目录中的mem_init_tiny4412.S实现了串口初始化了,且也有串口输出函数,要不然怎么串口调试助手上怎么会...

155

exynos4412裸机系列教程源码【合集】

exynos4412裸机系列教程源码【合集】,完整包,包含此教程的所有代码

Tiny4412逻辑程序--点亮LED灯

一、测试平台 开发板:Tiny4412SDK标准版(TinySDK 1506) 交叉编译工具:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz Linux环境:Ubuntu-17.10.1 二、点亮LED1 2.1、使用汇编点亮LED1 led文件夹中包含led.S、led.lds、Makefile三个文件。其中led.S中程序如下所示: .te...

Andy·Wu的专栏 735

全国充电站分布数据

CnOpenData推出的充电站数据覆盖全国34个省份的3万条数据,包含充电站名称、省份名称、省份代码、商圈、经纬度等地理信息以及商业类型、评分、消费等衍生信息,能为城市规划、环境科学、市场分析、技术发展和社会经济研究等多个领域提供宝贵的数据支持。

Sunny9qx的博客 4030

Index-TTS-1.5:多模态语音合成的技术演进与商业落地实践

本文深入探讨了Index-TTS-1.5在多模态语音合成领域的技术演进与商业落地。该模型基于GPT风格的自回归Transformer架构,通过优化条件编码器和引入字符-拼音混合建模,显著提升了语音生成的稳定性、精准度和真实感,实现了高质量的零样本语音克隆。文章还详细介绍了其云端体验、本地WebUI部署及ComfyUI集成等实战路径,并分析了其在虚拟数字人、个性化内容创作等商业场景中的应用潜力与挑战。

weixin_29098367的博客 402

gpio的使用----->4412的裸机的使用(第三节)

2、 我是在uboot 上进行编程的,所以没有设置时钟,因为uboot 已经设置好了。1、 4412 的中断是 与输入,输出在同一个级别的,与stm32不同。0 4412 的硬件原理图+ 数据手册。这一节主要是 4412 的裸机的使用。每一组都有这几个 寄存器。我在板子上测试是可以的。这份代码也是可以运行的。1 汇编语言的编写。

weixin_44767571的博客 321

中科蓝讯Downloader配置实战:从软硬开关机到ANC降噪的完整指南

本文提供了中科蓝讯Downloader工具的详细配置实战指南。内容涵盖从基础的软硬开关机选择与配置,到核心的EQ音效调试、触摸按键与入耳检测优化,以及高阶的ANC降噪与电源管理设置。旨在帮助开发者快速掌握关键配置项,高效完成蓝牙耳机产品的功能调试与优化。

s4t5u6v7的博客 508

基于TINY4412的Andorid开发-------简单的LED灯控制

参考资料: 《Andriod系统源代码情景分析》 《嵌入式Linux系统开发完全手册_基于4412_上册》     作者:彭东林 邮箱:pengdonglin137@163.com     平台介绍: 主机:Win7 32位 虚拟机:VMware10 + ubuntu-12.04.2-desktop-amd64 Android版本:  android-4.2.2_r1 L...

weixin_34088838的博客 394

RK3568平台开发系列讲解:Linux wifi的调试

查询结果中state为ENABLE,表示hostapd程序启用成功。首先查看设备是否存在。

内核笔记 167

4412裸机程序之UART串口

通用异步收发器UART,就是通常所说的串口,左边是4412板子右边是pc,两边都可以通过TxD,RxD按照某种协议传送和接收数据,具体原理不用太细纠 通过配置寄存器,就可以按uart的协议传送数据。主要就是配置uart GPIO,时钟来源,波特率,工作模式,然后就可以通过读写URXH0和UTXH0寄存器传送数据。 代码如下 // GPIO #define GPA0CON (*(

cyj88jyc的专栏 3232

YOLOv8改进 | 融合篇,YOLOv8主干改进融合网络之MobileNetV3+CA注意机制,助力涨点

MobileNetV3通过结合硬件感知网络架构搜索(NAS)和NetAdapt算法,通过新颖的架构改进进一步提升了性能。YOLOv8中的主干网络替换成MobileNetV3+引入CA注意机制

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1882

Tiny4412裸机程序之DDR工作原理与时序(三)

转载:http://www.techbulo.com/1475.htmlTiny4412裸机程序之DDR工作原理与时序(三)2014年11月07日 ⁄ 裸机程序 ⁄ 共 11142字 ⁄ 字号 小 中 大 ⁄ 评论 4 条 ⁄ 阅读 3,363 次Tiny4412所用的芯片是DDR3,虽然和前面介绍的Tiny4412裸机程序之DDR工作原理与时序(二) 很多原理是一致的,这里还是就DDR3再详细的...

zjy900507的博客 684

Android 9.0 SystemUI禁用长按recent键的分屏功能

​ 在9.0的系统产品开发中,系统对于多窗口模式默认会有分屏功能的,但是在某些产品中,需要禁用分屏模式,所以需要在导航栏中 禁用长按recent的分屏模式功能,接下来分析下相关分屏模式的实现 ​

安卓兼职framework和app工程师的博客 449

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

tiny4412最新光盘资料

2019年更新的tiny4412光盘资料下载地址如下: 1.FriendlyElec Downloads 2.链接:https://pan.baidu.com/s/1F9vizZ6mmG-Qx1NhiB_zwg提取码:1o42

老吕丶的博客 1214

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

tiny4412学习(一)之从零搭建linux系统(烧写uboot、内核进emmc+uboot启动内核)

硬件平台:tiny4412系统:linux-3.5-20151029文件系统:busybox-1.22.1.tar.bz2编译器: arm-linux-gcc-4.5.1 由于友善支臂提供的minitools不是开源,使用起来很不舒服。本文将记录从零使用uboot在tiny4412上搭建linux系统的。由于之前只是学了2440,完成这个流程也遇到各种,现在总结如下。其中参考了多篇博客才得以

风雨无阻 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

tiny_4412编译环境搭建ubuntu12.04

Win7(64bit) + vritrulbox虚拟机ubuntu12.04 (64bit)

不喜欢debug的疯子 6710
上一篇: tiny4412 裸机程序 八、重定位到DRAM及LCD实验
下一篇: 第一章、Tiny4412 U-BOOT移植一 说明
eshing
博客等级 码龄18年 146粉丝 21原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值