wkhn
认证:优质创作者
作者动态
STM32G4系列MCU——数字电源入门(4)
2023-03-14 10:46
STM32G4系列MCU——数字电源入门(3)
2023-03-13 20:05
STM32G4系列MCU——数字电源入门(2)
2023-03-13 19:51
STM32G4系列MCU——数字电源入门(1)
2023-03-13 14:24
2KW交错并联+同步整流BUCK电路的数字DC-DC电源实践
2023-01-31 20:45

#改变世界#TMS320F280X系列DSP开发——入门

       对于TI的C2000系列dsp的新手来说,如何让开发板的LED点亮,是有一定的困难的。笔者就从一个初学者的角度,通过一步一步的具体操作,来让开发板的led闪烁。程序代码在附件中提供。

开发板:笔者随便找了一个TMS320F2806的电路板,带有3个led灯。其中2个通过dsp的引脚控制,另外一个是3.3V电压指示。

仿真器:XDS100V3

集成开发环境:ccs11。

编译器版本:v21.6.0.LTS

1)打开CCS11。新建一个CCS工程

2)配置工程文件,工程名自己取。

按照上面的方法进行配置。在第5步时,要选择不带main.c的空工程,单击Finish。会出现如下图的工程目录结构:

3)继续配置工程属性:

在(1)处,单击右键,出现弹出菜单,单击(2)处。

在Products选项卡中,添加仿真器型号。

单击OK,将仿真器添加到工程文件中。

4)在工程目录中新建两个文件夹:include和source。

接着,要拷入一些头文件和例程源代码到这两个文件夹中。这些.h和.c文件从何处来?可以去Ti的官网搜索相关的器件示例。在这里笔者用的是F2806芯片,可以查到一个sprc191.zip的安装包。可以在本文附件中下载或去该链接下载https://www.ti.com.cn/tool/cn/SPRC191。解压后点击安装,

然后进入安装目录,如下图:

所有本文需要的文件都来源自上面的DSP280x_common和DSP280x_headers这两个文件夹。

首先将两文件夹中的include文件夹中所有.h文件拷到工程文件的include文件夹中。

再将DSP280x_common和DSP280x_headers两文件夹source文件夹下的所有.c文件拷到工程文件中的source文件夹中。最终形成的目录结构为:

此外,还缺少一个main主函数。main函数可以自己写,也可以拷一个例程修改。这里,我们拷一个例程过来。例程从哪里找?在刚才sprc191.zip的安装目录中找:

因为用的是CCS11,所以选文件夹中xxx_ccsv4版本的程序,ccsv4表示该程序适用于CCS4以上版本的编译器。将(2)处的.c文件拷到工程文件的source文件夹中。工程中include和source下的文件如下:

5)再次设置工程文件属性:

将include文件夹的路径添加到搜索路径中:

然后再将source文件夹也添加到搜索路径中,如下图:

开始修改main主函数的代码,先将原有的代码注释掉,替换成下面的代码。

因为电路板上的两个led分别是用gpio11和gpio19控制的,并且用DELAY_US宏语句延时0.5秒。写完代码后,开始编译,按那个锤子。

会出现70多个错误,

经过分析错误信息,可知是与软件中断优先级的缺省设置冲突有关。需要删掉相关的.h和.c文件。

再编译,错误消失了,但是还有48个告警,如果不处理,程序也不会正常执行。

从编译器给出的告警信息来看,是和外设的寄存器在RAM中无法找到相应的段定义有关,特别是红框所示的地方,是说gpio的控制寄存器无法找到RAM中的段定义。我们需要操作gpio这个寄存器,出现这个告警,gpio将无法正确输出。出现这种情况说明还缺少一个链接命令文件(.cmd)。从哪找??回到sprc191.zip的安装目录,在下图中的路径里找到个.cmd文件(红框的位置)。

将其拷到工程文件夹的目录下,也可以在工程目录下新建一个cmd文件夹,将其拷到这里。笔者是用的后一种方法。

然后再编译一遍,如下图:

告警还有三个,但都不是和gpio有关的了,其中前两个是和flash代码加密相关的段,最后一个是程序烧录到flash里运行时相关的段。因为本程序都是直接在ram中运行,所以这三个告警都不会影响现在的这个工程,可以先不用管。按下Debug,将编译后的代码下载到dsp内部的ram中,将仿真器一端与电路板相连,另一端用usb口与电脑相连,按那个虫子开始将程序下载到dsp的ram中。

将程序载入到RAM后,按红圈的按钮开始运行。

点击运行。就可以看到led闪亮。

如果让闪的速度有所变化,可以修改DELAY_US(500000)中的值,这个宏定义表示延时n微秒。

因为程序是在RAM中运行的,掉电后,重新上电,RAM内容清空,程序就不会再次执行了。如果要想保存在flash中,就需要用不同的cmd链接命令文件了。

6)下面来说说如何将程序烧录到flash中运行

如果要将程序从烧录到flash,然后从flash引导运行需要在刚才程序的基础上做如下的调整:

一、更换cmd链接命令文件:

将该路径下的F2806.cmd文件复制到工程路径下的cmd文件夹中,然后将原工程中的2806_RAM_lnk.cmd删除,也可以去除编译。

通过(1)和(2)两步操作,在工程编译时就不再编译2806_RAM_lnk.cmd这个文件。在(3)处可以看到F2806.cmd已经被包括到工程中了。

二、需要在main主函数所在.c文件中声明3个外部变量

三、在main主函数中添加代码

黄色标记的两行就是要添加的代码。

四、编译通过

这回连告警信息也没有了。

五、按debug,写入到flash,会出现下面的画面

重要提示:千万不要在写入flash的过程中断电,否则可能导致flash密钥区写入错误数据,锁死芯片,无法解锁使芯片报废!!!

当需要重新从ram引导时,只需要下面两句注释掉,并把cmd文件换回即可。

总结:

      TI的C2000级别的dsp与microchip的dspic33系列dsp有很大的区别,单从程序启动的加载方式看就有非常多的不同之处。TI的芯片更复杂,引导方式也非常多,而microchip的芯片引导就相对简单多了,即使不是对dspic33的存储结构非常了解,也能很快的运行一个应用程序。但是TI的dsp内部可以运行RTOS(实时操作系统),对复杂的中断情况的调度处理更得心应手,而这是microchip所不具备的。

      TI的引导方式更像是PC的引导,首先芯片上电后通过厂家固化的ROM(PC的BOIS或UEFI)可以选择用户程序的载入方式,然后可以直接从ram运行程序或从flash运行(ram类似PC的内存,flash更像PC的硬盘系统分区),还可以通过各种通讯方式引导系统(串口,SPI,CAN,IIC等方式)。这对于新手来说并不友好,而且需要不同的cmd文件,更会使初学者陷入迷茫之中,稍有不慎就可能无法正确运行程序。而microchip有图形化的代码生成器,大大降低了初学者的学习门槛,是其优点之一。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
本篇所含全部资料,点击此处留下邮箱我会发给你
资料明细:sprc191.zip,led_test.rar
觉得内容不错的朋友,别忘了一键三连哦!
赞 7
收藏 7
关注 438
成为作者 赚取收益
全部留言
0/200
  • dy-GqUNdifb 2星期前
    老师,能不能发我一下资料,谢谢! 41****@****.com
    回复 1条回复
  • songxium 01-26 14:09
    老师,能不能发我一下资料,谢谢! so****@****.com
    回复 1条回复
  • dy-BDrhUBtY 2023-12-04 13:27
    老师,能不能发我一下资料,谢谢! 24****@****.com
    回复 1条回复
  • dy-BDrhUBtY 2023-12-04 13:27
    老师,能不能发我一下资料,谢谢! 24****@****.com
    回复 1条回复
  • anono 2023-09-11 14:25
    老师,能不能发我一下资料,谢谢! 10****@****.com
    回复 1条回复
  • shanzhihun 2023-05-31 16:51
    老师,能不能发我一下资料,谢谢! 33****@****.com
    回复 1条回复
  • yeatech 2023-05-06 23:14
    老师,能不能发我一下资料,谢谢! cd****@****.com
    回复 1条回复
  • zhongxulang 2023-03-28 10:48
    老师,能不能发我一下资料,谢谢! 35****@****.com
    回复 1条回复
  • sdll825 2023-03-16 10:31
    老师,能不能发我一下资料,谢谢! sd****@****.com
    回复 1条回复
  • yangwenlong 2023-02-28 22:18
    老师,能不能发我一下资料,谢谢! ya****@****.com
    回复 1条回复
  • 贪玩不回家 2023-02-15 13:25
    老师,能不能发我一下资料,谢谢! 15****@****.com
    回复 1条回复
  • 熊紅 2022-11-27 11:27
    老师,能不能发我一下资料,谢谢! m1****@****.com
    回复 1条回复
  • hack100000 2022-09-14 14:30
    老师,能不能发我一下资料,谢谢! lo****@****.com
    回复 1条回复
  • dy-beFnMfgk 2022-09-14 12:01
    老师,能不能发我一下资料,谢谢! 15****@****.com
    回复 1条回复
  • sgaqll1688 2022-07-23 10:57
    老师,能不能发我一下资料,谢谢! 24****@****.com
    回复 1条回复
  • funny_2017 2022-07-15 14:04
    老师,能不能发我一下资料,谢谢! 71****@****.com
    回复 1条回复
  • DylanY 2022-05-19 22:47
    很有用,十分感谢——初学者
    回复
  • dy-YrCj7tAJ 2022-03-23 12:45
    老师,能不能发我一下资料,谢谢! 15****@****.com
    回复 1条回复
  • 2022-02-12 10:58
    老师,能不能发我一下资料,谢谢! 52****@****.com
    回复 1条回复
  • 2022-02-12 10:58
    老师,能不能发我一下资料,谢谢! 52****@****.com
    回复 1条回复