历史上的今天
返回首页

历史上的今天

今天是:2025年03月31日(星期一)

正在发生

2020年03月31日 | MSP430使用指南2 -> CPU/CPUX

2020-03-31 来源:eefocus

首先,先说明一下CPU位数代表的是什么意思,从市面上看8位,16位,32位甚至64位的MCU内核都已出现,位数指的是什么呢:


严谨说法:指CPU一次能处理的数据宽度,也就是参与运算的寄存器的数据长度。


MSP430 是16位的MCU


我们平时对MCU的C语言编程,都会经过编译器编译成机器码,也就是二进制,最后通过CPU内部寄存器(一般有20-100个)来实现运算数据,因此我们写的所有程序,实现的所有功能,最终都要由CPU内部寄存器的读写来完成。


CPU寄存器一般分为专用寄存器和通用寄存器,对于MSP430来说,总共有16个寄存器:R0 - R15, 其中四个(R0 – R3)为专用寄存器,其余的为通用寄存器,下面详细讲解一下CPU的内部结构和寄存器的功能。


1. CPU和CPUX


多看MSP430的User Guide你会发现,对于CPU介绍的章节,有些是CPU,有些则是CPUX,那么这两个有什么区别呢? 为什么要出现CPUX呢:


我们来计算一下:


首先,16位的寄存器,也就是说我们由于需要寻址去执行相应的程序,即我们最多只有16跟地址总线,那么寻址范围呢:216=64K,每个地址可以存储1B的数据,因此CPU的最大寻址空间为64KB,这也就是CPU内核的MCU内部最大的Flash或FRAM空间了,但是如果用户程序很复杂呢,算法量很多呢,或者需要在内部Flash或FRAM中存储大量数据呢,必定会造成一个问题,内存不够,这就很尴尬,基于此,TI才开发了CPU的升级版CPUX内核,地址总线为20为,那么最大可以支持1MB的存储,这就可以解决这个问题了。 什么?1MB还不够?程序占有量没那么大的,1MB的内存基本满足90%以上的要求了,这是MCU,MCU,不是高端CPU!


2.CPU/CPUX的结构图:

左侧是CPU的内部结构,右侧为CPUX的结构图,从图上看,唯一的区别就是寄存器位数和地址总线了,因此,这两个CPU内核是一致的,仅仅区别在地址总线上而已。


PS: 不论是ARM内核,还是AVR内核,MSP430内核等,基本原理都大同小异,包含的CPU寄存器也很相似,不需要一致迷恋ARM内核好等,理性来说,适合自己项目的最好,ARM内核性能高,但内部也比较复杂,MSP430内核则比较简单,操作起来更便利,因此在很多场合下,MSP430内核更好理解和上手。


好啦,内核结构基本就这样,什么?What’s the fuck? 看不懂? 没事呀,作为硬件工程师甚至是嵌入式软件工程师,不需要理解,就知道它就这样子,内部就是一堆寄存器和运算器就OK了,我们也很少会接触到它。


3.CPU/CPUX内部寄存器:


首先介绍一下MSP430 CPU/CPUX的主要特征:


丰富的寄存器资源

单周期操作寄存器

16位数据总线 16位/20位地址总线

常数发生器

直接存储器到存储器的访问

位,字节和字的操作方式。


寄存器列表:

image.png?imageView2/2/w/550

下面以CPU(16位地址线)为例讲解一下每个寄存器的作用:


R0寄存器:PC 程序计数器

CPU中最核心的寄存器,指示下一条即将执行指令的地址。 PC寄存器的内容总是偶数,指向偶字节地址。程序计数器PC可以像其他寄存器一样用所有指令和所有寻址方式访问,但对程序存储器的访问必须以字为单位,否则会清除高位字节。PC的宽度决定了可以直接寻址的范围。16bits -> 64KB, 20bits -> 1MB。


汇编Code示例:


MOV #LABLE, PC              ;跳转到地址LABLE开始执行


MOV LABLE, PC                ;程序开始执行的地址为LABLE所在内存中的数


MOV @R14, PC                ; 程序开始执行的地址为寄存器R14中的数


R1寄存器:SP 堆栈指针

堆栈指针的所用主要是保护当前程序执行的地址,当正在执行一段程序,突然进来了一个中断,因此需要把当前执行程序的地址保护起来,将中断服务程序的矢量地址写入PC寄存器,开始执行中断服务程序,当中断服务程序执行完后,再将堆栈中的数据赋给PC寄存器,返回到原本程序位置接着执行。同时堆栈再函数调用期间也可以保存寄存器变量,局部变量参数等。


堆栈指针SP总是指向堆栈的顶部,系统在将数据压入堆栈时,总是先将堆栈指针SP的值减2,然后再将数据送到SP所指的RAM单元中。将数据从堆栈中弹出正好与压入过程相反;先将数据从SP所指示的内存单元取出,再将SP值加2。


汇编Code示例:


MOV 2(SP), R6                ;将内存单元I2中的数据放到R6中。


MOV R7, 0(SP)                ;将R7中的数据放到堆栈顶所在的单元(I3)中。


PUSH #0123h                  ;将SP的值减2,再将#0123h放到SP所指向的单元中。


POP R8                             ;将SP所指单元中的数(#0123h)放到R8中,再将SP的值加2。


实现功能的图如下:

R2寄存器:SR 状态寄存器

状态寄存器指示CPU目前工作遇到的一些零标志,负标志等,同时可以控制CPU的中断功能,具体功能见下表:

image.png?imageView2/2/w/550

R3寄存器:常数发生器


常熟发生器用于产生一些常用的常数,而不必占用一个16 bits的字。所用常数的数值由寻址位As来定义,硬件完全自动地产生数字:-1,0,1,2,4,8   具体如下:

image.png?imageView2/2/w/550

R4~R15寄存器:通用寄存器,可用于自由的读写操作。


汇编Code示例:


MOV #1234H, R15         ;执行后R15内容为1234H


MOV.B #23H, R15          ;执行后R15内容为0023H


ADD.B #34H, R15           ;执行后R15内容为0057H


4.CPU/CPUX存储结构:


特点:MSP430 MCU采用“冯-诺依曼”结构,物理上完全分离的存储区域,如ROM,FLASH,FRAM,RAM外围模块,特殊功能寄存器SFR等,被安排在同一地址空间,这样就可以使用一组地址、数据总线、相同的指令访问。

中断向量被安排再相同的空间:0FFE0~0FFFFH;

8位,16位外围模块占用相同范围的存储器地址;

所有器件的特殊功能寄存器占用相同范围的存储器地址:00H~0FH;

数据存储器开始于相同的地址,即从0200H处开始;

代码存储器的最高地址都是0FFFFH.


5.编程时内联函数:


再使用CCS或IAR编程过程中,你可能会发现,有一些函数类似于库里面的,找不到定义,这些函数是内联函数,具有一些特殊功能,在使用过程中可以减少自己的开发时间。


MSP430总共有42个内联函数,这里列出几种常用的,并描述其功能:


__no_operation();

仅仅是空操作而已,类似于NOP(); 调试使用,可以定位到程序运行的位置。


__delay_cycles(10);

延时函数,参数指的是MCLK时钟周期,比如:MCLK  1MHz,那么参数写1000,则大约延时1ms。


__bis_SR_register();

针对寄存器中单独的某一位进行置位,常用的如:


__bis_SR_register(SCG0);                 // disable FLL


__bis_SR_register(LPM3_bits|GIE);         // Enter LPM3, interrupts enabled


__bic_SR_register();

针对寄存器中单独的某一位进行复位,常用的如:


__bic_SR_register(SCG0);                 // enable FLL


__bic_SR_register_on_exit();

针对寄存器中单独的某一位进行复位同时退出到main中,常用的如:


__bic_SR_register_on_exit(LPM0_bits + GIE);  // Exit LPM0 on return to main


针其他内联函数平时很少使用,有些也不太需要很深入的了解函数的含义,具体内容,可以参见MSP430 Optimizing C C++ Compiler.pdf文件。

推荐阅读

史海拾趣

Bivar公司的发展小趣事

在电子行业的竞争中,Bivar公司意识到单打独斗难以取得长久的成功。因此,公司积极寻求与其他企业的合作机会,共同开发新产品、拓展市场。通过与上下游企业的紧密合作,Bivar不仅降低了成本、提高了效率,还获得了更多的资源和支持,进一步巩固了市场地位。

Alpha 3 Manufacturing公司的发展小趣事

Alpha 3 Manufacturing公司深知产品质量是企业生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格的把控。同时,公司还引入了先进的生产设备和检测仪器,确保产品的质量和性能达到国际先进水平。此外,公司还定期对生产过程进行审查和改进,不断提高生产效率和产品质量。

Aten International公司的发展小趣事

在电子行业中,标准化建设对于提升产品质量和企业竞争力具有重要意义。Aten International深知标准化建设的重要性,因此在产品研发和生产过程中始终坚持高标准、严要求。公司还积极参与国际标准化组织的活动,推动相关标准的制定和完善。正是凭借在标准化建设方面的卓越表现,Aten International赢得了业界的高度认可和广泛赞誉。

以上五个故事虽然基于虚构,但它们都反映了Aten International在电子行业发展的真实情况。这些故事展示了公司在技术创新、市场拓展、标准化建设等方面的努力和成就,也体现了Aten International在电子行业中的领先地位和卓越贡献。

CANOPUS公司的发展小趣事

CANOPUS公司最初由创始人Shinichi Usuda于1977年创立,当时他经营着一家乐器商店。他深知音乐的力量和乐器的重要性,于是决定将自己的商店逐渐转型为专注于鼓类乐器的制造与销售。经过几年的努力,CANOPUS逐渐在乐器市场上崭露头角,赢得了音乐爱好者的青睐。

海芯科技(AVIA)公司的发展小趣事

面对电子行业的快速变化和市场竞争的加剧,海芯科技始终保持着对技术创新的追求和投入。公司不断引进新技术、新工艺和新材料,对现有产品进行升级和改进,同时也在不断探索和研发新的产品和技术。这些技术升级和创新发展不仅提升了公司的核心竞争力,也为公司在未来市场竞争中保持领先地位提供了有力保障。

这五个故事展示了海芯科技在电子行业中的发展历程和取得的成就。通过不断的努力和创新,海芯科技已经逐渐成为了电子行业中的佼佼者,为行业的发展做出了积极的贡献。

Eagle-Picher公司的发展小趣事

在第二次世界大战期间,Eagle-Picher公司利用其在材料科学方面的专长,为美国军队生产蓄电池。公司使用硅藻土和锌等材料,为军队的通信设备和其他电子设备提供可靠的电源。这一时期的业务扩张不仅增强了Eagle-Picher的技术实力,也为其在电子行业树立了良好的声誉。

问答坊 | AI 解惑

怎样文件复制呢?

我想更新某一个文件,但是我直接复制到windows目录下,好像不行,重启一下就没了。 windows目录在ram下的原因吧, 那要怎么做才能实现呢?…

查看全部问答>

郁闷的SIM卡状态问题

我写了个测试程序测试我RIL的打电话,发短信和电话本功能。 用Line函数写的电话测试程序可以打电话,但Connection和Disconnect状态收不到。 奇怪的是,用SimInitialize函数写的SIM测试部分,初始化的时候就找不到SIM卡(错误:SIM_E_NOSIM)。用S ...…

查看全部问答>

请问在vxworks下用串口传输 如何使用xmodem协议

如题... 为了数据不丢失,想使用xmodem协议传输数据 请问应该怎样做,流程大概是如何的,有没有相关的资料提供 谢谢…

查看全部问答>

【兼职】关于主板、硬盘或者显示器维修图书兼职作者

现有多本有关主板、硬盘或者显示器维修方面的图书需要编写,要求作者对主板、硬盘或者显示器维修的原理和实际操作比较精通。 (1)有兼职时间 (2)有实际工作经验 (3)无诚意者勿扰 有意者请将姓名和联系方式发到本人邮箱yzbook@sina.com,作者一定 ...…

查看全部问答>

关于WINCE4.2开发工具的问题

有一个设备,系统是WINCE4.2,请问各位用VISUTAL STUDIO 2005能开发吗,用2003呢?除了IDE环境之外还需要安装别的什么工具,谢谢了 …

查看全部问答>

液晶模块求救

各位前辈,我是一个大四的学生,毕业设计内容要求用到液晶显示。购买了一块北京青云的LCM12864B(控制器KS0107),自己焊接上了排针,上电后毫无反应,开、关模块没有问题。但送出数据后不显示,后来想送数后再读进来,发现不对。请问是不是模块坏 ...…

查看全部问答>

谁从TI的网店那里订购的EXP430-G2收到了吗?

收到的朋友,感觉这个系列的片子怎么样啊?…

查看全部问答>

着急的吃饭 不下,,,我只用过PIC单片机的外部 晶振

如果用PIC的内部晶体的话,,那那两个专门接外部晶体的管脚     1..  可以做普通IO使用  2。这两个口只能接外部晶体的作用 ,不外接晶体的时候只能空着 选1还是选2,,,哪个内行先辈帮忙 选一。。。1还是2对?? ...…

查看全部问答>

EDMA 的一个概念始终搞不明白

看c6000的EDMA手册,有两个概念:frame和array 按照手册的英文原文: a frame can have staggered or contiguous element. 翻译成中文,似乎应该是:一个帧可以有连续的element构成。 a group of contiguous elements comprise an array. 翻 ...…

查看全部问答>

上班空闲时,你都在干什么?

快过年了,有些人也走了,公司显得有点冷清。 仔细看过去,研发人员还是一直的忙碌,生产维护的也在埋头苦干,那么那些、财务、行政等后勤人员,都在干什么呢?按理说年底,他们的事情很少,那他们来上班,都在干什么事情?若没事情,还不如让他 ...…

查看全部问答>