小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))1c语言与汇编语言器一些对时间要求特别高的时候需要嵌入一些汇编语言,其他时候使用c语言通过位定义和寄存器结构体的方式来实现对dsp寄存器进行访问和控制。2配置SCI寄存器2.1了解SCI寄存器前面我们讲过2812有两个SCI寄存器(SCIA和SCIB),可以做成两个串口(2RS232/2RS484/RS232+RS485)首先我们查看寄存器的寄存器文件以SCIA为例,第一列表示他有13个寄存器可以操作,并且都以SCI开头进行命名;第二列表示地址,即该寄存器所在的位置;后面

大家好,又见面了,我是你们的朋友全栈君。

目录

 

1 c语言与汇编语言器

2 配置SCI寄存器

2.1 了解SCI寄存器

2.2 使用位定义的方法定义寄存器

2.2.1 位域

2.2.2 声明共同体

2.2.3 结构体

2.2.4 查看寄存器的值

2.3 寄存器文件空间分配


本节内容看懂之后主要是头文件程序的解析。

 

1 c语言与汇编语言器

一些对时间要求特别高的时候需要嵌入一些汇编语言,其他时候使用c语言通过位定义和寄存器结构体的方式来实现对dsp寄存器进行访问和控制。

2 配置SCI寄存器

2.1 了解SCI寄存器

前面我们讲过2812有两个SCI寄存器(SCIA和SCIB),可以做成两个串口(2RS232/2RS484/RS232+RS485)

  • 首先我们查看寄存器的寄存器文件

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

以SCIA为例,第一列表示他有13个寄存器可以操作,并且都以SCI开头进行命名;第二列表示地址,即该寄存器所在的位置;后面的占用空间表示这个地址内的数据宽度,通过更改这些寄存器的数据就可以改变相应寄存器的功能。注意寄存器地址非连续,有缺失值。

2.2 使用位定义的方法定义寄存器

2.2.1 位域

定义:一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。

语法结构如下所示

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

注意:语法最后有分号。

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

注意:

1 位域声明顺序从右到左

2 位域的定义不能横跨字节

若例6-1,中a长度为5,b为3,则定义错误,在此情况下b要横跨两个字节

3 位域不能大于8个字节,否则与前面第二条冲突

4 可以没有域名,此时的作用是调整字节的顺序。如下所示

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

注意:保留位也需要定义。

具体位域分区如下所述:

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

2.2.2 声明共同体

作用:有时候需要对整个寄存器进行操作,这时通过声明共同体来进行操作;既可以对整体进行操作,也可以按位进行操作。

定义:

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

结构体和共同体的区别:

结构体分配空间按所有成员占据的总和来分配;

共同体的空间是共用的,如例6-3中:unit16与bit共用的是一段空间,在一个时间只有一个共同体使用。

2.2.3 结构体

SCI中包含了很多寄存器,为了方便管理,在dsp中通过结构体的方法来实现。

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

注意:

结构体当中有很多union共同体,既可以整体对寄存器进行操作,也可以对寄存器进行位操作;但unit16类型的只能进行寄存器操作。

保留项也被定义了,用rsvd代替,但没有用处。

在定义结构体之后,需要声明SciaRegsScibRegs,表示scia与scib寄存器;关键字extern代表全局变量;volatile表示寄存器的值易变,可以被外部硬件和外部代码改变,但如果没有这个关键字,则该寄存器的值只能被程序代码改变。

函数调用:

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

代码分析:

SciaRegs.SCICCR.bit.STOPBITS

首先SciaRegs.SCICCR这一段代码是结构体定义的,

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

找SCICCR的声明

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

下一位SciaRegs.SCICCR.bit,从函数声明处得知函数原来应该是SCICCR_REG,在共同体中存在的下一位bit,他是位域定义,找他的声明处

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

顺藤摸瓜也就找到了SciaRegs.SCICCR.bit.STOPBITS寄存器

union共同体,既可以整体对寄存器进行操作(.all),也可以对寄存器进行位操作(.bit);但unit16类型的只能进行寄存器操作,如下所示:

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

2.2.4 查看寄存器的值

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

2.3 寄存器文件空间分配

why:代表寄存器的变量如何与物理寄存器结合起来的?

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143951.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Docker技术( 容器虚拟化技术 )「建议收藏」

    Docker虚拟化容器技术第一章Docker简介诞生背景Docker介绍虚拟机技术容器虚拟化技术官方网址第二章Docker安装前提条件安装DockerDocker底层原理Docker结构图工作原理Docker为什么比VM快第三章Docker常用命令帮助命令镜像命令容器命令第一章Docker简介诞生背景一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发…

  • 打印机服务器显示未连接,解决win10打印机提示“无法连接打印机 后台处理程序未运行”的方法…

    打印机服务器显示未连接,解决win10打印机提示“无法连接打印机 后台处理程序未运行”的方法…如今大家在办公室中最常见的两样设备就数电脑和打印机了吧?办公人员对于打印机的使用是非常频繁的,每天都要使用。因此一旦打印机出现故障就会对我们的工作效率产生影响。近日有用户将电脑升级为win10之后发现自己的打印机不能正常的运行,每次点击打印之后就会出现:“无法连接到打印机,后台处理程序未运行”的提示。不知道你遇到这个故障的时候是如何解决的,若是还没有找到解决的方法可以使用下面的教程进行处理哦!方法…

  • CSS解读之alpha通道与opacity属性的区别

    CSS解读之alpha通道与opacity属性的区别上期在谈到border的用途的时候,在最后列举的两个实例中均用到了一个transparent属性值,从字面意思也知道,这个属性值其实和颜色是并列的,不过它表示的是透明。一般的HTML标签在未指定其背景的时候默认就是透明的。我们发现在上个实例在谷歌浏览器中用调试工具查看其CSS属性的时候,transparent自动变成了如图1-1所示的rgba(0,0,0,0)。这说明两者基本是等价的。

  • 大数据告诉你中老年人上网爱干什么[通俗易懂]

    大数据告诉你中老年人上网爱干什么[通俗易懂]中老年人最爱用微信,最喜欢看心灵鸡汤,最易被“免费领红包”骗……昨天,中国社科院国情调查与大数据研究中心和腾讯社会研究中心联合发布《中老年互联网生活研究报告》,报告对50岁以上人群的互联网生活进行了多方面解读。数据显示,中老年人不仅将微信作为即时通讯工具,还将其视作表达情感和维系社交的互动平台,如在微信里发表情和图片(81.8%)或小视频(68.9%),在朋友圈与他人互动(81.6%),接收或发微…

  • vue绑定标签_vue自定义表单

    vue绑定标签_vue自定义表单v-modelv-model指定可以实现表单值与属性的双向绑定。即表单元素中更改了值会自动的更新属性中的值,属性中的值更新了会自动更新表单中的值绑定的属性和事件v-model在内部为不同的输入元

  • python爬虫爬图片教程_爬虫爬取图片的代码

    python爬虫爬图片教程_爬虫爬取图片的代码用Python爬虫来爬小姐姐本教程将教你从0开始走进Python爬虫1.我们先要知道Python爬虫的原理基本的Python爬虫原理很简单,分为三步获取网页源码通过分析源码并通过代码来获取其中想要的内容进行下载或其他操作话不多说直接开干注意!本教程只是为了快速入门爬虫并实现一个功能,不考虑代码写的漂不漂亮,规不规范先准备上我们的目标网页开始我用的工具是:JetBrai…

    2022年10月29日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号