TI - MCU - MSP430使用指南2 -> CPU/CPUX

发布者:keiss2018最新更新时间:2022-09-19 来源: csdn关键字:TI  MCU  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文件。


链接如下:http://www.ti.com/lit/ug/slau132u/slau132u.pdf?keyMatch=MSP430%20OPTIMIZING%20C%20C%20COMPILER&tisearch=Search-EN-everything

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

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

推荐阅读最新更新时间:2024-11-10 13:21

基于STC89C52单片机的脉动真空灭菌器控制系统的设计
在此主要叙述以STC89C52单片机为核心的脉动真空灭菌器控制系统的设计,给出了系统的实现原理、硬件组成及相应的软件设计。在灭菌过程中,采用Fuzzy—PID混和算法对温度进行非线性控制。利用该系统的智能化软件可方便地实现对脉动真空灭菌器的自动化控制。该系统在消毒灭菌的过程中,可以实时显示参数和图形化显示灭菌过程,还可以储存所需要的所有参数及打印等功能,同时还采取了软、硬件抗干扰措施。实验表明该系统提高了灭菌器的控制精度,功能齐全且实用性强,可以安全运行,实现了灭菌器的自动化工作过程。 现在人们生活水平提高了,人们更加的关注医疗灭菌消毒。在90年代中期,国内研制了_种新型灭菌设备——脉动真空灭菌系统。该系统采用了先进的
[单片机]
基于STC89C52<font color='red'>单片机</font>的脉动真空灭菌器控制系统的设计
单片机太阳能自动追光系统程序+电路+仿真
用51单片机做的太阳能自动追光系统 下面是部分程序预览 #include reg52.h #include intrins.h sbit spb=P1^0; //水平方向反转使能端 sbit czb=P1^1; //垂直方向反转使能端 sbit spa=P1^2;
[单片机]
<font color='red'>单片机</font>太阳能自动追光系统程序+电路+仿真
单片机与组态王通信协议
一、 通讯参数: 通讯参数包括数据位,停止位,波特率、校验方式。 数据位、停止位、波特率由单片机决定。组态王中的设定和单片机一致即可。校验方式参照 数据传输格式 中相关部分。 二、 数据传输格式: 格式1、组态王发送地址请求格式:(此时检验位为1) ENQ Sta EOT CRC 格式2、单片机应答地址格式:(此时检验位为0) ACK Sta ETX CRC 格式3、组态王读数据请求格式:(此时检验位为0) ENQ R DataTyp
[单片机]
单片机C语言程序设计:T0控制LED实现二进制计数
/* 名称:T0 控制 LED 实现二进制计数 说明:本例对按键的计数没有使用查 询法,没有使用外部中断函数,没有使用 定时或计数中断函数。而是启用了计数 器,连接在 T0 引脚的按键每次按下时, 会使计数寄存器的值递增,其值通过 LED 以二进制形式显示 */ #include reg51.h //主程序 void main() { TMOD=0x05;定时器 0 为计数器,工作方式 1,最大计数值 65535 TH0=0; //初值为 0 TL0=0; TR0=1; //启动定时器 while(1) { P1=TH0; } }
[单片机]
<font color='red'>单片机</font>C语言程序设计:T0控制LED实现二进制计数
美国德州仪器公司发布2017第三季度财务业绩与股东回报
德州仪器公司(TI)日前公布其第三季度财务报告,营业收入为41.2亿美元,净收入12.9亿美元,每股收益1.26美元。其中,每股收益包括未涵盖在公司原始计划中的2美分离散税收益。 关于公司业绩及股东回报,TI董事长、总裁兼首席执行官Rich Templeton作如下说明: “营业收入较去年同期增长12%。TI的产品在工业和汽车市场中仍然保持强劲的需求。 “在我们的核心业务中,较去年同期相比,模拟产品的营业收入增长16%,嵌入式处理产品的营业收入同比增长17 %。两项业务的营业毛利均有所提高。 “64.5%的毛利率体现了我们高质量的产品组合,以及高效的制造策略,包括300毫米(12英寸)模拟产品生产所具有的优势。
[嵌入式]
美国<font color='red'>德州仪器</font>公司发布2017第三季度财务业绩与股东回报
基于NEC单片机UPD78F0485单相复费率电表解决方案
基于 NEC单片机 UPD78F0485单相复费率电表解决方案 UPD78F0485单相复费率电表功能: 1.具有正、反向有功电能计量功能 2.LCD显示 3.能够计量各个不同时段的电量(两种费率,8个时段) 4.停电抄表功能 5.具有485和红外通讯功能(两路独立) 此电表中UPD78F0485主要用做LCD驱动器 其硬件及硬件结构图如图所示: UPD78F0485单相复费率电表产品特征: 1. 待机功耗低( 30uA) 2. MCU内置LCD驱动器 3. MCU内置RTC功能 该设计优势主要体现在以下几点: 1. 待机功耗低( 30uA) 2. MCU内置LCD驱动器,自适应5V/3V供电3.MCU内
[单片机]
基于NEC<font color='red'>单片机</font>UPD78F0485单相复费率电表解决方案
单片机10种软件滤波程序
假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1、限副滤波 #define A 10 char value; char filter() { char new_value; new_value = get_ad(); if ( ( new_value - value A ) || ( value - new_value A ) return value; return new_value; } 2、中位值滤波法 #define N 11 char filter() { char valu
[单片机]
μCOS-II在ATmega128单片机上的移植与开发
  引 言   本文介绍μC/OS-Ⅱ移植到ATMEL公司的8位微控制器ATmega128上的过程。所谓移植,就是使一个实时内核可以在某个微处理器上运行,并在此基础上进行驱动程序开发,使之成为一个实用的嵌入式系统。嵌入式系统包括了硬件和软件两部分,由于系统硬件资源的限制和实际应用的要求,应用系统对软件的基本要求是体积小,执行速度快,具有较好的裁减性和可移植性。   嵌入式系统的软件一般由嵌入式操作系统和应用软件组成,通过在操作系统之上开发应用软件,可以屏蔽掉很多底层硬件细节,使得应用程序调试方便,移植简单,易维护,同时开发周期也短。多数实时操作系统为用户提供一些标准的API函数,程序开发人员可以利用这些API函数进行应用程序
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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