完全可移植c2000控制器工程模板创建

news2024/12/25 9:26:15

完全可移植c2000控制器工程模板创建

  • 前言
  • 步骤
    • 创建工程
    • 库函数支撑文件拷贝
    • 寄存器支撑文件拷贝
  • 参考博文及资料

前言

迄今为止只学过TI的两款c2000控制器TMS320F280049C和28335,并且所有代码编写都是通过写寄存器来实现的。相较于直接使用TI编写好的库函数,写寄存器的开发效率实在是太低了,而且还不方便检查。为此想重新学习一下c2000控制器的工程模板创建,在阅读其他作者的笔记后,归纳了一个简单的创建步骤,寄存器操作和库函数操作同时兼容

该教程以创建TMS320F280049C工程模板为例,其他类型的创建方式可以类似操作。

我使用的CCS是10.3.1版本,c2000ware是目前最新的版本C2000Ware_4_02_00_00。

这些在TI官网都能下载到,就不放链接了

步骤

创建工程

File -> New -> CCS Project
在这里插入图片描述
依次选择或填写你的芯片型号,仿真器型号,工程名以及输出文件格式output format。在output format有legacy coff和eabi elf之分。eabi elf是未来主流的格式,TI讲持续更新它并添加新的语言特性;而legacy coff不会有额外的更新,但不至于被取缔[1]。因此推荐大家还是选用eabi模式。

创建完工程以后,在工程下新建4个文件夹,分别命名cmd、inc、lib、src,分别用于存放cmd文件、头文件、库、源文件。
在这里插入图片描述
这时候可以在main.c函数编写以下测试代码。一步步感受工程完善。

#include "device.h"

void main(void)
{
    // Initialize device clock and peripherals
    Device_init();
    // Initialize GPIO and configure the GPIO pin as a push-pull output
    Device_initGPIO();
    // Initialize PIE and clear PIE registers. Disables CPU interrupts.
    Interrupt_initModule();
    // Initialize the PIE vector table with pointers to the shell Interrupt
    // Service Routines (ISR).
    Interrupt_initVectorTable();
    // Enable Global Interrupt (INTM) and realtime interrupt (DBGM)
    EINT;
    ERTM;
    
    // Loop Forever
    for (;;)
    {
    }
}

库函数支撑文件拷贝

将以下三个文件夹下的头文件全部复制到工程文件下下的inc文件夹内,并添加头文件路径。

  1. C2000Ware_< version>\driverlib\f28004x\driverlib
  2. C2000Ware_< version>\driverlib\f28004x\driverlib\inc
  3. C2000Ware_< version>\device_support\f28004x\common\include

${PROJECT_ROOT}/inc表示该工程文件夹下的inc文件夹,是一个相对路径。这也是为了工程的可移植。
在这里插入图片描述

  1. 将C2000Ware_< version>\device_support\f28004x\common\cmd\28004x_generic_ram_lnk.cmd文件复制到工程文件夹下的cmd文件夹去。
  2. 将C2000Ware_< version>\device_support\f28004x\common\source\device.c文件复制到工程文件夹下的src文件中去。
  3. 将C2000Ware_< version>\driverlib\f28004x\driverlib\ccs\Debug\driverlib_eabi.lib文件复制到工程文件夹下的lib文件中去。

至此,工程文件如下。由于inc文件夹下的头文件过多,这里就不展开了。
在这里插入图片描述

尝试第一次编译,编译通过。
在这里插入图片描述
截至到现在,工程仍然只适用于库函数编程

接下来继续添加寄存器编程的相关文件,以兼容两种编程方式。

寄存器支撑文件拷贝

  1. 将C2000Ware_< version>\device_support\f28004x\headers\include下的所有文件拷贝到工程文件下的inc文件中去。
  2. 将C2000Ware_< version>device_support\f28004x\headers\source
    下的f28004x_globalvariabledefs.c拷贝到src中。
  3. 将C2000Ware_< version>device_support\f28004x\common\source下的以下文件拷贝到src中。
    在这里插入图片描述
  4. 将C2000Ware_< version>device_support\f28004x\headers\cmd下的f28004x_headers_nonbios.cmd拷贝到cmd中。

在main.c的测试代码中添加#include “F28x_Project.h”
尝试第二次编译,出现以下报错。
在这里插入图片描述

这是由于寄存器编程和库函数编程中存在重复的定义。
在这里插入图片描述

因此需要编辑工程属性,添加预定义_DUAL_HEADERS
在这里插入图片描述

尝试第三次编译,编译通过在这里插入图片描述

修改测试代码main.c文件

#include "device.h"
#include "F28x_Project.h"

void main(void)
{
    // Initialize device clock and peripherals
    Device_init();
    InitSysCtrl();
    // Initialize GPIO and configure the GPIO pin as a push-pull output
    Device_initGPIO();
    InitGpio(); //初始化GPIO
    // Initialize PIE and clear PIE registers. Disables CPU interrupts.
    Interrupt_initModule();
    InitPieCtrl(); //初始化PIE

    IER = 0x0000; //CPU级中断失能
    IFR = 0x0000; //清除CPU级中断标志
    // Initialize the PIE vector table with pointers to the shell Interrupt
    // Service Routines (ISR).
    Interrupt_initVectorTable();
    InitPieVectTable(); //初始化向量表
    // Enable Global Interrupt (INTM) and realtime interrupt (DBGM)
    EINT;
    ERTM;

    // Loop Forever
    for (;;)
    {
        ;
    }
}

进行第四次编译,出现报错。这是因为eabi和coff格式下,对汇编源文件的不同要求导致的[5]。

将src\f28004x_usdelay.asm文件中函数名前的下划线删去,再进行第五次编译。编译通过。
在这里插入图片描述
至此,该工程文件已经能够同时兼容库函数编程与寄存器编程了。

参考博文及资料

[1] TMS320F280049C 学习笔记2 搭建完全可移植的CCS9.3工程
[2] DSP TMS320F280049之CCS工程的建立(库函数版)
[3] DSP TMS320F280049之CCS工程的建立(寄存器版)
[4] C2000ware_< version>/device_support/f28004x/docs/F28004x_FRM_EX_UG.pdf
[5] 关于CCS的coff和elf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node.js--》Node环境及nvm版本管理安装及使用

目录 初识Node.js Node.js环境安装 nvm的安装 Node.js环境执行JS代码 初识Node.js Node.js是一个开源、跨平台的 JavaScript 运行时环境。其中文的官方网址为&#xff1a;Node.js官方网址 注意&#xff1a;浏览器是JavaScript的前端运行环境&#xff1b;Node.js是JavaScri…

OpManager 实时网络监控

网络是全球企业背后的基础。它在为您的员工提供行政服务以及为各大洲的客户提供服务方面发挥着关键作用。网络可帮助您将信息保存在一个集中位置 - 需要和限制所有其他入站请求的人员可以访问。那么&#xff0c;您如何提供持续的一流最终用户体验并维护快速发展的网络呢&#x…

JS面试题--ES6知识大全

ES6知识 字面量增强的写法的三种写法 ES6中对 对象字面量 进行了增强&#xff0c;称之为 Enhanced object literals&#xff08;增强对象字面量&#xff09;。 字面量的增强主要包括下面几部分&#xff1a; 属性的简写&#xff1a;Property Shorthand方法的简写&#xff1a…

测开工具:二次开发junit接口自动化框架

一&#xff1a;背景 源码地址&#xff1a;GitHub - 18713341733/AutoApi Java 接口自动化框架&#xff0c;一般就是junit与testng。这里我们讲一下junit接口自动化框架的二次开发。 1.1 我们实现了哪些功能 1、自定义了一些注解&#xff0c;用来管理case。包括case的描述、…

如何使用depcheck检查依赖?

目录 1. 你是否遇到过以下问题&#xff1a; 2. 原因 3. 解决 4. depcheck的其他功能 5.需要说明可能存在的问题 总结 1. 你是否遇到过以下问题&#xff1a; 1. GitHub上面克隆的项目&#xff0c;运行报错… 2.去一家新公司&#xff0c;用新电脑运行项目各种报错… 3.明…

有关linux中的文件IO的操作

Linux 应用编程中最需要掌握的基础就是文件 I/O的操作&#xff0c;学习过linux或者有过了解的应该都会听过一句话&#xff1a;linux中一切皆文件&#xff0c;文件是linux系统的核心设计思想。所以掌握文件的操作是很重要的。 那文件 I/O 又是什么&#xff1f;文件I/O指的是对文…

NumPy transpose 的定义与计算过程

NumPy transpose 的定义与计算过程NumPy documentation https://numpy.org/doc/stable/index.html numpy.transpose https://numpy.org/doc/stable/reference/generated/numpy.transpose.html numpy.ndarray.transpose https://numpy.org/doc/stable/reference/generated/num…

π120M31 10Mbps双通道数字隔离器兼容代替ADuM1200BR

π120M31 10Mbps双通道数字隔离器兼容代替ADuM1200BR 。具有出色的性能特征和可靠性&#xff0c;整体性能优于光耦和基于其他原理的数字隔离器产品。传输通道间彼此独立&#xff0c;可实现多种传输方向的配置&#xff0c;可实现 3.0kV rms 隔离耐压等级和 DC 到 10Mbps 信号传输…

网络通信基础

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ 祝大家圣诞快乐&#x1f384; 网络互连的目的是进行网络通信, 也即是网络数据传输, 再具体一点, 是网络主机中的不同进程间, 基于网络传输数据. 那么, 在组建的网络中, 如何判断到底是从哪台主机, 将数据传输到那…

JAVA物联网云平台源码/Modbus/视频接入 物联网智能看板源码

JAVA物联网云平台使用 Java 语言、主流技术组合&#xff08;MQTT、Spring Boot、Shiro、MyBatis、Druid、Ehcache、Thymeleaf、Bootstrap、Swagger&#xff09;开发&#xff0c;支持多数据源&#xff0c;支持代码一键生成。 1、包含物联网云平台源码&#xff08;源码全部开放&a…

【Three.js入门】灯光与阴影、平行光阴影属性、聚光灯的属性和应用

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…

百趣代谢组学分享:针灸改善乳腺癌相关性疲劳!非靶代谢组学…

非靶代谢组学肠道菌群测序&#xff1a;改善乳腺癌相关性疲劳—针灸! 文章标题&#xff1a;Acupuncture ameliorates breast cancer-related fatigue by regulating the gut microbiota-gut-brain axis 发表期刊&#xff1a;Frontiers in Endocrinology 影响因子&#xff1…

HTML5 新增元素

文章目录HTML5 新增元素概述headernavarticleasidesectionfooter表单元素新增type属性值&#xff08;验证型&#xff09;新增type属性值&#xff08;取值型&#xff09;output元素addressprogressmeterfigure 和 figcaptionfieldset 和 legendascriptHTML5 新增元素 概述 HTM…

BOM对象

1、什么是BOM BOM&#xff08;Browser Object Model&#xff09;即浏览器对象模型&#xff0c;它提供了独立于内容而与浏览器窗口进行交互的对象&#xff0c;其核心对象是 window。 BOM 由一系列相关的对象构成&#xff0c;并且每个对象都提供了很多方法与属性。 BOM 缺乏标…

B端产品-筛选功能如何设计

相信大家在设计B端产品时&#xff0c;最常打交道的就是列表&#xff0c;而列表最常用的一个功能就是搜索&#xff0c;别小看一个简简单单的搜索功能&#xff0c;其实里边的门道也是有很多的。那么如何设计一个好用的搜索栏呢&#xff1f;今天就与大家分享一下&#xff0c;自己负…

【动态规划篇】最少分割回文 编辑距离 不同的子序列

&#x1f320;作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《数据结构与算法要啸着学》 &#x1f387;座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;…

音视频技术开发周刊 | 277

每周一期&#xff0c;纵览音视频技术领域的干货。新闻投稿&#xff1a;contributelivevideostack.com。GNNear&#xff1a;基于近内存处理的大规模图神经网络训练加速器图神经网络(GNNs)已经成为分析非欧几里得图数据的最新算法。然而&#xff0c;实现高效的GNN训练是一项挑战&…

西门子1513CPU冗余组态

西门子1513R冗余配置 1、打开博图16软件&#xff0c;新建项目&#xff0c;添加新设备&#xff0c;在弹出的控制器目录下找到CPU 1513R-1 PN硬件&#xff0c;然后系统自动生成PLC_1和PLC_2&#xff1b; 2、打开设备组态中的网络视图&#xff0c;添加接口模块&#xff1b; 3、在…

Springboot 统计 代码执行耗时时间 ,玩法多到眼花

前言 近日群里有萌新提到关于统计代码执行时间的事&#xff1a; 开始 System.currentTimeMillis() 减去 结束 System.currentTimeMillis() 等于 耗时 其实我个人感觉OK的&#xff0c;就这样就蛮好的&#xff0c;很多项目都是这样用的。 简简单单的挺好。 这一篇就是 …

基于Java( jsp+servlet+javabean)+SQL sever 2017实现(Web)高校选课管理系统【100010058】

一、需求分析 开发意义&#xff1a; 随着信息技术不断向深入发展&#xff0c;越来越多的学校开始着手信息化建设。其中学生选课、成绩信息化管理就是其中重要的一块内容。学生选课与成绩信息规模大、项目条数多、信息量庞大&#xff0c;传统的人工管理方式显然已经无法满足要求…