第一篇我们已经见识了 TL6748的硬实力,说到硬实力还应值得细细推敲,包括DSP、DDR2、FLASH等芯片的主要功能参数都没有细述,之所以没有详述是因为创龙开发板附带的光盘资料中有专门的文档细述(详见光盘目录“TL6748-EVM-data 规格书TL138_1808_6748-EasyEVM 开发板”下的TL6748-EasyEVM 开发板规格书.pdf)这些简单的参数描述经过文档分类组织起来便不简单了,为用户选型带来极大的方便。 不扯远了,言归正传,从本篇开始我们来见识一下TL6748的软实力(如今硬件破解已经不在话下,软件才是核心竞争力呀)。话说学编程的时候都会从第一个“Hello World!”开始,与硬件打交道的编程也不例外,不过我们都习惯以流水灯起步,O(∩_∩)O~! 本文开始将进入编程世界,所以要记一些与集成开发环境(CCS5.5为例)相关的操作。 本文会涉及如下内容: 1.CCS5.5工程的导入操作。 3.DSP外设GPIO的认识与操作。 4.TL6748调试的基本步骤。
(一)CCS5.5工程的导入操作首先需要双击CCS5.5的快捷方式打开主界面,根据各人的不同习惯界面设置可能会不太一致。 接下来我们即将导入创龙TL6748光盘中附带的例程。在此之前顺便说一下TL6748例程的归档。例程路径位于光盘中“TL6748-EVM-datademo”目录下。该目录下又有四个子目录: Algorithm:TL6748提供的验证算法的例程。 HostApp:这个目录下的工具是在PC端使用,包括烧写用的工具、格式转换工具、内存卡管理工具等等...... StarterWare:这个目录下是创龙提供的DSP 裸机例程,StarterWare是 ti为TMS320C6748提供的裸机驱动源码。SYSBIOS:这个目录下是TL提供的使用了SYSBIOS的例程,SYSBIOS应该是TI的操作系统吧,提供了比较完整齐全的驱动和API。 个人觉得应该从StarterWare例程来了解DSP比较合适,所以就主观地从StarterWare例程开始TL6748的学习之旅....... 首先我已经将光盘的“TL6748-EVM-datademo”目录拷贝至我的CCS5.5工作文件夹“”下: 在CCS5.5的工程管理区中点击鼠标右键并单击选择“Import”操作: 在弹出的导入对话框中展开“Code Composer Studio”选项卡,单击选择“Existing CCS Eclipse Projects”后并单击右下角的“Next”按钮。
弹出的CCS Eclipse工程导入对话框如下图所示:
在选择搜索路径“Select search-directory”选项中单击“Browser”来选择搜索路径。 这里我们定位至例程所在的文件夹,并单击选中“GPIO_LED”这个例程后单击右下角的“确定”按钮,弹出导入设置页面。 这里需要注意上图中红色椭圆框选的部位,这个地方不能勾选。因为TL6748的例程中引用的库以及源文件都是相对路径,如果将工程拷贝至工作区的根目录下会导致相对路径发生变化,编译时提示找不到相关函数或者文件。单击右下角“Finish”按钮完成工程导入。 导入后的工程在工程管理界面“Projects Explorer”中展开后如图所示: 通过双击工程管理界面中的各个文件可以在右边的编辑界面显示。以main.c为例,双击后如图所示: (二)仿真器的配置及GEL文件的自动加载TL6748提供的例程中默认使用的仿真器配置文件是基于XDS100V2的配置,而此次活动获得的仿真器是XDS100V3版本的,所以在开始连接板子之前需要对仿真器配置文件作出一些更改来适应这个版本的仿真器。另外,有网友问XDS100的仿真器驱动文件需不需要单独安装或者驱动文件在哪里?在此顺便说明一下,TI的CCS从CCS4开始就是基于Eclipse的架构,TI原厂的仿真器驱动文件在安装CCS集成开发环境的时候可以选择安装,只要是在安装CCS的时候选择了仿真器驱动安装后使用过程就不需要再进行安装驱动文件。TL-XDS100V3是使用的TI提供的方案,所以驱动文件与TI原厂的是一致的,因此就不需要再单独安装驱动文件。根据安装时的选择驱动文件种类略有差别,CCS安装路径下的仿真器驱动文件位于“C:ticcsv5ccs_baseemulationwindows”目录下。如果仿真器驱动自动安装失败,可以根据上述目录进行手动安装。正确安装后在电脑的设备管理器中可以查看仿真器,有红色椭圆框中的两个选项说明驱动安装无误。
接下来手动更改配置文件,在工程管理界面中右键单击已经存在的仿真器配置文件并选择打开方式为“Target Configurations Editor”
打开配置文件编辑界面:
在“General Setup”选项卡中找到“Connection”项,并在其后的下拉列表中选择“Texas Instruments XDS100v3 USB Emulator”: “Board or Device”保持默认的“TMS320C6748”不变。然后准备配置GEL文件。GEL文件的作用是配置DSP的时钟等资源供在线调试使用,GEL文件的编写暂不做解释。之所以在这里配置GEL文件是为了后边调试方便。这里将GEL文件配置为连接设备时自动加载运行,就不需要每次连接设备后再进行一系列操作来加载运行GEL文件,节省调试时间。如果不加载运行GEL文件并且程序中又没有对DSP初始化的操作,在Load程序后会出现DSP会自动运行或者程序跑飞等现象。在上图的左下角单击选择“Advanced”选项卡出现高级配置界面: 展开仿真器下的DSP核心并单击选中“C674X_0”在右边的“initialization script”选项中点击“Browse”按钮选择GEL文件的路径。TL6748的GEL文件位于光盘的“TL6748-EVM-dataimages”目录下。
点击上图中部区域的“Save”按钮保存高级设置,并单击左下角的“Basic”按钮切换至Basic设置页面同样点击“Save”保存基本设置。 在工程管理界面中对刚才更改的仿真器配置文件进行重命名,右键单击“XDS100v2.ccxml”并选择“Rename”
在弹出的重命名对话框中更改配置文件名字为“XDS100v3.ccxml” 至此,完成了仿真器配置文件更改及GEL文件的自动加载运行设置。
(三)DSP外设GPIO的认识与操作
这里谈DSP的GPIO,略过了以下内容:1.DSP时钟、DDR2等的初始化配置。2.CMD文件的作用及编写。以例程中的步骤来说明GPIO的操作。
1) 外设使能配置外设配置使能函数为 PSCInit();【按住键盘的“Ctrl”键并单击该函数可定位至函数的定义处】。PSC是DSP的电源管理部分,通过设置对应模块的使能与否可以管理DSP的功耗。这个函数主要操作是使能GPIO模块。PSCModuleControl( SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); 这个函数有4个参数:SOC_PSC_1_REGS是因为GPIO属于PSC1,所以该参数定位GPIO所在的域。HW_PSC_GPIO是定位PSC1中GPIO寄存器的编号。文档SPRUH79A第8章表8-2中描述如下:
PSC_POWERDOMAIN_ALWAYS_ON和PSC_MDCTL_NEXT_ENABLE是设定GPIO状态的参数,具体的设定方法见SPRUH79A的8.3小节。
2) GPIO管脚复用配置
DSP的GPIO提供了多种功能复用,所以使用前需要确定需要设定的功能,本例程中设定GPIO为普通的I/O口。通过定位GPIO管脚复用的函数发现该函数定义是在外部定义的: extern void GPIOBank0Pin0PinMuxSetup(void); 好多网友可能比较迷茫,不知道该函数的原型。其实TL6748的源码中已经提供了该函数的原型,这里之所以这样使用是因为例程中使用的通用函数已经编译成了库文件的形式(.lib文件),这样会大大节省编译的时间提高效率。想探究源码的童鞋可以移步“demoStarterWareApplicationPlatform”目录下“Platform”这个工程来查看真相,真实的裸机程序呀,没有任何遮掩。 这个函数实现的功能就是向对应的GPIO_PINMUX寄存器写入值来定义该GPIO的功能。以GP0[0]为例,该脚可以复用为以下功能:PRU0_R31[8]/AXR8/CLKS1/ECAP1_APWM1/GP0[0]这些复用功能是通过寄存器PINMUX1的31-28位进行选择的。 对这4位写入8h即可设置为通用GPIO功能。其他管脚也是这个道理,只不过寄存器地址不同。
3) GPIO管脚初始化步骤2已经确定了GPIO管脚的功能,我们设置了通用的GPIO功能,既然是GPIO则可以是输入亦可能是输出,DSP对GPIO的输入输出配置也是通过寄存器实现的。以GP0[0]配置为例,由于控制的是LED,因此需要设置为输出模式。 GPIODirModeSet(SOC_GPIO_0_REGS, 1, GPIO_DIR_OUTPUT);
GP0[0]对应的方向设置寄存器为DIR01的第0位。该位置1代表输入,清零代表输出。至此完成了DSP的GPIO的初始化操作,接下来便可控制LED的亮灭了。
4) GPIO管脚操作作为通用的GPIO既可以输出高电平也可以输出低电平。由TL6748底板的原理图可知若想点亮LED需要将控制引脚置高,熄灭LED需要将控制引脚置低。DSP的GPIO输出的高低电平可以由不同的寄存器控制,也可以使用同一个寄存器来实现。例程中使用了同一个寄存器来控制GPIO输出的状态即:OUT_DATAn寄存器。GP0[0]的输出状态对应OUT_DATA01寄存器的第0位,对该位置1则可以在该管脚上输出高电平,反之清零该位即可在该脚上输出低电平。 以上便是GPIO的原理及操作方法。
(四)TL6748调试的基本步骤调试是任何一款芯片使用的必经步骤,接下来我们就来体验一下TL6748的调试。在工程管理区域中右键单击“XDS100v3.ccxml”并选择“Set as Active Target Configuration”将该工程中的仿真器配置文件激活。 点击CCS集成开发环境工具栏的锤子图标重新编译工程。
连接仿真器和TL6748开发板并上电。点击工具栏中的“虫子”图标。
CCS会自动连接TL6748并加载运行GEL文件完成初始化。
可以看出一个蓝色的小箭头已经指向main函数的开始位置,接下来可以通过调试工具栏进行调试操作。
上述工具提供了单步执行、全速运行、暂停、退出调试状态等功能。全速运行可以看到底板LED开始轮流点亮熄灭形成“流水”状态,这就是传说中的“流水灯”!
小结
话说流水灯谁不会啊,这能体现出TL的软实力?可笑不!!!??? 流水灯虽然简单,但这个简单的功能TL给我们展现的是不一样的内容,规范的编程习惯!简单又不简单了!
【本文完,后文再续调试过程中的寄存器操作等功能......】 附个视频:
--------------------华---丽---的---分---割---线--------------------
声明:本文内容及观点为楼主主观意识的产物,褒贬纯属个人意见,不存在黑谁捧谁,严格遵循试用规则。如有冒犯多多包涵,实在看不下去可以私信沟通,不要让法院给俺寄传票!^_^
|