- 本课程为精品课,您可以登录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秒
猜你喜欢
换一换
推荐帖子
- CCS 5程序 调试的一些方法
- 用CCS 5 单步 调试时,如果遇到__delay_cycles(782000);怎么直接跳出,这个好像不是函数??? 如果是for循环语句又怎么跳出?? 还有什么调试技巧吗??...
- s364147694 微控制器 MCU
- 如何在ram中调试和运行程序啊?
- lm3s9b92的芯片我参照论坛里面的帖子,linker没动,startup.s也没动。就添加了一个ini脚本文件,结果还是不行。脚本文件内容如下:Load blinky.AXF incrementalFUNC void Setup (void) { _WDWORD(0xE000ED08,0x20000000); SP = _RDWORD(0x20000000);&...
- 慢慢来 微控制器 MCU
- 【晒经典】ISD4004语言录放模块
- 本帖最后由 dontium 于 2015-1-23 13:10 编辑 模块的核心是ISD4004语音芯片,其引脚如图5所示。ISD4004语音芯片采用CMOS技术,内含晶体振荡器、防混叠滤波器、平滑滤波器、自动静噪、音频功率放大器及高密度多电平闪烁存储阵列等,因此只需很少的外围器件就可构成一个完整的声音录放系统。ISD4004语音芯片带SPI接口,录放音时间长,音质好,不需A/D转换,可...
- 37°男人 模拟与混合信号
- TI TMS320F28335的EPWM如何软件强制开关状态
- 有时需要用到强制脉宽调制(PWM)的脉冲开关状态这种操作,比如封锁脉冲以停止电力电子开关管工作;在上电的初始时刻,经常也需要对PWM状态进行一种强制的初始化,比如强制高、强制低等等;一些特殊的PWM算法,如果不是基于三角载波比较法的,如一些SHEPWM、滞环PWM方法等等,也需要直接输出PWM脉冲的状态,此时不能使用比较值与定时器的直接比较来得到开关状态,而且在需要的开关状态已知情况下,直接强制P...
- Aguilera 微控制器 MCU