MSP430使用指南2 -> CPU/CPUX

发布者:暗里著迷最新更新时间:2020-03-31 来源: eefocus关键字:MSP430  使用指南  CPU  CPUX 手机看文章 扫描二维码
随时随地手机看文章

首先,先说明一下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

下面以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

R3寄存器:常数发生器


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

image.png

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文件。

关键字:MSP430  使用指南  CPU  CPUX 引用地址:MSP430使用指南2 -> CPU/CPUX

上一篇:MSP430使用指南31 -> BSL
下一篇:MSP430使用指南1 -> MSP430简介及选型指南

推荐阅读最新更新时间:2024-11-08 01:46

msp430f149学习之系统时钟的设置
一、概述 MSP430F149有三个时钟源:外部LF(XT1一般为32.768K),HF(XT2一般为8M),内部DCO。从时钟系统模块可得到三种时钟信号:MCLK,SMCLK,ACLK。 上电默认状况下MCLK,SMCLK信号来自DCO,ACLK来自LF。根据官方PDF说法默认状况下DCO模块配置为RSELX=4,DCO=3,因此DCO应为1M,但示波器实测MCLK/SMCLK为680K,测试温度约25摄氏度。 标注:MCLK主时钟、SMCLK子时钟、ACLK活动时钟。 二、举例 void Init_CLK(void) { unsigned int qq; WDTCTL= WDTPW + WDTHOLD
[单片机]
基于单片机MSP430F147的自动寻边器下位机设计
摘要:为了适应环境的变化,运用单片机MSP430F147设计一个自动寻边器,给出了寻边器的下位机电路设计方案,经过多次训练后得出交界区的最优参考电压,与寻边器采集的电压信号相比较,判断得出是否已经到达交界处,此寻边器在机电行业不同环境下可完成现场工件检测。 寻边器是机电行业现场检测工件常用的光学计量仪器。长期以来,为保证光学投影仪或工业数控机床检测中的成像质量、测量准确度等技术指标,国内外传统自动寻边器生产厂家推出的投影仪其成像都是反像。为迎合部分顾客的特殊需求,各厂家相继推出其成像为正像的投影仪。该技术常利用寻边器装在主轴上,对孔壁、矩形工件外形进行寻点坐标后,将其坐标值记录下来,经手工计算,再输入到零点偏置。 在实际加
[单片机]
基于单片机<font color='red'>MSP430</font>F147的自动寻边器下位机设计
MSP430之一 关于AD转换
在这里记下来自己所学的,而且写一篇记忆更深刻,还方便查阅。希望能有帮助吧~加油一起进步。 l 首先应明确Msp4301X里的各系列中的ADC模块大凡是12位的转换精度。下图即为其功能模块图。 其实这个图感觉大概看哈就行了,真有时间和精力细细结合书渗透还是可以的,不过就是刚开始看有点花花绿绿吧。 l 熟悉并能使用一个模块,必然要熟悉其各个寄存器的作用。下面我们来看下ADC12模块中各个模块寄存器的作用, 转换控制寄存器 ADC12CTL0 ADC12CTL0 0 1 2 3 4 5 6 7
[单片机]
MSP430应用技巧6:代码速度的优化
CCS中有一个选项--opt_for_speed由于控制代码大小和代码运行速度,将其设为0则可达到代码最小化/运行速度最慢,将其设为5则可达到运行速度最快化/代码最大。我们可以在0-5之间进行选择做一个权衡。CCS中提供一个工具Optimizer Assistant可以对0-5的所有选项进行编译和链接,从而找到一种最佳的方案。 我们可以通过菜单View- Other- Code Composer Studio- Optimizer Assisatan打开该工具,工具运行完毕后,绿色箭头标明是当前的选项,绿色bar是最佳选项,红色是失败选项。 我觉得知道上面就足够了,如果希望深入了解,本文后付英文原文和翻译,以供
[单片机]
<font color='red'>MSP430</font>应用技巧6:代码速度的优化
英伟达称旗下部分芯片遭遇“幽灵”漏洞影响 发布补丁
英特尔芯片漏洞风波目前仍未平息,然而,芯片业界的另一家重要企业——英伟达(Nvidia)也宣称旗下芯片遭遇“幽灵(Spectre)”漏洞困扰。 英伟达声称,该公司的部分芯片被“幽灵”漏洞影响,可以引发内存泄漏,进而便于黑客绕过操作系统,由此让黑客盗取设备的密码。 不过,英伟达周二通过博客表示,该公司正在提供初步的安全升级补丁,以提升受影响芯片的安全,这些受影响的芯片包括GeForce、Tesla、Grid、NVS以及Quadro等。
[单片机]
谷歌TPU没戏?最强大脑当属CPU+FPGA
对于 机器人 而言,什么才最重要?   能够暴力弹跳的复杂机械装置?各类价格昂贵的传感器?或像EVE那样以萌神外形征服世界?   No,no,no!最重要的是: 能在复杂的环境中完成特定工作,做一个有益于人民的机器人。   为了实现这一崇高目标,机器人要眼观六路,耳听八方,行走天下,胸有丘壑。 而这一切都离不开一颗强劲的大脑——高性能计算平台和高效算法。   通用处理器在计算性能和能效上越来越难以满足日益庞大、多样化的数据处理需求。 借助由GPU、 FPGA 和其他智能引擎等协处理器与 CPU 一起组成的异构计算平台来提升计算性能,已成为当下学术界和工业界的研究热点。 异构计算作为一种特殊的并行计算方式,能够根据每个计算子系统的结
[嵌入式]
基于MSP430 Timer_B的D/A转换
1.简介 1.1 MSP430单片机介绍 虽然目前在国内市场上应用较多的单片机仍然是8位单片机,但是由美国德州仪器(TI)公司推出的16位单片机MSP430具有处理能力强、运行速度快、低功耗、指令简单等优点。并采用了JTAG技术、 FLASH在线编程技术、BOOTSTRAP等诸多先进技术,因此具有很高的性价比,在欧洲市场已得到了非常广泛的应用。虽然MSP430进入国内市场的时间不是很长,但是因其具有以上所述的卓越品质,一进入国内市场就被众多电子工程师所青睐。其中 MSP430F449具有7个工作模式可选8、10、12、16的16位计数器。用其比较模式产生的PWM可以实现D/A转换(D/A conversion)。 1.
[单片机]
基于<font color='red'>MSP430</font> Timer_B的D/A转换
英特尔面临痛苦抉择 进行转型实属无奈
    英特尔要想获得高于PC市场的增长速度,必须进入其他领域。但对于已经习惯了CPU高利润的英特尔,去做利润低的消费电子,是很痛苦的一件事,至于如何寻找合作伙伴、如何转型,英特尔这段路不好走。     庞大、稳健如大象的英特尔,近来却成为公众关注的焦点。     9月14日,随着两位高管的离去,英特尔的高层组织架构发生了重大变革。而就在不久之前,被英特尔寄予厚望的中国市场却发生了一次工人“罢工”,起因是英特尔将上海工厂搬迁到成都之后,两地工人同工不同酬,这催生了不满情绪。     这其实并非孤立的事件,作为传统PC时代的领先者,英特尔越来越感到自己优势在削弱,原因是目前已经进入到了消费电子时代,那些携带方便的电子产品逐
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved