MSP430学习笔记-架构篇

2023-11-06

最近开始接触MSP430单片机了,打算先把手册结合着书看一遍,之后用来做一个小玩意儿。学习笔记就按照学习进度来更新吧,也算做个备忘,有什么东西不记得了可以来翻一翻,今天我们来聊聊MSP430架构。

一、MSP430简介

MSP430是由德州仪器推出的一种16位单片机,这种16位单片机最大的特色是极低的功耗,适合用于电池供电等电量有限但又追求长时间工作的设备,比如时钟、各种环境温湿度传感装置等。具体详细信息可以参考德州仪器家的官方数据手册,我们这里主要讨论一下架构问题。

二、MSP430架构框图解析

MSP430架构框图

 

如上为MSP430的架构框图。最左上角是时钟模块(Clock System),负责为系统的其他模块运行提供时钟信号,MSP430总共有三种时钟信号,分别为:ACLK(auxiliary clock)、SMCLK(sub main clock)、MCL(mian clock)。

在时钟模块的下方是CPU模块(RISC CPU 16-Bit),其通过16位数据总线以及16位地址总线(部分型号搭载的是CPUX,其地址总线为20位)访问片内的其他外设并进行数据传输。MSP430的CPU为采用精简指令集(RISC)的16位架构CPU,由于支持16位地址总线,其最大支持的寻址空间为64KB。为了拓展寻址空间,部分的MSP430采用了CPUX,其将内部寄存器与地址总线拓展为了20位,因此支持1MB的寻址空间,算术逻辑单元(ALU)的运算位数支持也从16位拓展到了20位,CPUX可以看作16位CPU的增强版。

总线上从左往右依次连接了:JTAG/Debug接口,用于进行在线调试;Flash/ROM,用于存储程序;Watchdog,用于芯片异常复位或者当普通定时器使用;其他外设。值得注意的是,MSP430部分片内外设为8位外设,当访问8位外设时,通过数据总线上的总线转换器(Bus Conv)将16位数据总线转换位8位数据总线。

三、存储空间结构与地址空间

MSP430采用的是冯诺依曼架构,故中断向量表、ROM/FLASH、RAM、硬件外设以及特殊功能寄存器共用一套地址空间,它们在地址空间上的分布如下图所示。

地址空间分配

 

不同型号芯片的地址空间分布可能会有部分差异,不过基本是如上图这样,具体要查阅各型号的数据手册。

从最低的0x00到0x0F地址空间用于指向特殊功能寄存器(SFR),只支持字节寻址(即一个地址对应8位的数据,从地址中读数据一次读8位)。

从0x10到0xFF地址空间是8位外设的地址空间,同样只支持字节为单位访问。再往上的0x0100到0x01FF为16位外设的地址,只支持字访问(即一个地址对应两字节数据,从地址中取数据一次取16位)。

从0x01FF往上的地址空间对于按字节寻址与按字寻址这两种寻址方式都支持,主要是对应各种存储芯片。比如0x0200往上一般对应的是RAM的存储地址,从0xFFFF往下一般对应的是ROM/FLASH存储地址,其中在ROM/FLASH里还存储了中断向量表,它永远位于从0xFFFF到0xFFE0这段空间(部分型号为0xFFFF到0xFFC0)。部分型号采用的CPUX,支持64KB以上的寻址空间,故在0xFFFF往上还有一段空间用于分配给ROM/FLASH。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MSP430学习笔记-架构篇 的相关文章

  • Android 上原生的自修改代码

    我正在尝试在 Android 上制作一些自修改本机代码并在模拟器中运行它 我的示例基于 android ndk 中的 Hello JNI 示例 它看起来像这样 define NOPE LENGTH 4 typedef void FUNC v
  • arm64 汇编:LDP 与 LD4 执行时间

    假设我想用连续内存位置的值加载四个连续的 aarch64 向量寄存器 一种方法是 ldp q0 q1 x0 ldp q2 q3 x0 32 根据ARM优化指南 https static docs arm com uan0016 a cort
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • 将结构体偏移属性赋予汇编器

    如何将 C 结构体的偏移量发送到汇编代码 例如 在我的 C 代码中 typedef struct unsigned int a unsigned int b CMyStruct 我向 ASM 函数发送一个 CMyStruct 结构的指针 假
  • ARM Linux 如何模拟 PTE 的脏位、访问位和文件位?

    As per pgtable 2 level h https git kernel org cgit linux kernel git torvalds linux git tree arch arm include asm pgtable
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 在 ARM 处理器上执行存储在外部 SPI 闪存中的程序

    我有一个 ARM 处理器 能够与外部闪存芯片连接 写入芯片的是为 ARM 架构编译的程序 可供执行 我需要知道如何将这些数据从外部闪存获取到 ARM 处理器上以供执行 我可以提前运行某种复制例程 将数据复制到可执行内存空间吗 我想我可以 但
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 将 GCC 内联汇编与采用立即值的指令结合使用

    问题 我正在为 ARM Cortex M3 处理器开发定制操作系统 为了与我的内核交互 用户线程必须生成 SuperVisor Call SVC 指令 以前称为 SWI 用于软件中断 该指令在ARM ARM中的定义是 这意味着该指令需要即时
  • 读取和打印手臂组件中的字符串

    我正在使用 ARMSim 刚刚开始学习汇编 所以如果我看起来一无所知 请原谅我 但我正在尝试从输入文件中读取字符串 然后将其打印到输出屏幕 到目前为止我有 equ SWI Open 0x66 open a file equ SWI Clos
  • 源和目标具有不同的 EABI 版本

    我正在尝试使用 ARM 工具链编译 so 文件 但是我不断收到这个错误 错误 源对象的 EABI 版本为 0 但目标对象的 EABI 版本为 5 我无法更改工具链中的任何内容 因为我必须使用给定的工具链 我以前从未见过这个错误 我使用了这个
  • 有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 进行编译?

    如果有很多浮点运算正在进行 Apple 建议针对 ARM 进行编译 而不是针对拇指进行编译 我的整个应用程序几乎是一个大型浮点运算 iOS 应用程序开发工作流程指南中是这样说的 iOS 设备支持两种指令集 ARM 和 Thumb Xcode
  • DS-5:什么是 FVP、RTSM、基础模型、AEM 模型、快速模型、CADI?

    DS 5 模拟器使用了很多术语 如 FVP RTSM 快速模型 基础模型 AEM 模型 CADI Arm的文档中提供的解释不是很清楚 这些术语的含义是什么 作为 DS 5 的最终用户我应该关心哪些术语 Model 软件模拟的行业术语 就 A
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • AOSP 的“午餐”组合是什么意思?我需要选择什么?

    我是 Android 设备 ROM 开发的新手 无论如何 我现在正在为具有 64 位处理器的中国设备构建 AOSP 我按照 source android com 上的菜单进行操作 当我运行 午餐 命令时 终端显示 午餐菜单 选择一个组合 我
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • 使用 NEON 内在函数除以浮点数

    我当时正在处理四个像素的图像 这是在armv7对于 Android 应用程序 我想分一个float32x4 t向量由另一个向量组成 但其中的数字与大约不同0 7 to 3 85 在我看来 除法的唯一方法是使用右移 但这是针对一个数字2 n
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 什么是遗留中断?

    我正在开发一个项目 试图弄清楚 ARM 架构的全局中断控制器中如何处理中断 我正在使用 pl390 中断控制器 我看到有一条线被称为传统中断 它绕过了分配器逻辑 假设有 2 个中断可以被编程为传统中断 任何人都可以帮助解释一下什么是遗留中断

随机推荐

  • jenkins生成html测试报告和新增用户

    这里仅记录一下踩过的坑 1 新增用户 2 html报告的生成 构建报错1 jenkinsModuleNotFoundError No module named pytest html 或者报错 jenkins 执行提示 pytest err
  • 程序员就业和发展前景,一文带你了解

    程序员 英文是 code worker 顾名思义就是计算机程序的作者 它通常指从事计算机软件开发的人员 当然也包括用计算机语言编写程序来进行各种信息处理的人 现在软件行业中 程序员属于技术含量较高的一个群体 程序员就业和发展前景也是在众多行
  • 微信小程序-伸缩性最强的table组件

    微信小程序 伸缩性最强的table组件 微信小程序很大的一个诟病之一就是没有table组件 小程序中正常显示表格依然是令人头痛的问题 下面使用flex布局模拟现实一个小程序的table组件 支持内容过多滑动 设置单元格宽度等 1 效果图 微
  • Java---System类,RunTime类,Random类

    System类 系统类 主要获取系统的属性数据 还有标准的输入 输出及错误输出流 主要介绍一些常用的方法 1 数组拷贝 arraycopy Object src int srcPos Object dest int destPos int
  • open3d显示rope3d标注内容

    open3d是我发现比较好用且功能全面的3D库 下面演示显示rope3d的标注内容 其他调用的库有pandaset geometry等 usr bin env python3 coding utf 8 import pcl import o
  • 关于联想G480BIOS中的设置

    由于一段时间对笔记本电脑中的BIOS设置很感兴趣 故在网上搜索一下 找到这篇博客 为了以后那天能用上就先转载一下 以备后用 地址为 关于G480BIOS设置
  • 微信小程序登录问题--第一次登录失败刷新再次登录成功问题

    出现这样问题都是先获取用户信息wx getUserInfo encryptedData与iv 再进行登录wx login 获取code code是用来生成session key用来解密encryptedData与iv的 所以等你先获取用户e
  • Java实现二阶魔方旋转

    魔方可以对它的6个面自由旋转 我们来操作一个2阶魔方 如图1所示 为了描述方便 我们为它建立了坐标系 各个面的初始状态如下 x轴正向 绿 x轴反向 蓝 y轴正向 红 y轴反向 橙 z轴正向 白 z轴反向 黄 假设我们规定 只能对该魔方进行3
  • linux延迟函数sleep

    include
  • 不用密码卸载symantec

    之前在某公司实习的时候 需要安装这个软件 后面尝试了很多网上的方法 都无法卸载掉 最后还是使用了杀手锏 官方的卸载软件cleanwipe 按照步骤 很简单的就卸载掉了 这里附上链接 最后面的附件可以下载 Download the Clean
  • 滑动拼图和文字点选两种类型的验证码

    前言 行为验证码通过用户的操作来完成验证 常见的行为验证码有拖动式和点触式 拖动式验证就是根据图片显示 将指定的图形拖动到指定位置完成验证 而点触式验证码就是通过鼠标点击出示例中出现的图形完成验证 行为验证码应用 今天推荐一款非常优秀的行为
  • DOM操作-上移下移

    HTML ul li span 啦啦啦啦 span i 1 i li ul
  • anaconda prompt 常用命令

    1 查看已安装的包 conda list 2 更新所有包 conda upgrade all 3 安装包 conda install package name 4 删除包 conda remove package name 5 更新包 co
  • 以太坊学习

    ubuntu 安装go 自行百度 下载ethererum客户端 github 将ethererum 解压放在GOPATH下 进入 ethererum文件夹 执行 make geth 或者make all 可能会报错 原因 所下载的库依赖有官
  • java中的数据类型转换,常量类型

    文章目录 一 隐式转换 二 强制转换 三 java中常量优化机制 四 常量类型 一 隐式转换 所谓隐式转换 就是将数据类型中 取值范围小的数据 给取值范围大的类型数据赋值 可以直接赋值 首先 看一段代码 int a 10 double b
  • IMAGE INPAINTING

    IMAGE INPAINTING We need get good Int i j I t n i j Here using Laplacian Operator http www cnblogs com xfzhang archive 2
  • Java中访问控制符

    说明 Java中提供了四种访问控制符 分别是private default protected和public 其访问控制级别从小到大如图所示 1 private 当前类访问权限 用private修饰的变量或方法只能被该类自身所访问和修改 而
  • 虚拟机自动重启问题

    性能测试一般要运行好几天不能关机的 万一遇到系统重启之前跑的可能都前功尽弃了 真的是很头疼的 同样 如果是运行中的项目服务遇到这种情况给用户的使用感受也是特别差的 所以 我会修改系统的自动重新启动设置 Windows Server自动重启的
  • tomcat默认端口号(三个tomcat端口号)

    tomcat默认端口号 三个tomcat端口号 2020 05 08 10 43 21 共10个回答 Tomcat的默认端口号是多少 您好 提问者 Tomcat的默认端口号是 8080 weblogic的默认端口号是 7001 tomcat
  • MSP430学习笔记-架构篇

    最近开始接触MSP430单片机了 打算先把手册结合着书看一遍 之后用来做一个小玩意儿 学习笔记就按照学习进度来更新吧 也算做个备忘 有什么东西不记得了可以来翻一翻 今天我们来聊聊MSP430架构 一 MSP430简介 MSP430是由德州仪