TMS320F28335项目开发记录5_28335之CCS编程基础
CCS开发环境已经为我们封装好了很多片内外设寄存器的结构体,我们仅仅须要包括对应的官方的头文件就能够使用了,那么它的内部详细是怎样实现的呢?
以下来一个典型的样例:
1.使用结构体和联合体
A.用struct定义位域的作用:
DSP2833x_Sci.h中有一段:
struct SCICCR_BITS { // bit description
Uint16 SCICHAR:3; // 2:0 Character length control
Uint16 ADDRIDLE_MODE:1; // 3 ADDR/IDLE Mode control
Uint16 LOOPBKENA:1; // 4 Loop Back enable
Uint16 PARITYENA:1; // 5 Parity enable
Uint16 PARITY:1; // 6 Even or Odd Parity
Uint16 STOPBITS:1; // 7 Number of Stop Bits
Uint16 rsvd1:8; // 15:8 reserved 保留
};
union SCICCR_REG {
Uint16 all;
struct SCICCR_BITS bit;
};
Uint16 SCICHAR:3 表示定义SCICHAR,它占一个字节中的3位;
注意:必须以4字节对齐!观察上面的SCICCR_BITS的定义也会发现前面定义了3+1+1+1+1+1=8位=1字节
假设出现一项占5位呢?如:
Uint16 SCICHAR1:4
Uint16 SCICHAR2:5
显然不能像上面这样写,应该写成:
Uint16 SCICHAR1:4
Uint16 NULL :0 //这种话,以下的变量就会从第二个字节開始存放
Uint16 SCICHAR2:5
B.再来看union的作用
union SCICCR_REG{
Uint16 all;
struct SCICCR_BITS bit;
}
这样定义有什么效果?
当我想操作SCICCR_BITS中的每一位时,仅仅需定义union SCICCR_REG reg就可以
我们能够总体操作,如:reg.all = 0x0011;
我们能够操作当中一位:reg.bit.PARITY = 0;
还记得c语言中union中的共享同一个内存空间地址么?
2.使用cmd文件进行数据段与存储器空间映射
既然官方已经帮我们做好了上面的一切,上面的东西肯定能够直接使用,那么为什么能够直接使用呢?
定义一个上面的变量就能够訪问到真正硬件上的寄存器了吗?肯定不行!
我们须要将上面的变量和实际硬件的寄存器存储空间绑定,怎么绑定,通过cmd文件。
以下是官方DSP2833x_GlobalVariableDefs.c中的一段代码:
//----------------------------------------
#ifdef __cplusplus
#pragma DATA_SECTION("ScicRegsFile")
#else
#pragma DATA_SECTION(ScicRegs,"ScicRegsFile");
#endif
volatile struct SCI_REGS ScicRegs;
官方定义了ScicRegs来操作串口SCI-C的相关的寄存器,可是肯定没法直接使用,还没有做绑定;
使用#pragma DATA_SECTION能够将变量与数据段绑定,变量和数据段是自定义的,仅仅须要将他们绑定就可以;
这样绑定显然还不行,还须要通过cmd文件数据段映射到硬件的寄存器地址空间中去!
查看DSP2833x_Headers_nonBIOS.cmd文件我们发现当中有这样几行:
MEMORY
{
PAGE 0: /* Program Memory */ PAGE 1: /* Data Memory */ ADC : origin = 0x007100, length = 0x000020 /* ADC registers */
SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */
SCIC : origin = 0x007770, length = 0x000010 /* SCI-C registers */
I2CA : origin = 0x007900, length = 0x000040 /* I2C-A registers */
} SECTIONS
{
AdcRegsFile : > ADC, PAGE = 1
ScibRegsFile : > SCIB, PAGE = 1
ScicRegsFile : > SCIC, PAGE = 1
I2caRegsFile : > I2CA, PAGE = 1
}
MEMORY代表内存空间,PAGE0是程序空间, PAGE1是数据空间;
(还记得第一课的介绍么?28335採样的哈佛总线结构,程序与数据分开了~)
SECTIONS代表须要映射的段;
通过上面的映射后,操作ScicRegs就能够实际操作串口了,目的也就达到了;
TMS320F28335项目开发记录5_28335之CCS编程基础的更多相关文章
- TMS320F28335项目开发记录1_CCS的使用介绍
CCS使用介绍 一.前言 本系列文章记录本人实际项目开发时对ti的DSP28335,以及CCS开发环境等的学习与记录,相对于2812来说,28335的资料还是比較少的,只是原理是相通的,28335说白 ...
- TMS320F28335项目开发记录2_CCS与JTAG仿真器连接问题汇总
CCS与仿真器连接问题 实际使用过程中.仿真器和CCS连接可能出现这样或那样的问题,或许你的连接非常成功,没碰到过什么问题.但我的问题的确不少,可能与电脑配置有关吧,也可能与人品有关吧. 以下的自己的 ...
- TMS320F28335项目开发记录6_28335之cmd文件具体解释
1.CMD文件的作用 CMD文件的作用就像仓库的货物摆放记录一样,为程序代码和数据分配指定的空间. 2.C语言生成的段 C语言生成的段大致分为两大类:初始化和未初始化,已初始化的段含有真正的指令和数据 ...
- TMS320F28335项目开发记录9_28335中断系统
28335中断系统 1.中断系统 在这里我们要十分清楚DSP的中断系统. C28XX一共同拥有16个中断源,当中有2个不可屏蔽的中断RESET和NMI.定时器1和定时器2分别使用中断13和14.这样还 ...
- TMS320F28335项目开发记录3_28335简介
28335特性介绍 高性能静态CMOS技术 高达150MHZ(6.67ns的周期时间):1.9V / 1.8内核 ,3.3V I/O设计 高性能32位CPU IEEE- ...
- Anytime项目开发记录0
Anytime,中文名:我很忙. 开发者:孤独的猫咪神. 这个项目会持续更新,直到我决定不再维护这个APP. 2014年3月10日:近日有事,暂时断更.希望可以会尽快完事. 2014年3月27日:很抱 ...
- Unity3D Demo项目开发记录
前言 经过一段时间的学习与实际开发,unity3D也勉强算是强行入门了,正所谓好记性不如烂笔头,更何况本人并非专业从事unity3D开发,会一点C#但也并不熟悉,为了避免后期遗忘,因此特意整理了一个D ...
- Anytime项目开发记录4
做事情列表,我在程序中命名为“正在做”. 这是一个Fragment,应用的主页面,由一个MainActivity加上DoingListFragment和PersonFragment组成.PersonF ...
- Anytime项目开发记录2
注册,登陆于密码找回.这是这次记录的主要内容. 首先,我们来看类图: 因为一直在改,所以与第二篇介绍项目框架时的图会有一些不一样. 代码都是非常简单的. 由于在注册和登陆这里,需要弹出一些对话框告诉用 ...
随机推荐
- Servlet配置对象、上下文对象、多线程问题
一.Servlet配置对象(ServletConfig):Servlet初始化时,容器调用其init(ServletConfig)方法,传递该对象. 1.获得对象方法: (1).直接使用getServ ...
- 基于visual Studio2013解决面试题之0804复杂链表
题目
- 解决cocoapods在64位iOS7系统以下的警告问题
今天碰到一个非常奇怪的问题.XCODE提示这种警告 Pods was rejected as an implicit dependency for 'libPods.a' because its ar ...
- 浅谈C#中的泛型
1.什么是泛型? 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写 代码时定义一些可变部分,那些部分在使用前必须作出指明.各种程序设计语言和其编译器.运行环境对泛型的支持均不一样.将 ...
- Eclipse TestNg插件
TestNg作为一个测试框架,也有eclipse的插件: 官网给的安装插件地址是 : For Eclipse 3.4 and above, enter http://beust.com/eclipse ...
- Delphi安装NT服务程序时(不出现提示信息)
如果我们不加上"/silent",那么Delphi在安装和卸载NT服务程序时候,都会出现一个提示信息,不希望出现这个提示信息,那么使用如下命令: 1,安装:“你的nt程序 /ins ...
- 去掉Enter字符(\r)的几个方法
数据:test.txt: f1:f2:f3:# Shell: #!/bin/bash while read line do echo $line result1=$(echo $line|awk -F ...
- 基于visual Studio2013解决面试题之0303数组求和
题目
- _00024 尼娜抹微笑伊拉克_云计算ClouderaManager以及CHD5.1.0群集部署安装文档V1.0
笔者博文:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
- Codeforces Round #218 (Div. 2)
500pt, 题目链接:http://codeforces.com/problemset/problem/371/A 分析:k-periodic说明每一段长度为k,整个数组被分成这样长度为k的片段,要 ...