DM3730双核开发
前言
DM3730是由德州仪器(TI)推出的双核处理器,处理器集成了高达1GHz的ARM Cortex-A8内核及高达800MHz的具有高级数字信号处理的DSP(TMS320C64x+),并提供了丰富的外设接口(更详细的配置说明请点击DM3730用户手册下载).
ARM端主要跑Linux操作系统,DSP主要进行数字信号高速计算,ARM和DSP之间通过DVSDK进行通信.所以本教程主要分三部分:ARM端、DSP端和ARM与DSP的通信.
第一部分 ARM核
ARM端要进行的工作主要分为两部分:交叉编译和运行编译后的程序
1.1 交叉编译工具arm-none-linux-gnueabi-gcc的安装
1.1.1 安装Ubuntu
Linux有不同的distribution,Ubuntu是其中一个比较优秀的distribution,我在Ubuntu10.04和Ubuntu12.04都成功安装了交叉编译工具,所以建议大家安装这两个版本之一.Ubuntu的安装有多种方式,其中比较常见的有wubi安装,硬盘安装,光盘安装及虚拟机安装等.本文给出Ubuntu官方网站,可以从官网上下载不同版本的Ubuntu源文件,然后从网上找到安装Ubuntu的方式即可,此处不再赘述.
1.1.2 打开终端(Alt + Ctrl + t)
1.1.3 下载arm-none-linux-gnueabi-gcc安装包
1. 将下边命令复制到终端中:
wget http://www.codesourcery.com/sgpp/lite/arm/portal/package4571/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
(如下图所示)
2.按键盘Enter键即可开始下载arm-none-linux-gnueabi-gcc安装包(如下图所示)
3. 下载完成(如下图示)
1.1.4 拷贝到下载后的工具包到/usr/local目录下
将下边命令复制到终端中 sudo cp arm-2009q1-
203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
/usr
/local
(如下图示)
按下键盘上Enter键即可将arm-none-linux-gnueabi-gcc工具包拷贝到/usr/local目录下,这时就可以在/usr/local目录下出现一个以arm开头的压缩包(如下图示)
1.1.5 解压上图所示的文件
将下边命令复制到终端中 sudo tar -jxvf arm-2009q1-
203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 即可完成解压工作(如下图所示)
执行以上命令后,arm-none-linux-gnueabi-gcc安装包会被解压到当前目录下的一个arm-2009q1目录中。查看当前工作目录的方法是在终端中输入 pwd 然后按Enter键即可 用命令ls 可以看到当前工作目录下有arm-2009q1这个目录(如下图示)
1.1.6
添加交叉编译工具路径
关于增加PATH的知识这里不再赘述,有兴趣的同学可以看看Linux鸟哥私房菜(基础学习篇)上边有比较详细的介绍,这里只介绍傻瓜式的操作步骤(这一步很关键,一定要认真按照教程一步步的做)
1.打开/etc/bash.bashrc脚本
将下边命令复制到终端中:
gedit /etc
/bash.bashrc
然后出现下图所示结果
2.增加/usr/local/arm-2009q1/bin/目录到PATH变量中
在gedit打开的文件的最后一行输入下边这个命令:
export PATH=
$PATH:
/usr
/local
/arm-2009q1
/bin
/
(如下图示)
最后保存退出!
1.1.7 执行/etc/bash.bashrc脚本
将下边命令复制到终端中:
source /etc
/bash.bashrc
1.1.8 验证
在终端中先输入arm-,然后按键。如果能够自动补齐为arm-none-linux-gnueabi-,则说明安装成功.(如下图示)
注意:如果您的操作系统是64位的Ubuntu要输入下边命令来运行32操作系统上的交叉编译工具链(这一步我没有做,不保证成功)
sudo apt-get install ia32-libs
至此我们已经成功安装上了交叉编译环境,下边我们将介绍一下这个交叉编译环境的使用方法
1.2 交叉编译工具arm-none-linux-gnueabi-gcc的使用
所谓交叉编译就是在Linux的 arm-none-linux-gnueabi-gcc编译器下编译程序,在ARM端运行编译后的可执行程序.故接下来将分别讨论在Linux和ARM上的操作方法.
1.2.1 Linux上的操作
1.首先要在当前工作目录下编写纯C程序(Hello World.c),这里就以经典的hello world为例介绍Linux端的操作
#include
int main (void)
{
printf("Hello World!
");
return 0;
}
2. 编译Hello World.c
在终端中输入 arm-none-linux-gnueabi-gcc -o Hello HelloWorld.c (如下图所示)
其中arm-none-linux-gnueabi-gcc为编译器的名字, Hello为编译后可执行程序的名字, HelloWorld.c 为源程序.
然后得到可执行程序:Hello (如下图所示)
1.2.2 在DM3730ARM 核上的开发
1.开发环境的快速搭建:主要分为硬件的搭建和软件环境的搭建,这部分要在XP环境下进行.具体的搭建过程请看我上传的DM3730快速入门 ,里边有详细的介绍.
2.按照上边的文档搭建过开发环境后,切换到root用户,然后转到可执行程序所在的目录,在命令行中直接输入可执行程序的名字,程序就会自动执行.
至此DM3730在ARM端的开发已经完成.
第二部分 DSP核
2.1 CCS安装概述
本项目用的是CCS4.1.2编译器以及XDS100V2仿真器,安装CCS4.1.2的过程可以去网上下载,然后一步步的安装,需要说明的是初学者最好按照安装程序默认设置去安装,路径中不能有中文,CCS4以上的版本自带的有XDS100V2的驱动,而CCS3需要安装驱动.
2.2 CCS4.1.2 环境下建工程请参考CCS4.1.2建工程
CCS4相对于CCS3及以前的版本有很大的不同,CCS4以前的版本需要自己写cmd和GEL文件然而CCS4以上的版本不需要自己写cmd文件,一般都是编译器自动帮你配好的,这个可以说是一大进步,但是编译器的这种进步也可能会带来莫名其妙的错误.例如CCS4默认的stack和heap的大小都是1k(0x400),但是对于需要内存比较大的项目来说在编译阶段会报类似下图所示的错误:
对于一般的warning我们可以置之不理,但是 如果是跟内存有关的warning我们一定要重视,如果编译阶段出现这个warning的话在程序运行阶段一般会 出现诸如TMS320C64+: Error: Illegal opcode (0002f960) at pc = 0x0002e3a4 Illegal opcode at pc = 0x0002e3a4 这样的错误.究其原因就是因为编译器默认的stack和heap的大小都是1K,所以我们需要修改stack和heap的大小.方法是在C/C++project模式下右击下边的第一项然后选择Build
properties... (如下图所示)
然后弹出一个对话框,选择Tool Settings(如下图所示)
点击C6000 Linker下的Basic Option,出现下图所示的内容:
上图所示空白处分别为stack和heap的大小,编译器默认是1K(0x400).你可以根据自己项目的需要自己设置大小,直到编译时不会出现类似上边的warnings.例如我的需要把stack和heap设为16M(0x1000000)才可以编译通过.(如下图所示)
最后点击OK即可.
第三部分 ARM核与DSP核通信 (未完待续...)