发表于: 2016-9-26 21:43:05 | 显示全部楼层

一、  下载LPC二进制文件和.deb软件包

文件链接地址spi_game.elf.bin       openrex_spi_canvas.deb

如果只是想体验下演示程序,可以不进行第二步和第三步。


二、  如何在PC编译“openrex_spi_canvas”

请在linux镜像中添加“openrex_spi_canvas”到local.conf文件,这样就可以包含相关的例程。

  1. IMAGE_INSTALL_append += "openrex-spi-canvas"
复制代码

该方法位于“sources/meta-openrex/recipes-examples/openrex-spi-canvas/openrex-spi-canvas.bb”,所有的源文件都位于“files”子目录中。

如果不想重新编译整个镜像文件,只编译该例程,你可以运行以下命令:

  1. bitbake openrex-spi-canvas
复制代码

并且将输出的二进制文件从“<build>/tmp/work/cortexa9hf-vfp-neon-poky-linux-gnueabi/openrex-spi-canvas/1.0-r0/build/”复制到sd卡中。


三、  如何在PC编译LPC spi_game应用程序

1. 下载交叉编译过的GCC文件,下载地址:

  1. https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q2-update/+download/gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2
复制代码

并将该压缩包解压。如果你不介意使用“~/.bin”目录,请根据以下指令进行操作:

  1. mkdir -p ~/.bin
  2. tar -xf gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2 -C ~/.bin
  3. export CROSS_COMPILE="${HOME}/.bin/gcc-arm-none-eabi-5_4-2016q2/bin/arm-none-eabi-"
复制代码

最后一行是必不可少的。该CROSS_COMPILE是用于构建系统来定位你的工具链。

2. 按照GIT和CMAKE

如果您正在使用Ubuntu,你可以用下面的命令:

  1. sudo apt-get install cmake git make
复制代码

3. 克隆相关组件

  1. git clone https://github.com/FEDEVEL/openrex-lpc.git
复制代码

当完成后,跳转到“openrex-lpc/examples/spi_game”并运行“source build.sh”,

系统显示构建过程的进度,当它成功完成后,你应该会在最后几行中看到“[100%] Generating spi_game.elf.bin”。

4.  应用程序位于“build”子目录,并且有两种形式。

“spi_game.elf” - 该文件是一个容器,保存分割成段的二进制文件。要想将该二进制文件放到LPC的地址空间中,你必须要使用GDB(带JTAG/SWD仿真器)或者引导程序。

“spi_game.elf.bin” - 该文件保存着原始的二进制文件。你可以将其看成是一些地址空间范围的快照。我们将要使用的是这种二进制文件形式。

5.  上传“spi_game.elf.bin”文件到OpenRex Linux。安全复制的命令可能会很有用。

  1. scp spi_game.elf.bin root@xxx.xxx.xxx.xxx:/home/root/
复制代码

使用时将xxx.xxx.xxx.xxx替换为你的OpenRex IP地址。


四、 组装按钮

该演示程序需要使用外部的按钮连接到接口J1,位置11(player1)、位置12(player2)、位置13(开始/停止按钮)。这三个按钮全部是高电平有效,所以按钮的一个引脚需要链接到GPIO信号,另一个引脚连接到VCC(J1的7脚)。根据连接方式、条件和使用按钮的类型,你可以考虑使用外部的下拉电阻。

buttons.jpg


五、 在iMX上运行演示程序

1.  将二进制文件烧写到LPC

  1. openrex-isp-handler.sh spi_game.elf.bin
复制代码

2. 带参数运行"openrex_spi_canvas"

  1. openrex_spi_canvas -s /dev/spidev2.0 -t /dev/tty1 -f /dev/fb0 -b 400000
复制代码

3.  现在如果你按下“启动/停止按钮”,就可以看到小球移动到显示器的右侧。按下player2按钮,向下移动“挡板”来弹击小球。

注意:所有的LPC示例程序使用LED24(紧挨电源接口)作为故障指示。如果该指示灯闪烁,表示出现严重的错误,并且应用程序被迫运行在无线循环中。


六、它在Linux是如何工作的?

Linux作为SPI主机从SPI总线上读取数据。大多数的设备被设计成一次传输由一次同时的读取和写入组成。换句话说,如果你想要读取一个字节,你需要同时发送一个字节,所以,读取时也就意味着,我们需要发送和返回等量的“假”数据。然后假数据就会在从机上丢弃。我们使用的是8位传输机制,因此假数据类型设置为0xFF。当主机进行发送时,SPI传输开始(产生时钟信号)。

有些接收的数据会被是被为带序列化对象的命令。该命令表示对象的类型,并且执行相应的操作。例如,如果SPI主机接收到0x4(CANVAS_CMD_CIRCLE),那么它就会将接收的数据认作是circle对象(cmd_circle结构体),然后提取到帧缓冲区。


七、 它在PC是如何工作的

不过你想的是,应用程序是创意的结果。从SPI的角度来看,LPC作为SPI从机,也就是说LPC需要一直想Linux提供数据。当应用程序没有任何的命令需要发送,那么中断处理程序就会准备假的数据,然后在Linux端被丢弃。


八、  改进

1、 更改SPI角色。LPC应该是SPI主机,Linux是从机。理由是:LPC可以制定所有独立的决策。然后Linux就不必总是轮训总线。但是将Linux表现为SPI从机,并在用户层提供相应的API,并不是一件简单的事情。

2.  使用两个帧缓冲区来消除闪烁的问题。数据将会尽到非活动帧缓冲区,并且当完成后,仅需要交换缓冲区。需要深入研究IPU文档。

请不要将该应用程序看成是一个真正的解决方案。他们仅仅是一个证明OpenRex能力的演示。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 16 | 回复: 24



手机版|

GMT+8, 2024-3-19 13:37 , Processed in 0.092422 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表