- 本课程为精品课,您可以登录eeworld继续观看:
- MSP432产品培训(九) - MSP430和MSP432平台的代码移植(下)
- 登录
- 课程目录
- 相关资源
- 课程笔记
我们看到的是一个简单的示例
它用来说明在两个不同的平台上
它使用直接寄存器访问级别的代码调动
它到底有哪些区别
那可以看到实际上这一小段代码呢
非常类似
这一部分的代码它是用于配置它的A模块
以及启用中断的
那您可以发现 MSP430和MSP432的代码中的
大部分代码它都是相同的
这里唯一的区别呢
就是你启用中断的方式和进入低功耗模式的不同
那在MSP432上使用中断还有一个注意点
那这一点对于MSP430用户尤其重要
也就是说430上面的中断控制器 它是CPU的一部分
它是有CPU来直接进行中断管理的
因此 它不需要进行实际的一些配置
而在MSP432平台上
这个中断是通过NVIC这样的一个中段管理器
来进行中断管理的
这个NVIC是在一个单独的外设和中断之间的一个真实的模块
因此在432上 你需要增加一些操作步骤
后续我们会看到如何进行中断的控制
那实际上可以看到 在这个直接寄存器访问代码这个级别上
430和432上的代码是非常类似的
那现在您图上看到的呢
它是调用我们的DriverLib我们的驱动程序库来实现的
I2C的初始化的这样一个代码
那大家可以看到 在这部分代码上
我们430和432上的代码是百分百相同的
它区别的可能只是驱动程序库内部的区别
而对于API来说呢 它是完全一样的
也就是您可以直接复制黏贴的
那另外呢 现在图上看到的是CMSIS的一个支持
CMSIS是ARM公司提供的一个头文件的标准定义
那所有使用ARM公司所提供的内核的这些器件生产厂家
它都会提供一个基于CMSIS这个标准的一个标准化的头文件
那同样的针对430产品我们也提供这样的一个CMSIS的头文件
它叫msp432_cmsis.h
那在这个头文件当中是所有的数据类型的定义
以及我们内核相关的这些模块的定义
那这个头文件它主要是对一些专有功能和指令来进行支持的
另外 ARM公司它也提供库函数 比如我们DSP的函数库
和我们的Math的数学的函数库
那现在呢 我们快速地了解一下如何解决MSP430和MSP432
这两个平台当中的中断处理的不同
那你可以回想一下
之前我们讲过MSP432它是一种Cotex M4F的器件
因此在MSP432当中我们是通过NVIC
也就是一个嵌套矢量中断控制器来对我们的中断进行管理和控制的
那这个和MSP432这个平台中 由CPU来进行中断管理相比
它是一个非常巨大的进步
那NVIC呢 它能为您带来一个可配置的优先级中断
以及各种珍藏的功能
例如呢 NVIC它可以提供一个用于改善中断服务延迟情况的一个围列功能
那对于一个典型的Cotex M器件这样的一个模块呢
中断矢量表通常是在单独的文件中被定义为一个单独的数据结构的
那您可以看到在左侧这里呢
您可以为您的应用插入需要的中断处理程序
在默认的情况下 这种方法是支持MSP432所有的编译器和IDE的
例如CCS IAR或者cale
它在另一方面呢 传统的MSP430的方法呢
是使用编译矢量
那在这种情况下呢
您无需再定义整个的中断矢量表
事实上呢 您只需要利用编译矢量中断来指明
您实际使用到的矢量
您也可以使用变异矢量来跟踪一个未使用到的中断
那我们现在面对的难题呢
是我们要如何将MSP430的代码移植到MSP432上
特别是跟中断相关的这部分代码
那么好消息就是MSP430对这样两种定义方式都支持
那如果您要开始一个新的Cotex M的项目开发
那么您可以完全使用左侧的选项一来定义您的中断矢量表
不过您有现有MSP430的应用并想要再MSP432上来再次使用的话
或者呢 如果您想要开发MSP432的应用
并且希望在未来我们可能会把它移植到MSP430上
那么您可能会要想要来使用选项二
这两个选项是相互排斥的
如果您已经有了一份中断矢量表
那就请确保不要使用编译矢量
反置呢 也是这样
好 本业上显示的呢 就是MSP432的中断处理
我们之前呢 提到过一点
也就是430上的中断控制器呢 是CPU的一部分
因此呢 它不必须要进行实际的处置
而432上的NVIC模块呢 它是一个真实的模块
因此是需要用户来对它进行操作的
所以呢 在MSP432上的中断处理
您需要跟430相比呢需要增加一个操作步骤
那通常在MSP430的平台上呢
需要步骤一
而我们使用一个外设级别的中断触发器
然后呢 直接步骤三
使用中断的一个主使能控制的
那不过在MSP432上它就需要增加一个额外的步骤
也就是步骤二
也就是将单独的模块中断来映射到NVIC表上
从而 它可以在NVIC这个模块当中来启动
这个相关的外设的中断
那这个图中突出显示的这个就是步骤二
那现在图片上显示的呢
是如何通过寄存器级别的直接访问
来使能一个外设的中断
需要三条代码
那同样的呢 现在图上显示的呢
是如何通过调用我们的外设驱动函数库
来实现我们一个外设的中断
那同样的 它需要调动三个API
在432上呢要注意增加步骤二
我们要使能NVIC当中的外设的中断模块
那最后我还需要提一点的呢
是大家一定要注意我们主的那个应用程序
我们的主代码是一个高级别的一个软件
它是一个抽象的软件
它十分依赖于自身的架构
那如果开发人员使用一个恰当的软件开发技术
和足够的抽象层的话呢
那么MSP430和MSP432平台间的应用层的代码呢
它不应该有过多的差别
不过一定需要牢记数据类型的兼容性
为了避免在16位和32位的架构上误用到数据类型
比如说 同样的int这样的数据类型定义呢
它可能会有不一样的结果
所以我们一定推荐大家使用一个显示的C99类型的数据定义
好 本次课程就到此为止
非常感谢您的观看
课程介绍
共计13课时,2小时30分32秒
猜你喜欢
换一换
推荐帖子
- 用手机充电器给MCU供电和用电池给供电有什么区别?
- 我在用手机充电器5V1A给MCU供电测试程序发现工作不正常,但用3.7V电池供电就正常工作, 请问:是不是有交流干扰还是其他原因?...
- qinkaiabc 微控制器 MCU
- VDSP汇编出来的代码效率很低?
- 各位大牛觉得VDSP汇编出来的代码效率怎么样啊? 怎么我觉得C语言汇编出来的代码效率很低,尽管使能了编译器优化,但像并行指令很少体现啊,甚至连循环零开销也做不到(并没有超过两层循环),莫非必须要自己写汇编? 听说CCS的C代码汇编效率能达到90%?...
- clj2004000 DSP 与 ARM 处理器
- 降压—升压电源设计中降压控制器的使用
- 电子电路通常都工作在正稳压输出电压下,而这些电压一般都是由降压稳压器来提供的。如果同时还需要负输出电压,那么在降压—升压拓扑中就可以配置相同的降压控制器。负输出电压降压—升压有时称之为负反向,其工作占空比为 50%,可提供相当于输入电压但极性相反的输出电压。其可以随着输入电压的波动调节占空比,以“降压”或“升压”输出电压来维持稳压。 图 1 显示了一款精简型降压—升压电路,以及电感上出现的开关...
- 莫妮卡 模拟与混合信号
- 关于2812和液晶的问题
- 有没有人用过2812在液晶屏上显示实时波形阿,我现在用的液晶驱动芯片是sed1335,现在除了一个问题就是我在划线的过程中,屏幕会什么也不显示,直到划线结束,才能显示,在感官上就有闪烁的感觉,同时在划线时我在显示一区显示的汉字也消失,屏幕上什么都没有,我想问问大家,这到底是液晶的问题,还是软件上要做什么工作吗?请各位大虾帮帮忙啊。...
- ATT001 微控制器 MCU