MSP432产品培训(九)-MSP430和MSP432平台的代码移植(下)
Loading the player...
将在30s后自动为您播放下一课程
我们看到的是一个简单的示例 它用来说明在两个不同的平台上 它使用直接寄存器访问级别的代码调动 它到底有哪些区别 那可以看到实际上这一小段代码呢 非常类似 这一部分的代码 它是用于配置它的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类型的数据定义 好 本次课程就到此为止 非常感谢您的观看
我们看到的是一个简单的示例 它用来说明在两个不同的平台上 它使用直接寄存器访问级别的代码调动 它到底有哪些区别 那可以看到实际上这一小段代码呢 非常类似 这一部分的代码 它是用于配置它的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类型的数据定义 好 本次课程就到此为止 非常感谢您的观看
我们看到的是一个简单的示例
它用来说明在两个不同的平台上
它使用直接寄存器访问级别的代码调动
它到底有哪些区别
那可以看到实际上这一小段代码呢
非常类似
这一部分的代码 它是用于配置它的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类型的数据定义
好 本次课程就到此为止
非常感谢您的观看
我们看到的是一个简单的示例 它用来说明在两个不同的平台上 它使用直接寄存器访问级别的代码调动 它到底有哪些区别 那可以看到实际上这一小段代码呢 非常类似 这一部分的代码 它是用于配置它的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类型的数据定义 好 本次课程就到此为止 非常感谢您的观看
我们看到的是一个简单的示例
它用来说明在两个不同的平台上
它使用直接寄存器访问级别的代码调动
它到底有哪些区别
那可以看到实际上这一小段代码呢
非常类似
这一部分的代码 它是用于配置它的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类型的数据定义
好 本次课程就到此为止
非常感谢您的观看
视频报错
手机看
扫码用手机观看
收藏本课程
视频简介
MSP432产品培训(九)-MSP430和MSP432平台的代码移植(下)
所属课程:MSP432产品培训
发布时间:2015.08.18
视频集数:13
本节视频时长:00:08:31
MSP432是TI的MSP430家族新增加的32位产品系列,采用ARM-CortexM4F内核,专注于低功耗和通用微控制器领域。在低功耗和高性能以及增强型外设方面均有突出表现。本次MSP432培训共分12个章节,详细介绍了产品的内核,架构和各种增强型外设,配合小练习,帮助用户迅速了解MSP432产品的性能,快速掌握MSP432产品的使用。
//=$v1;?>
//=$v['id']?>//=$v['down_category']?>//=$v['link']?>//=$v['is_dl']?>//=$v['link']?>//=$v['name']?>//=$v['name']?>
//=$v['id']?>//=$v['down_category']?>//=$v['path']?>//=$v['is_dl']?>//=$v['path']?>//=$v['name']?>//=$v['name']?>
////=count($lesson['bbsinfo'])?>
//=$elink?>//=$elink?>//=$tags[0]?>//=$tags[0]?>//=$elink?>//= $elink?>//=$tags[1]?>//=$tags[1]?>
//=$lesson['bbs'];?>
//=count($lesson['bbsinfo'])?>