首页资源分类嵌入式系统 > x4418开发板裸机教程

x4418开发板裸机教程

已有 445491个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:x4418开发板裸机

    分    享:

    文档简介

    x4418开发板裸机教程,非常有用的一手资料

    文档预览

    深圳市九鼎创展技术有限公司技术文档 文文档档名名称称::xx44441188 开开发发板板裸裸机机教教程程 深圳市九鼎创展科技有限公司 地址:深圳市宝安区兴业路宝安互联网产业基地 B 区 3003B 室 网址:http://www.9tripod.com 论坛:http://bbs.9tripod.com/ 版权声明 本手册版权归属深圳市九鼎创展科技有限公司所有, 并保留一 切权力。非经九鼎创展同意(书面形式),任何单位及个人不得擅自摘 录本手册部分或全部,违者我们将追究其法律责任。 敬告: 在售开发板的手册会经常更新,请在 http://www.9tripod.com 网站下载最新手册,不再另行通知。 版本说明 版本号 Rev.01 日期 2015-6-24 作者 lqm 原始版本 描述 技术支持 如果您对文档有所疑问,您可以在办公时间(星期一至星期五上午 8:30~12:00;下午 1:30~6:00;星期六上午 9:00~12:00)拨打技术支持电话或 E-mail 联系。 网 址: www.9tripod.com 联系电话: 0755-33133436 E-mail: supports@9tripod.com 销售与服务网络 公司:深圳市九鼎创展科技有限公司 地址:深圳市宝安区兴业路宝安互联网产业基地 B 区 3003B 室 邮编:518101 电话:0755-33133436 网址:http://www.9tripod.com 论坛:http://bbs.9tripod.com http://www.xboot.org 淘宝:http://armeasy.taobao.com QQ 群: X4412 技术论坛: 【16073601】 x4418 技术论坛: 【199358213】 x210 技术论坛 1: 【23831259】 x210 技术论坛 2: 【211127570】 x210 技术论坛 3: 【211128231】 i210 技术论坛 1: 【159144256】 i210 技术论坛 2: 【189920370】 目录 目录 版权声明....................................................................................................................... II 第 1 章 序言 .................................................................................................................2 第 2 章 裸机开发环境的搭建 .....................................................................................3 2.1 安装 eclipse...............................................................................................................3 2.2 建立第一个工程 ....................................................................................................... 6 2.3 编译源码 ................................................................................................................. 10 2.4 下载源码到 SD 卡..................................................................................................12 2.5 设置开发板启动顺序 ............................................................................................. 17 2.6 通过 TF 卡运行裸机程序 ......................................................................................17 第 3 章 X4418 裸机实例 ...........................................................................................18 3.1 X4418 裸机实例 1-LED 流水灯实验....................................................................18 3.1.1 原理图.............................................................................................................18 3.1.2 源码.................................................................................................................18 3.1.3 实验现象.........................................................................................................20 3.2 X4418 裸机实例 2-蜂鸣器实验.............................................................................20 3.2.1 导入已有的工程.............................................................................................20 3.2.2 原理图.............................................................................................................23 3.2.3 源码.................................................................................................................24 3.2.4 实验现象.........................................................................................................24 3.3 X4418 裸机实例 3-复位实验.................................................................................24 3.3.1 原理图.............................................................................................................24 3.3.2 源码.................................................................................................................24 3.3.3 实验现象.........................................................................................................25 3.4 X4418 裸机实例 4-按键控制 LED 实验 ...............................................................25 3.4.1 原理图.............................................................................................................25 3.4.2 源码.................................................................................................................26 3.4.3 实验现象.........................................................................................................26 3.5 X4418 裸机实例 5-按键控制 LED 和蜂鸣器实验 ...............................................26 3.5.1 原理图.............................................................................................................26 3.5.2 源码.................................................................................................................26 3.5.3 实验现象.........................................................................................................26 3.6 X4418 裸机实例 6-LED 模拟心脏跳动实验 ........................................................26 3.6.1 源码.................................................................................................................26 3.6.2 实验现象.........................................................................................................27 3.7 X4418 裸机实例 7-按键中断实验.........................................................................27 3.7.1 源码.................................................................................................................27 3.7.2 实验现象.........................................................................................................27 3.8 X4418 裸机实例 8-串口 shell 实验 .......................................................................27 3.8.1 源码.................................................................................................................27 3.8.2 实验现象.........................................................................................................27 3.9 X4418 裸机实例 9-串口输入实验.........................................................................29 3.9.1 源码.................................................................................................................29 3.9.2 实验现象.........................................................................................................30 3.10 X4418 裸机实例 10-移植 printf 函数实验............................................................30 3.10.1 源码.................................................................................................................30 3.10.2 实验现象.........................................................................................................30 3.11 X4418 裸机实例 11-LCD 字符显示实验..............................................................31 3.11.1 源码.................................................................................................................31 3.11.2 实验现象.........................................................................................................32 3.12 X4418 裸机实例 12-GUI 显示实验.......................................................................32 3.12.1 源码.................................................................................................................32 3.12.2 实验现象.........................................................................................................32 3.13 X4418 裸机实例 13-miniGAME 实验...................................................................32 3.13.1 源码.................................................................................................................32 3.13.2 实验现象.........................................................................................................32 3.14 X4418 裸机实例 14-随机矩形框显示实验...........................................................33 3.14.1 源码.................................................................................................................33 3.14.2 实验现象.........................................................................................................33 3.15 X4418 裸机实例 15-长方体旋转实验...................................................................34 3.15.1 源码.................................................................................................................34 3.15.2 实验现象.........................................................................................................34 3.16 X4418 裸机实例 16-轴承旋转实验.......................................................................34 3.16.1 源码.................................................................................................................34 3.16.2 实验现象.........................................................................................................34 3.17 X4418 裸机实例 17-动态字符显示实验...............................................................35 3.17.1 源码.................................................................................................................35 3.17.2 实验现象.........................................................................................................35 3.18 X4418 裸机实例 18-二维码扫描实验...................................................................35 3.18.1 源码.................................................................................................................35 3.18.2 实验现象.........................................................................................................36 第 4 章 其他产品介绍 ...............................................................................................37 4.1 核心板系列 ............................................................................................................. 37 4.2 开发板系列 ............................................................................................................. 37 第1页 第1章 序言 在早期的 x210,x4412 开发平台上,我们陆续推出了近 30 个丰富有趣的裸机实例,包 括各种多媒体动画,趣味游戏等,深受广大嵌入式爱好者喜爱。在 x4418 开发平台上,应用 户所托,我们在全新的四核平台上,攻克各种难关,继续推出近 20 个裸机实例,供大家研 究学习。很多厂商推出的裸机程序过于简单,在 x4418 平台上,我们由简到烦,从简单的点 灯,到点亮 LCD,在 LCD 上绘图,绘动画等,复杂的程序多达几十万行,有兴趣的读者可 以仔细琢磨里面的机理,势必对嵌入式的理解,对嵌入式兴趣的培养,以及对编程水平的提 高,都有很大的作用,也期望我们推出的裸机开发实验,真正能对您有所帮助。 声明:本文档全部内容为九鼎创展(深圳市九鼎创展科技有限公司)原创作品,非经九鼎 创展同意(书面形式),任何单位及个人不得擅自摘录本手册部分或全部,违者我们将追究其 法律责任。 第2页 第2章 裸机开发环境的搭建 开发裸机有很多种方法,之前在 S3C2410,S3C2440 平台上,比较常用的是 ADS1.2 或 是 MDK。但是这些工具主要针对 ARM9 平台,对于后续的 cortex-A8,cortex-A9 平台,他们 是心有余而力不足。也有一些朋友喜欢直接在 linux 下进行裸机开发,但是对于开发 WINCE 的朋友,可能就遇到困难了。在 linux 下开发,需要安装 linux 操作系统,需要熟悉 makefile, 交叉编译工具链等。正因为如此,我们自主搭建了强大的 eclipse 开发平台,制作了四套 eclipse 开发环境,同时支持 linux32 位,linux64 位,windows32 位,windows64 位操作系统。有了 这四套 eclipse 开发环境,无论您使用 ubuntu32 位,ubuntu64 位,或是 fedora32 位,fedora64 位,或是 winxp,win7 等等,都可以开发裸机。同时,烧写程序也不再局限于 linux 系统, 无论您使用何种操作系统,都能方便的将映像文件写到 SD 卡。下面就开始我们裸机开发的 神奇之旅吧! 2.1 安装 eclipse 第一步:确认自己的 PC 机开发环境。开发板光盘中有如下四个 eclipse 包: eclipse-kepler-for-arm-windows-x86_32.7z eclipse-kepler-for-arm-windows-x86_64.7z eclipse-kepler-for-arm-gtk-linux-x86_64.7z eclipse-kepler-for-arm-gtk-linux-x86_32.7z 从命名方式,我们能够很清楚的差别,我们需要的开发包。这些包全部是绿色软件,无 需安装,解压即可。由于笔者采用 winxp 32 位操作系统,因此选用第一个包,读者根据自 己的 PC 机环境选择对应安装包,后续不再重复说明。 第二步:解压 eclipse 安装包。 将 eclipse-kepler-for-arm-windows-x86_32.7z 拷贝到安装目录,如 D 盘并解压,如下图: 第3页 第三步:启动 eclipse 在解压的安装目录下,有 eclipse.bat 和 eclipse.exe 两个文件,双击 eclipse.bat 即可启动。 由于使用 eclipse 需要一些环境变量的声明,我们专程做了个脚本 eclipse.bat,双击即可声明 环境变量,同时启动 eclipse。这样,就不用再去手动设置环境变量了。当然用户也可以手动 设置好环境变量,然后通过双击 eclipse.exe 来运行 eclipse,这里就不赘述了。 启动后界面如下: 第4页 这里是一幅欢迎界面,直接关掉,即进入我们需要的开发界面: 注意,第一次启动 eclipse 时,会提示我们选择工作空间路径,这里我们设置为 D:\workspace\x4418,当然用户也可以设置到自己喜爱的路径。 第5页 2.2 建立第一个工程 第一步:双击 eclipse.bat,打开 eclipse 第二步:在 Project Explorer 的空白栏右键单击->New->C Project, 弹出新建项目的对话框: 第6页 在 Project name 中输入工程名称,这里我们命名为 LED,在 Use default location 前有一 个勾,默认已经勾选上,下面的 Location 一栏就是我们的工程目录。由于前面我们已经将 默认工作空间设置为 D:\ workspace,因此我们建立的工程路径为:D:\workspace\LED。在 Project type 一栏中选择 Makefile project 下面的 Empty Project,Toolchains 不用管他,点击 Finish。 新建的工程如下: 第7页 我们可以进入 D:\workspace\x4418\LED 目录,这时里面只有两个文件: 这是 eclipse 自动生成。找到我们提供的第一个裸机工程文件目录 x4418-led,复制里面 所有内容: 第8页 在 eclipse 的 Project Explorer 一栏,右键点击工程 LED,选择 Paste,即将 LED 工程拷 贝过来了。 拷贝后工程目录如下: 第9页 这里,include 目录是我们已经建好的基于 s5p4418 的一些头文件,用户可直接调用。soure 目录为源代码文件,程序首先会从 start.S 文件开始执行,这里面初始化了一系列 4418 的寄 存器,如看门狗等。之后,会通过 bl main 语句跳到 main.c 中执行 main 函数。 工程目录中 link.ld 为链接文件,Makefile 为编译源码需要用到的脚本文件,mk4418.exe 用于计算校验和,没有这个文件,我们后面生成的映像,下载到 SD 卡后就没法运行了。 2.3 编译源码 右击 Project Explorer 栏的工程名称 x4418-led,选择 Build Project: 第 10 页 也可以使用快捷键 CTRL+B 编译。编译时界面如下: 编译完成后,在工程目录下会生成 output 目录: 第 11 页 图中 x-ledpak.bin 即是我们最终需要的映像文件。注意千万别使用 x-led.bin,该文件没 有和 second boot 打包,不能直接使用。 2.4 下载源码到 SD 卡 针对 x4418 开发板,裸机开发我们几乎都是将裸机程序直接烧写到 TF 卡运行。在 WindowsXP 或是 WIN7 下,可以使用我们自主编写的烧写工具 x4418_Fusing_Tool.exe 烧写, 该软件可无缝兼容 x210、x4412 开发板。 注意,下载到 TF 卡时,首先我们需要给 TF 卡分区。从光盘中找到 PartitionManager.exe 工具并打开,界面如下: 上图中 H 盘即为我们插入的 TF 卡分区。我们需要使用这个工具给 TF 卡预留一些空间, 用于存放 bootloader 或裸机程序。首先我们右键点击最下面图标的可移动磁盘(H:),点击删 除分区,如下图: 第 12 页 软件会弹出确认界面: 勾上下次不再询问,点击是,即删除了原来的分区。这时,TF 卡就只剩一个分区了。 再次右键点击该分区,点击创建分区: 第 13 页 在请指定分区前面的自由空间大小一栏中填入我们需要预留的空间,我们这里填 100M, 留给 bootloader 或裸机已经足够用了。在请为新分区选择文件系统中选择 FAT32,点击是, 然后再到主界面快捷菜单栏点击应用即可。成功分区后提示如下: 第 14 页 至此,分区成功。用户也可以在 ubuntu 下使用 gparted 工具分区。 双击 x4418_Fusing_Tool.exe,将不小于 2GB 的 TF 卡通过读卡器插到 PC 机(注意市面上 很多山寨的读卡器,推荐大家用正品行货,如飚王的读卡器,使用山寨读卡器不保证能正常 将映像烧写到 TF 卡),这时烧写软件会自动识别出 TF 卡,如下图: 第 15 页 点击 Browse,找到我们刚生成的 x4418-led.bin 文件,点击 Add,映像会添加到下面的 路径中,这样下次如果不更改路径,就不用再指定路径了。 点击 START,开始烧写。烧写完成后,会有如下提示: 第 16 页 点击确定即可。 2.5 设置开发板启动顺序 x4418 开发板默认首先从 SD0 通道启动,如果 SD0 卡槽放有能够启动 4418 的 TF 卡, 则从 TF 卡启动,否则从 EMMC 启动。当我们将裸机程序烧写到 TF 卡后,只需要插到 SD0 通道,即 x4418 开发板右侧的 TF 卡槽,开机即可支行裸机程序,而不必理会开发板上是否 已经烧有映像,也无需进行任何的跳线设置。 2.6 通过 TF 卡运行裸机程序 将烧有裸机程序的 TF 卡插到 x4418 开发板右侧的 TF 卡槽,给开发板上电,无需按任 何按键,四盏 LED 灯已经在来回闪烁了。 第 17 页 第3章 X4418 裸机实例 3.1 X4418 裸机实例 1-LED 流水灯实验 3.1.1 原理图 上图中,开发板上电后,无需按任何按键,VCC3P3_SYS 会产生 3.3V 的电压,其中 D26 无需 GPIO 控制,为常亮状态,即我们所说的电源指示灯。D[22:25]对应 GPIO 如下: LED 指示灯 GPIO 口 D22 GPIO_B28 D23 GPIO_C11 D24 GPIO_C7 D25 GPIO_C12 当对应的 GPIO 口为低电平时,相应的 LED 灯被点亮,反之会灭。 3.1.2 源码 说明:由于笔者的工作空间在 D 盘根目录,所以后面提及所有源码包全部在 D 盘,介 绍路径时也全部按这个路径介绍,用户如果设置在其他盘,源码包路径会相应变化,特此声 明,后续不再重复。 源码路径: D:\workspace\x4418\x4418-led\source\main.c D:\workspace\x4418\x4418-led\source\tester-led.c D:\workspace\x4418\x4418-led\source\startup\start.S D:\workspace\x4418\x4418-led\source\hardware\ hw-led.c 这里是我们学习裸机开发的第一个示例,我们会将源码中每一个文件都详细介绍。 在 main()主函数中,do_system_initial 函数首先会调用 led_initial 函数初始化 led,再通过 tester_led 函数控制相应 LED 的亮与灭。在整个 main 函数中,关键在于 tester_led 函数中的 while(1)这个死循环,每隔 50ms 设置一次 LED 灯状态,时间间隔通过延时函数 mdelay 实现, LED 灯的状态通过变量 index 实现。 LED 初始化函数如下: 第 18 页 void led_initial(void) { /* LED1 */ gpio_set_pull(S5P4418_GPIOB(28), GPIO_PULL_UP); gpio_direction_output(S5P4418_GPIOB(28), 1); /* LED2 */ gpio_set_pull(S5P4418_GPIOC(11), GPIO_PULL_UP); gpio_direction_output(S5P4418_GPIOC(11), 1); /* LED3 */ gpio_set_pull(S5P4418_GPIOC(7), GPIO_PULL_UP); gpio_direction_output(S5P4418_GPIOC(7), 1); /* LED4 */ gpio_set_pull(S5P4418_GPIOC(12), GPIO_PULL_UP); gpio_direction_output(S5P4418_GPIOC(12), 1); } 这里针对每一个 GPIO 口都设置了两个寄存器,以 LED4 为例讲解,其他雷同。gpio_set_pull 函数用于将 GPIO_C12 设置为上拉,gpio_direction_output 函数用于将 GPIO_C12 设置为输 出,且默认输出电平为 1。 上述 LED 初始化函数将四组 GPIO 设置为输出,同时都设置为高电平,使能上拉。根据硬 件电路分析,初始化之后,四盏 LED 灯都会熄灭。紧接着通过 LED 设置函数 led_set_status ()控制 LED 的亮与灭,对应程序如下: void led_set_status(enum led_name name, enum led_status status) { switch(name) { case LED_NAME_LED1: if(status == LED_STATUS_ON) gpio_direction_output(S5P4418_GPIOB(28), 0); else if(status == LED_STATUS_OFF) gpio_direction_output(S5P4418_GPIOB(28), 1); break; case LED_NAME_LED2: if(status == LED_STATUS_ON) gpio_direction_output(S5P4418_GPIOC(11), 0); else if(status == LED_STATUS_OFF) gpio_direction_output(S5P4418_GPIOC(11), 1); break; case LED_NAME_LED3: 第 19 页 if(status == LED_STATUS_ON) gpio_direction_output(S5P4418_GPIOC(7), 0); else if(status == LED_STATUS_OFF) gpio_direction_output(S5P4418_GPIOC(7), 1); break; case LED_NAME_LED4: if(status == LED_STATUS_ON) gpio_direction_output(S5P4418_GPIOC(12), 0); else if(status == LED_STATUS_OFF) gpio_direction_output(S5P4418_GPIOC(12), 1); break; default: break; } } 该函数有两个传入参数 name 和 status,name 对应第几盏灯,status 表示 LED 的亮与 灭。亮时,将相应 GPIO 置低,灭时置高。本程序巧妙的运用了变量 index,通过它来实现四 盏灯依次被点亮。详细机理读者可仔细琢磨源码中的 while(1)死循环程序。到此,整个 main 函数结束。 前面的源码路径中,列出了很多源文件,而真正干活的好像只有 main.c 一个文件,那么 其他文件是否可以删掉不用?答案是否定的,在嵌入式平台上,并不像单片机那样简单的写一个 main 函数就完了,我们还需要实现内存,看门狗,中断等的初始化,实现源码的自拷贝等等。 在使用 eclipse 编译时,还需要相应的链接文件,makefile 指定源码的编译和目标的生成。 3.1.3 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,给开发板上电,可以看到四盏 LED 灯开始 循环显示。我们可以通过设置 mdelay 函数的传入参数来调节流水时间间隔。 3.2 X4418 裸机实例 2-蜂鸣器实验 3.2.1 导入已有的工程 这一章节我们学习如何导入现有的工程。 第一步:将蜂鸣器实例程序 x4418-beep 拷贝到工程目录; 第二步:在 eclipse 的 Project Explorer 的空白处右键,点击 Implort, 第 20 页 弹出如下界面: 第 21 页 在 C/C++一栏选择 Existing Code as Makefile Project,点击 Next; 第 22 页 点击 Browse,选择解压出来的工程根目录,点击 Finish,即完成工程的导入。 3.2.2 原理图 上述电路通过一个 NPN 的三级管控制蜂鸣器的停止与蜂鸣。 GPIO 状态 蜂鸣器状态 第 23 页 GPIO_C14 = 0 GPIO_C14 = 1 停止 蜂鸣 3.2.3 源码 D:\workspace\x4418\x4418-beep\source\main.c D:\workspace\x4418\x4418-beep\source\ tester-beep.c 在 main 函数中,调用 beep_initial 函数初始化控制蜂鸣器的 GPIO 口,然后进入 while(1)死循环,每隔约 500ms,蜂鸣器状态改变一次,实现反复停止,蜂鸣的功能。 3.2.4 实验现象 将 TF 卡插到 x4418 开发板的 SD 卡槽,上电开机,可以听到每隔约 500ms,蜂鸣器会 鸣叫一次。我们可以通过设置 mdelay 函数的传入参数来调节蜂鸣时间间隔。 3.3 X4418 裸机实例 3-复位实验 3.3.1 原理图 默认开发板上存在一个复位按钮,我们也可以通过程序实现软复位。 3.3.2 源码 D:\workspace\x4418\x4418-reset\source\main.c D:\workspace\x4418\x4418-reset\source\ tester-reset.c 在 main.c 中,tester_reset 函数首先会打印一些提示信息,延时 5 秒后,直接操作寄存 器 PWRCONT 和 PWRMODE,操作完后实现软复位。tester_reset 函数源码如下: int tester_reset(int argc, char * argv[]) { serial_printf(0, "S5P4418 rset test...\r\n"); serial_printf(0, "Five seconds later, System will reset\r\n"); serial_printf(0, "5 seconds\r\n"); mdelay(1000); serial_printf(0, "4 seconds\r\n"); mdelay(1000); serial_printf(0, "3 seconds\r\n"); mdelay(1000); serial_printf(0, "2 seconds\r\n"); 第 24 页 mdelay(1000); serial_printf(0, "1 seconds\r\n"); mdelay(1000); serial_printf(0, "0 seconds, System reset...\r\n"); write32(phys_to_virt(S5P4418_SYS_PWRCONT), (read32(phys_to_virt(S5P4418_SYS_PWRCONT)) & ~(0x1<<3)) | (0x1<<3)); write32(phys_to_virt(S5P4418_SYS_PWRMODE), (read32(phys_to_virt(S5P4418_SYS_PWRMODE)) & ~(0x1<<12)) | (0x1<<12)); while(1) { } return 0; } 3.3.3 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,可以看到串口有如下打印信息: 打印完最后一句后,开发板将会重启。 3.4 X4418 裸机实例 4-按键控制 LED 实验 3.4.1 原理图 第 25 页 3.4.2 源码 D:\workspace\x4418\x4418-key-with-led\source\main.c D:\workspace\x4418\x4418-key-with-led\source\ tester-key-with-led.c 由于我们需要通过按键控制 LED,所以要将 LED 和按键的 GPIO 口都初始化。这里我 们保留了上一章节的控制 LED 的程序,因此,在 main 函数中,通过 led_init,key_init 以及 speaker_init 函数初始化对应的 IO 口。紧接着进入 while(1)死循环,不断的判断 LEFT, DOWN,RIGHT,BACK 共四个按键。默认这四个键没有按下时,执行 if()下面的语句,置四个 LED 为低。一旦有键按下,则执行相应的 else 语句,点亮对应 LED 灯,从而达到按键控制 LED 的目的。 3.4.3 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,默认情况下,四盏 LED 灯都为 灭的状态,蜂鸣器默认不发声。按下 LEFT,DOWN,RIGHT,BACK 键,对应的 LED 会 被点亮,同时按下,LED 灯也会同时被点亮,松开即灭。 3.5 X4418 裸机实例 5-按键控制 LED 和蜂鸣器实验 3.5.1 原理图 原理图同上一章节。这里只是在程序中控制 LED 的同时,也控制了蜂鸣器,原理大同 小异,读者可以自行研究。 3.5.2 源码 D:\workspace\x4418\x4418-key-with-led-beep\source\main.c D:\workspace\x4418\x4418-key-with-led-beep\source\ tester-key-with-led-beep.c 3.5.3 实验现象 将 TF 卡插到 x4418 开发板的 TF 卡槽,上电开机,按下 LEFT,DOWN,RIGHT,BACK 四个按键的任意一个,对应的 LED 灯会被点亮,同时蜂鸣器也会鸣叫。松开按键后,灯灭 鸣停。 3.6 X4418 裸机实例 6-LED 模拟心脏跳动实验 3.6.1 源码 源码路径: D:\workspace\x4418\x4418-timer-led-heartbeat\source\main.c D:\workspace\x4418\x4418-timer-led-heartbeat\source\ tester-timer-led-heartbeat.c D:\workspace\x4418\x4418-timer-led-heartbeat\source\hardware\ s5p4418-tick.c 在主函数 main()中,首先调用 do_system_initial 函数初始化一系列硬件相关寄存器, 第 26 页 然 后 通 过 tester_timer_led_heartbeat 函 数 进 入 死 循 环 。 值 得 注 意 的 是 , 在 tester_timer_led_heartbeat 函数中,没有做任何事情,直接进入死循环。那么真正的程 序在哪里执行的呢? 事实上,这里利用了定时器功能。在 s5p4418-tick.c 中,s5p4418_tick_initial 函数 申请了一个定时器中断,中断服务线程为 timer_interrupt,在 timer_interrupt 函数中调用 led_heartbeat_task 函数,进而控制 LED 灯。 3.6.2 实验现象 将 TF 卡插到 x4418 开发板的 TF 卡槽,上电开机,可以看到第一盏灯就像心脏一样不 断跳动。在 linux 内核中也有这个用 LED 模拟心脏跳动的驱动程序,读者可以自行分析其机 理。 3.7 X4418 裸机实例 7-按键中断实验 3.7.1 源码 D:\workspace\x4418\x4418-key-interrupt\source \main.c D:\workspace\x4418\x4418-key-interrupt\source \ tester-key-interrupt.c 在主函数 main()中,通过 do_system_initial 函数初始化硬件相关寄存器,再调用 tester_key_interrupt 函数实现按键中断。在 tester_key_interrupt 函数中,首先初 始 化 对 应 按 键 的 GPIO 口 , 再 请 求 中 断 服 务 函 数 , 当 按 下 对 应 按 钮 时 , 中 断 服 务 函 数 gpiob9_interrupt_func 被触发,对应 LED 灯会被点亮,同时会在串口上打印相关信息。 3.7.2 实验现象 将 TF 卡插到 x4418 开发板的 TF 卡槽,上电开机,按下 MENU 键,会在串口终端看到 有相应的打印信息,同时 LED 灯会被点亮,松手即灭。 3.8 X4418 裸机实例 8-串口 shell 实验 3.8.1 源码 D:\workspace\x4418\x4418-serial-shell\source \main.c D:\workspace\x4418\x4418-serial-shell\source \ tester-serial-shell.c 在 主 函 数 main 中 通 过 do_system_initial 初 始 化 相 关 寄 存 器 , 然 后 调 用 tester_serial_shell 函数测试串口 shell 指令。 3.8.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,这时,串口会有如下打印信息: 第 27 页 敲入 help: 敲入 hello: 第 28 页 敲入 clear: 3.9 X4418 裸机实例 9-串口输入实验 3.9.1 源码 D:\workspace\x4418\x4418-serial-echo\source\main.c D:\workspace\x4418\x4418-serial-echo\source\tester-serial-echo.c 在主函数 main()中,通过 do_system_initial 函数调用 s5p4418_serial_initial 函 第 29 页 数初始化串口,再调用 tester_serial_echo 函数实现串口监控。 3.9.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,串口会有打印信息提示。这时 我们按下 PC 上对应按键,开发板上能监测到对应按键并显示出来,如下图所示: 3.10 X4418 裸机实例 10-移植 printf 函数实验 3.10.1 源码 D:\workspace\x4418\x4418-serial-stdio\source\main.c D:\workspace\x4418\x4418-serial-stdio\source\tester-serial-stdio.c 在主函数 main()中,通过 do_system_initial 函数调用 s5p4418_serial_initial 函数初始化四路串口,通过 tester_serial_stdio 函数测试串口 3.如果需要测试其他串口, 只 需 在 tester_serial_stdio 函 数 中 , 将 s5p4418_serial_write_string 和 serial_printf 的第一个传入参数改为想要测试的串口即可。 3.10.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,将开发板的串口 0 接到 PC 机的串口,在 PC 机上打开串口监测终端,如超级终端,SecureCRT 等,上电开机,默认情况下,串口会有如下 打印: 第 30 页 3.11 X4418 裸机实例 11-LCD 字符显示实验 3.11.1 源码 D:\workspace\x4418\x4418-framebuffer-font\source\main.c D:\workspace\x4418\x4418-framebuffer-font\source\tester-framebuffer-font.c 在主函数 main()中,do_system_initial 函数调用 s5p4418_fb_initial 函数初始化 LCD 相关寄存器,然后进入 LCD 测试函数 tester_framebuffer_font,源码如下: int tester_framebuffer_font(int argc, char * argv[]) { u32_t x, y; u32_t fc, bc; u32_t count = 0; while(1) { s5p4418_screen_swap(); surface_fill(s5p4418_screen_surface(), 0, 0, BLEND_MODE_REPLACE); x = randomInt(0, 1024 - 16); y = randomInt(0, 600 - 8); fc = randomInt(0, 0x00ffffff); bc = (~fc) & 0x00ffffff; lcd_print(x, y, fc, bc, "LCD Print [count = %d]", count++); 第 31 页 s5p4418_screen_flush(); mdelay(2000); } return 0; } surface_fill 函数将整屏黑屏,x,y,fc 三个变量通过调用 randomInt 函数获取三个 随机值,分别用于 LCD 上显示横坐标,纵坐标,字符颜色以及字符背景颜色。在整个 while(1) 死循环中,每隔 1 秒刷新一次,即字符颜色位置等都会更新一次。 3.11.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,LCD 上每隔 1 秒会刷新一次,字 符颜色,背景颜色以及显示坐标都会相应随机改变。 3.12 X4418 裸机实例 12-GUI 显示实验 3.12.1 源码 D:\workspace\x4418\x4418-framebuffer-gui\source\main.c D:\workspace\x4418\x4418-framebuffer-gui\source\tester-framebuffer-gui.c 在主函数 main()中,do_system_initial 调用 s5p4418_fb_initial 函数初始化 LCD 相关寄存器,然后进入 GUI 测试函数 tester_framebuffer_gui。测试函数同样用到了随机 数生成函数 randomInt,不断的在 LCD 上画随机圆,椭圆,矩形,线等。 3.12.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,LCD 上每隔 1.2 秒会刷新一次, LCD 上会随机绘制圆,椭圆,矩形边框等等。 3.13 X4418 裸机实例 13-miniGAME 实验 3.13.1 源码 D:\workspace\x4418\x4418-framebuffer-minigame\source\main.c D:\workspace\x4418\x4418-framebuffer-minigame\source\tester-framebuffer-minigame.c 在主函数 main()中,do_system_initial 调用 s5p4418_fb_initial 函数初始化 LCD 相关寄存器,然后进入迷你游戏测试函数 tester_framebuffer_minigame,该函数再次调 用 minigame 函 数 , 这 里 才 是 程 序 的 关 键 所 在 。 同 样 , 程 序 中 调 用 了 随 机 数 生 成 函 数 randomFloat,faces[i].x,faces[i].y,faces[i].xvel 以及 faces[i].yvel 分别 对应第 i 个小球的 x 坐标,y 坐标,x 轴移动速度和 y 轴移动速度。surface_map_color 函 数用于设置背景颜色,被赋值到变量 c 中,在 while(1)死循环中,首先通过 surface_fill 函数将整屏全部刷成咖啡色,然后通过 surface_blit 函数绘制 NUM_HAPPY_FACES 个小球, 同 时 NUM_HAPPY_FACES 个 小 球 会 不 断 移 动 , 移 动 的 速 度 由 前 面 产 生 的 随 机 数 faces[i].xvel,faces[i].yvel 以及变量 MILLESECONDS_PER_FRAME 决定。这样,整 个 LCD 上的图像,就会显示出多个小球不断的来回碰撞的界面出来。这里只是 android,ios 上很多游戏中最简单的一个动作,读者可以自己发掘更多更复杂的动作效果。 3.13.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,LCD 上会有 10 个九鼎创展的 LOGO 第 32 页 图片来回随机的滚动。实验效果如下: 3.14 X4418 裸机实例 14-随机矩形框显示实验 3.14.1 源码 D:\workspace\x4418\x4418-framebuffer-random-rect\source\main.c D:\workspace\x4418\x4418-framebuffer-random-rect\source\tester-framebuffer-random-rect.c 在主函数 main()中,do_system_initial 函数调用 s5p4418_fb_initial 函数初始化 LCD 相关寄存器,然后进入测试函数 tester_framebuffer_random_rect 随机显示矩形框。 在该函数中有五个变量调用了随机数生成函数 randomInt,分别对应矩形的坐标,宽高和填充 的颜色。然后调用 surface_fill 函数绘制矩形框。 3.14.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,LCD 上会有无数个背景颜色随机, 大小也随机的矩形框不停刷新显示。整体一看显得非常凌乱无章,真正达到了随机的效果。 第 33 页 3.15 X4418 裸机实例 15-长方体旋转实验 3.15.1 源码 D:\workspace\x4418\x4418-framebuffer-tinygl-cube\source\source\main.c D:\workspace\x4418\x4418-framebuffer-tinygl-cube\source\tester-framebuffer-tingl-cube.c 本实验不再像上次的实验那样,显得杂乱无章,这里显示的是一个长方体,不乱的延 X 轴, Y 轴,Z 轴旋转。关键函数在 idle 中,读者可以自行分析。 3.15.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,长按 POWER 键开机,LCD 上会有一个长方体 不断的延 X 轴,Y 轴,Z 轴旋转。效果如下: 3.16 X4418 裸机实例 16-轴承旋转实验 3.16.1 源码 D:\workspace\x4418\x4418-framebuffer-tinygl-gear\source\main.c D:\workspace\x4418\x4418-framebuffer-tinygl-gear\source\tester-framebuffer-tingl-gear.c 本实验显示旋转的轴承,不断旋转的同时,界面也会不断旋转,非常有立体感。这里不讲 述源码实现过程,读者可以自行分析。 3.16.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,LCD 上会有三个立体的轴承不断 旋转,界面也会不断变化。效果如下: 第 34 页 3.17 X4418 裸机实例 17-动态字符显示实验 3.17.1 源码 D:\workspace\x4418\x4418-framebuffer-tinygl-texobj\source\main.c D:\workspace\x4418\x4418-framebuffer-tinygl-texobj\source\ tester-framebuffer-tingl-texobj.c 本实验动态显示两幅字符,而且字符会不断变化。这里不讲述源码实现过程,读者可以自 行分析。 3.17.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,LCD 上会有两幅动态的图片,界 面也会不断变化。 3.18 X4418 裸机实例 18-二维码扫描实验 3.18.1 源码 D:\workspace\x4418\x4418-framebuffer-qrencode\source\main.c D:\workspace\x4418\x4418-framebuffer-qrencode\source\tester-framebuffer-qrencode.c 第 35 页 本 实 验 需 要 借 助 于 能 够 识 别 二 维 码 的 手 机 。 在 主 函 数 main 中 调 用 tester_framebuffer_qrencode 函数,在 LCD 上绘制出一个二维码,每隔 5 秒更新一次。 当我们使用手机扫描该二维码时,可以获取二维码的信息,即 while(1)死循环中通过 sprintf 语句输出的一长串字符串。 3.18.2 实验现象 将 TF 卡插到 x4418 开发板的右侧 TF 卡槽,上电开机,LCD 的左上脚会显示一幅二维码 图像。找到一个支持二维码识别的手机,安装微信,进入扫一扫功能,对着开发板上的二维码扫 描,扫描完毕后,手机会从该二维码读取相应的信息,并显示在手机上。效果如下: 第 36 页 4.1 核心板系列 X6410CV10 X210CV3 G210CV10 I210CV20 X4412CV2 X4418CV2 4.2 开发板系列 x6410 开发板 x210 开发板 g210 开发板 i210 开发板 x4412 开发板 ibox(4412 一体板) x4418 开发板 ibox(4418 一体板) 第4章 其他产品介绍 说明:产品详细规格,以及更多其他产品请关注九鼎创展官方网站和论坛。 第 37 页

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。