首页资源分类嵌入式开发单片机 > 《MCU工程师炼成记(丁武锋)》高清书签完整中文版

《MCU工程师炼成记(丁武锋)》高清书签完整中文版

已有 456470个资源

下载专区

上传者其他资源

文档信息举报收藏

标    签: MSP430

分    享:

文档简介

大多数电子及相关专业的学生在从学生到工程师的这个角色转换的过程中是比较盲目的。正是因为看准了这点,我们才下决心用了一年多的时间编写了《mcu工程师炼成记:我和msp430单片机》。我们希望能够通过把已经走过这段路的工程师们的经验总结出来以飨读者,这样他们就能够少走很多弯路。

《mcu工程师炼成记:我和msp430单片机》和以往的单片机类书籍有所不同。虽然它还是一本以单片机技术为主线的书,但是本书对于读者在从学生转变为工程师的过程中碰到的各种问题都给出了一定的解答。书中从msp430单片机的架构、开发环境、小实验、项目一直到职场经验的分享,凝聚了太多人的心血和汗水。读者在阅读本书时,可以根据自己的需要,边动手、边阅读,从实践中汲取技术经验并加深对书中内容的理解。

文档预览

E"I 噩læ 1I'.RÆ 电子及相关专业大学生成长为合格 MCU工程师的权威指南。 以 MSP430单片机为例的技术成长路线,辅以资深工程师的职场攻醋 。 从小实验到大项目,从技术到职场,内容由浅入深,丰富全面。 单片机与嵌入式 EE。 我和 MSP430单片机 丁武锋庄严周春阳编著 φ 旦旦 ZAM£ q 。 d v 毡P 回 去就33 联合出版 这是一本真正出自职业工程师"内心"的书,不仅是技术层面,也是为职场发展 和人生追求{参见本书附录部分} 。 书中 MSP430 的内容不像原版技术文挡那样"经典 而枯燥",但对初学者来说更实用:从一些有趣、好玩的东西开始做起 , 在做的过程 中学习 M CU 基础知识和外设原理 , 逐步进 阶 。 同时也演绎了 一 个"菜鸟"从兴趣爱好 开始 , 潜移默化成为高手的过程。 只要你喜欢了,结果就顺理成章了 。 一一 沈建华华东师范大学计算机系副教握 、 两绵研究所副所长 在这个全民皆商业的中国,谁会关注电子工程师个人的成长经历?连老伴儿都经 常笑称 : 连自己的孩子都不愿意昕我讲。 然而 , 我很欣慰地看到仍然有一批批热爱电 子的学生,走出校门 , 迈入电子工程师的大门 。 他们朝气蓬勃,乐于通过线上、线下 等各种渠道钻研技术 。 但在"信息爆炸"的时代,真正能够深入浅出、充分考虑初学 者感受的东西并不多见,能够沙里淘金找到这样的东西就更难了,这是令初学者最感 困惑和无奈的 。 很高兴能够有这么一本基于技术,同时兼顾学习方法和职场生存经验 的书出现 , 尤其是chunyang 深入浅出的职场经历,都是多年经验的积累,对广大初学 者有很大的参考意义 。 一一 maychang EEWORlD 网友 拿到书稿时,我很惊诧于作者的很多想法和我一致 。 这本书从实际案例出发 , 从 单片机的技术引入到职场的发展,由浅入深地勾勒出一位单片机 工程师的 成长轨迹 。 这不是一本说教的书 , 基于作者对 M CU 的 理解, 并从作者自身的亲身经历,项目解 析、调研、关键技术实现以及项目最后的文档来说明了项目的整个过程,读来非常亲 切。 而对MSP430的选择 , 则让单片机的入门变得非常容易 。 最后的附录部分绝对是本书的亮点,大胆立意是大多数人未曾触及的 , 也是市面 上缺乏的,我相信能够给有志于成为电子工程师的军轻人很多启发 。 一一丁京桂 TI华东区徽控制器技术支持经理 ,扩他2主\ ,、童…- 、 、 ' 号 、ξ白 命 / l gm:(mwm 附侃 购布Il\t量 : (创0)68326却4 8837部49 68995259 ~摘I.Ml: (010)88379604 | 醉毗… hzm创ia.com.cn I 格.IØI筒: www.hzbook .com I 网上购哨: www.china-pub.com a圃·‘ ,、 lyL'(Q. ,、 大多数电子及相关专业的学生在从学生到工 程师的这个角色转换的过程中是比较盲目的。正 是因为看准了这点,我们才下决心用了一年多的 时间编写了本书。我们希望能够通过把已经走过 这段路的工程师们的经验总结出来以飨读者,这 样他们就能够少走很多弯路。 本书和以往的单片机类书籍有所不同。虽然 它还是一本以单片机技术为主线的书,但是本书 对于读者在从学生转变为工程师的过程中碰到的 各种问题都给出了一定的解答。书中从 MSP430 单片机的架构、开发环境、小实验、项目一直到 职场经验的分享,凝聚了太多人的心血和汗水。 读者在阅读本书时,可以根据自己的需要,边动 手、边阅读,从实践中汲取技术经验并加深对书 中内容的理解。 4静争éÕ tl 丁武锋 EEWORLD社区资深版主,网名莫恩, 现为某公司资深硬件工程师。主持参与过大量的 MSP430 、 TI DSP项目。在社区深受广大网友的 喜爱。 庄严 EEWORLD社区资深版主,网名 WS甘,现 为某国际著名 IC 公司系统工程师。参加过许多科 技创新和省部级、国家级比赛,多次获奖。长期 在社区论坛担任 MSP430技术支持工作,深得广 大网友的喜爱。 周春阳 EEWORLD 社区资深版主,网名 chunyang ,在各大行业网站社区均有较强的影响 力。资深 MCU 士程师,现在自己创业,主要为客 户提供基于 MCU技术开发和咨询服务。 读者可加微信公众帐号 与作者互动。 图书在版编目 (CIP) 数据 MCU 工程师炼成记:我和 MSP430 单片机/丁武锋,庄严,周春阳编著.一北京:机械工业出版社, 2013.8 (2013.12 重印) ISBN 978-7斗 11-43862-5 I. M… II ①丁… ②庄… ③周… III 单片微型计算机 IV. TP368.1 中国版本图书馆 CIP 数据核字 (2013 )第 207249 号 版权所有·侵权必究 封底无防伪标均为盗版 本书法律顾问 北京市展达律师事务所 机械工丛k 出版社(北京市西城区百万庄大街 22 号 责任编辑:陈佳援 三河市杨庄长鸣印刷装订厂印刷 2013 年 12 月第 1 版第 2 次印刷 186mmx240mm.19.5 印张 标准书号: ISBN 978-7-111-43862-5 定价: 59.00 元 邮政编码 100037 ) 凡购本书,如有缺页、倒页、脱页,由本社发行部调换 客服热线 (010) 88378991 88361066 投稿热线: (010) 88379604 购书热线: ( 010 ) 68326294 88379649 68995259 读者信箱 hzjsj@hzbook.com 目。首 如何学习、掌握单片机技术以及如何成为一名合格的电子工程师是广大初学者非常关心 的事情,这方面的书籍、文章其实也不算少,但在"信息爆炸"的时代,真正有效的东西却 并不多见,这也是令初学者最感困惑和无奈的事情。 参与这本书算是机缘巧合。在一次电话中向农和我谈起打算推出一本专门面向初学者的 单片机入门指导书,内容方面同时兼顾技术、入门方法以及给新人提供一些初步的职场生存 建议等。以她的想法,这本书并未打算聘请资深的技术专家来专门写作,而是由三个不同阶 段的"过来人"跟初学者们交流一下自己的成长经验。书的内容上不求高深,只求真实、易 懂、接地气,重点虽然仍旧放在让读者掌握一门单片机开发技术上,但同时也兼顾可以复制 的学习方法和职场生存经验,这是一种少有的尝试,不可谓不大胆。 在单片机的入门学习平台方面,本书选择了 TI 的 MSP430 单片机,除了单片机本身的 必要技术资料之外,本书的重点在于讲解如何从零开始逐步理解单片机的基本结构和具体的 编程方法以及电路设计方法。初学者们可以一步步地照着书中内容学习和操作,在认真学习 完本书内容后,应该可以大致具备初步的单片机应用设计能力。同时,本书给初学者特别是 那些即将走进职场的高校学生们提供了一些基本的职场生存建议,希望可以帮助大家更快、更 好地适应自己的工作,并成为一名合格的电子工程师,这就是我们编写本书的终极目标。 本书总体上分为三部分。第一部分主要通过动手引导用户掌握 MSP430 单片机及其外设 的使用。这部分主要由一些入门级的实验组成,让读者通过学习这些实验学会 MSP430 单片 机的基本开发方式。第二部分主要通过具体项目锻炼读者的工程技能,考虑到一部分读者是 学生,第 8 章用一章的内容帮助学生读者分析电赛题目,分享电赛经验。最后,三位作者分 别从自己的角度讲了他们对 MCU 工程师修炼的看法。因为这部分内容相对独立,而且基本 上算是他们的"一家之言",更像是三篇独立的文章,我们将这作为第三部分内容放在了附 录里。相信其中的真知灼见必定会引起读者的共鸣。 囡时间和精力的关系,本书的撰写和完稿有些匆忙,未尽及错漏之处敬请谅解,同时欢 迎大家在 EEWORLD 论坛上继续展开讨论与交流,内容不限于这本书,不限于 MSP430 。 周春阳 2013 年 6 月 推荐序 得知这本书完稿的消息时,我突然有些恍惚,我的记忆还停留在论坛里看到大家恭喜网 友 "Open82977352" 大婚的时候,印象中那个正忙于准备电赛的大学生,怎么不经意间就已 为人夫了呢?这几年里,在 EEWORLD 论坛里跟着众多网友一起成长,目睹了大家的喜 怒哀乐,看到了太多的讨论,从一个个技术的细节问题,到工作中的不快,或是对前途的 迷茫。 相较之下,那些在读的电子相关专业的大学生,还有刚走出校门、在工作岗位上发现自 已之前的一切都要"归零"的"准"工程师们,他们是困惑最多的一群人,或迷茫于技术, 或迷茫于前途。作为过来人,这个过程于我是那么熟悉。记得自已刚入行时完全是两眼一抹 黑,作为新人,欠缺的不只是专业知识,还有职场上的常识。同事们总是忙于自己的工作, 专业书籍总是和现实很远,课堂上全是过时的教条,让人无所适从。于是全靠自己的摸索, 一个跟头,一点明白。 实事求是地讲,"电子工程师"并不是现今人们眼中的"好职业",但当你或为真心喜 欢,或为稻粱谋,而选择走上这条路时,所能做的就只能是努力让自己成为一名真正的电子 工程师。这条路究竟该如何走?于是我萌生出一个想法,能不能系统地编写一本书,一本能 陪伴学生走上电子工程师之路的书。 当我把这个想法和版主 "chunyang" 沟通后,内心更加笃定。然而,落实下来很快就发 现,这么大一个话题,很容易陷入泛泛之谈。如果聚焦于一个具体的点上,也许就可以窥一 斑而见全豹。于是我们选择从"群众基础"最广泛的单片机入手,然后又从中选择了极易上 手、开发板易获得的 MSP430 作为具体的实践对象。按照我们的设想,这本书会从技术入 门、工作技术技能的提升、电子工程师的职场守则这三部分,把电子工程师的成长线路清晰 地勾勒出来。 这本书的作者团队是我眼中的梦幻组合,也让我对自己做的这件事充满信心。也许你不 知道庄严,但他的网名 "WSTT" 也算是大名鼎鼎,很多 EEWO也D 的网友都很认他,因为 他喜欢分享,而且也善于分享,对于别人的问题总是及时回复,是一个典型的阳光大男孩。 作为一名在读的研究生, "\VSTT" 承担了大部分的基础性工作。当大家看到这本书时,他已 经告别了自己的学生生涯,成为一家著名国际芯片企业的系统工程师。我不知道庄严今后的 路会如何,但他的成长过程本身就是一个很好的范例,展示了如何从一名在校大学生成为电 子工程师。 IV EEWORLD 论坛里的老网友对"莫恩"这个名字都不会陌生,他就是丁武锋,前几年 分享了很多自己的原创设计。他是那种典型的从小就组装收音机,看着《无线电爱好者》在 南京的那个氛围里长大的。"莫恩"成为电子工程师是一种必然,同时也是一种偶然,他也 是一个幸运的人,因为他让自己的爱好成为职业。他有许许多多的想法,有着技术人员的严 谨,他是 MSP430 狂热的爱好者。"莫恩"和 "WSTT" 一起完成了书中的所有实验和写作, 并现身说法如何成为一名出色的 MCU 系统开发工程师。 与莫恩类似,版主 "chunyang" 也是从小就折腾收音机、电视,但他是中国最早一批在 论坛里出没的电子工程师。之所以请版主 "chunyang" 来,不是因为他技术高超,而是在于 他的热心,在于他与一般的电子工程师不同,有一颗更加人文、更注重精神层面的心,作为 一名导师是再合适不过了。所谓导师者,重要的是明白如何导之,而且愿意导之。我们有共 同的看法,即技术只是一个方面,成为一名真正的电子工程师,重要的一点是要学会如何做 人,电子工程师有自己的轨迹。在这方面, "chunyang" 则用自己的成长经历和多年来面对 论坛里年青网友们碰到的各种问题,告诉我们他的体会。我很欣赏其中的一点,即"做有品 位的工程师",工作多年的人都会心领神会。 关于本书技术之外的部分,我不奢求大家能完全理解并吸收,但至少能明白这番苦心, 并在今后能不时地翻出来看看。技术的东西终会过时,而这些则可以陪你渡过整个职业生 涯,而这也是本书不同于其他技术类书籍的重要之处。我不知道看到这本书的人,最终有多 少人会成为真正的电子工程师。但是我相信,您一定会从中收获些什么,因为我们是真正用 心在做。 这是一个崇尚成功的社会,但大多数人注定和我一样,最终只能是一个普通的人,远远 地欣赏乔布斯、马化腾的成功。但是普通并不意味着不幸福,普通并不意味着没有理想和追 求。当我们达到自己的目标时,一样得喜悦,一样享受那个过程。 我很喜欢这样一群人,他们有时会自嘲为"电工",他们默默地支撑着中国电子行业。 没有互联网行业的眩目,没有垄断行业的高薪,但是他们可爱、重感情、更纯净,在全民皆 商业的中国,肯静下心来钻研技术。他们的努力在未来一定会得到回报,因为我相信某些不 公平只是暂时的,因为中国需要他们,他们使我们的生活更美好。 感谢 Triton zhang ,他是 EEWORLD 的一位网友,但同时也是 TI 公司的 FAE 。他利用自 己的假期帮我们审校书稿。感谢三位作者的家人,允许他们牺牲了陪伴家人的时间来完成这 样一本书。感谢汤汤,这位 EEWORLD 论坛人人皆知的 "SOSO 姐"在怀着宝宝时组织了这 本书的作者团,当这本书即将出版时她可爱的女儿已经快满周岁了。当然还要感谢机械工业 出版社华章公司的编辑们,是他们让我们的想法变为现实。 感谢所有翻阅这本书的人,如有任何意见和问题,欢迎到 EEWO也D 论坛( bbs. eeworld.com.cn )来讨论。 EEWORLD 总编向农 2013 年 6 月 目 录 推荐序 前言 3.5 低功耗模式………………… 29 3.6 中断系统…………………… 33 3.7 系统复位和初始化………… ..35 第一部分顽备篇 第 1 章单片机改变世界………… .2 1.1 把iPhone变成一台心电图仪…… .2 1.2 成为改变世界的单片机工程师… '8 第2章改变世界从 MSP430 开始…………………….. 11 2.1 MSP430系列微控制器的发展 和应用" 2.2 MSP430系列微控制器产品 . 1 2 概况……..................... 第3章吃透 MSP430单片机的 构架… .......................19 3.1 MSP430总体构架…………… .19 3.2 CPU结构和特点…………… ..20 3.3 存储空结构和地址空间……… .21 3.4 时钟系统…………………… 22 3.4.1 时钟源………………… ..22 3.4.2 时钟信号……………… ..25 3.4.3 基本时钟模块寄存器……… 26 3.4.4 时钟源的配置与使用……… 28 第4章熟悉 MSP430开发工具… .37 4.1 CCS集成开发环境介绍……… .37 4. 1.1 CCS基本使用流程……… ..37 4. 1.2 资源库MSP430Ware ……… .48 4. 1.3 图形化外设配置工具 Grace 使用介绍……..........… .49 4.1 .4 ULP Advisor低功耗应用代码 分析工具介绍…………… .53 4.2 MSP430集成开发环境 IAR Embedded Workbench 介绍…… '58 第 5章熟悉硬件平台: LaunchPad …………… ..67 5.1 LaunchPad开发板介绍……… ..67 5.2 FRAM开发板介绍…………… 69 第6章解自~MSP430单片机…… 71 6.1 数字vo 口………………… ..71 6.1.1 数字 1/0 口介绍…………… 71 6. 1.2 数字 1/0 口操作及寄存器 配直……............…… .72 6.1 .3 数字 vo 口操作示例……… .75 6.2 看门狗定时器WDT ………… "76 VII 6.2.1 WDT介绍……………… ..76 6.2.2 WDT操作及寄存器配直…… 76 6.2.3 WDT操作示例…………… 79 6.3 片上非易失存储器FLASH …… .80 6.3 .1 FLASH和FRAM介绍……… 80 6.3 .2 FLASH操作及寄存器配直… 80 6.3.3 FLASH操作示例……..… ..85 6.4 片上铁电存储器FRAM ……… .87 6.4.1 铁电存储器 FRAM介绍…… .87 6.4.2 FRAM操作及寄存器配置… .88 6.4.3 FRAM操作示例………… ..90 6.5 通用定时器TIMER. ………… .91 6.5.1 TIMER介绍……………… 92 6.5.2 TIMER操作及寄存器配直… .99 6.5 .3 TIMER操作示例………… 101 6.6 通用异步串行接口 UART …… .102 6.6.1 UART介绍……………… 103 6.6.2 UART操作及寄存器配直… 109 6.6.3 UART操作示例………… .114 6.7 SPI接口…………………… 115 6.7.1 SPI介绍………………… 116 6.7.2 SPI操作及寄存器配直…… 120 6.7.3 SPI操作示例…………… .123 6.8 12C接口…………………… 125 6.8.1 eC介绍………………… 127 6.8.2 eC操作及寄存器配直…… .131 6.8.3 eC操作示例…………… .135 6.9 硬件乘法器MPY …………… 138 6.9.1 硬件乘法器介绍………… 138 6.9.2 硬件乘法器配直及使用… ..140 6.9.3 硬件乘法器操作示例…… .141 6.1 0 直接内存存取DMA ………. .142 6.1 0.1 DMA介绍………..…… 142 6.1 0.2 DMA配直及使用……… .147 6.1 0.3 DMA操作示例………… .151 6.11 模数转换器ADCI0和 ADC12 …………………… 152 6.11.1 ADCI0介绍…………… 152 6.1l.2 ADCI0寄存器配直及 使二用…………………. .159 6.11.3 ADCI0使用示例……… .164 6.12 增强型比较器 Comparator_A+…………… 167 6.1 2.1 Comparator_A+介绍…… .167 6.1 2.2 Comparator_A+配直及 使二用………………… ..170 6.12.3 Comparator_A+操作示例… 171 6.1 3 运算放大器……………… .172 6.1 3.1 运算放大器介绍………. .172 6.13.2 OA 配直及使用………… 176 6.13 .3 OA操作示例…………… 179 6.1 4 电源电压监控 SVS …·……. .180 6.14.1 SVS基本结构及原理…… .180 6.14.2 SVS寄存器配直及使用… .182 6.14.3 SVS操作示例………… ..183 第二部分修炼篇 第 7 章技术进阶之一:熟练 掌握 MSP430单片机… ..186 7.1 触摸按键实验……………… 186 7. 1.1 预备知识……………… .186 7. l.2 实验目的……………… .191 7. 1.3 实验设计……………… .191 7.2 LCD显示实验……………… 193 7.2.1 预备知识……………… .193 VIII 7.2.2 实验目的……………… .196 7.2.3 实验设计……………… .196 7.3 PS/2键盘实验……………… 201 7.3 .l 预备知识……………… .201 7.3.2 实验目的……………… .203 7.3.3 实验设计……………… .203 7.4 2 .4G无线传输实验………… .208 7.4.l 预备知识……………… .208 7.4.2 实验目的……………… .210 7.4.3 实验设计……………… .210 7.5 加速度传感器实验………… .213 7.5.1 预备知识……………… .2 l3 7.5.2 实验目的…………..… ..215 7.5.3 实验设计……………… .215 7.6 以太网传输实验…………… .217 7.6.l 预备知识……………… .217 7.6.2 实验目的……………… .219 7.6.3 实验设计……………… .219 7.7 USB读取实验……………… 220 7.7.l 预备知识……………… .220 7.7.2 实验目的……………… .224 7.7.3 实验设计……………… .224 7.8 DIY一个便携电视机……… ..228 7.8.l 预备知识……………… .228 7.8.2 硬件设计……………… .229 7.8.3 软件设计……………… .234 7.8.4 功能扩展与改进………… 242 第 8 章技术进阶之二:电子 设计大赛……........… ..244 8.l 参加设计大赛的准备……… ..244 8.2 大赛题目解析一一无线识别 装置……............……… 246 8.3 大赛题目解析一一声音引导 系统……............……… 253 第 9章技术进阶之三:从零开始 做心电图仪…………… .260 9.l 心电监测仪……………… ..260 9. 1.1 需求分析……………… .260 9. 1.2 整体方案……………… .261 9. 1.3 电路设计……………… .262 9. 1.4 整体实现……………… .267 第兰部分起飞篇 附录A 庄严写于踏入职场 之际…………………… 270 附录 B 莫恩谈 MCU 工程师的 技术精进……………… 273 附录C 春阳说电子工程师 修炼之道……………… 283 附录 D 德州仪器在线技术支持 社区使用指南………… .302 一部分 篇 第 1 幸单片机改变世界 第 2 幸改变世界从 MSP430 开始 第 3 章吃透 MSP430 单片机的构架 第 4 幸熟悉 MSP430 开发工具 第 5 章熟悉硬件平台: LaunchPad 第 6 章解剖 MSP430 羊片机 1. 1 把iPhone 变成一台心电图 仪 今天,每个人都有 一 部手机,这部手机可能是 iPhone ,也可能是 Android 手机,还有 可能是 Window$ 手机 。 无论是哪一种智能手机,其实都是一款功能强大的开发平台,吸引 了众多的软件应用开发者 。 面对这样一个平台,我们是否可以换个思路,不局限于设计各 种软件应用,而是再添加 一些硬件外设,做出更大胆的功能拓展 。 答案是肯定的! 图 1-1 展示 iPhone 心电图仪,只增加少 量的硬件外设就把一部 i Phone 变成了一台心 电图仪 。 图 1-1 iPhone 心电图仪 下面我们来看看如何一步一步实现将一部 iPhone 变成便携式心电图仪 。 首先要考虑的 问题是,增加的硬件外设如何与 iPhone 相连 。 iPhone 提供给外界的接口是它独特的数据接 口以及耳机接口,其他的手机一般可以提供 USB 接口和 耳机接口 。 因此,实际上在手机上 最通用的接口是耳机接口,而不是各种数据接口 。 让我们看看手机上的耳机接口的定义,看看它能否完成硬件外设与手机通信的功能 。 耳机接口有 4 个信号线,分别是左声道、右声道、接地和麦克风,如图 1-2 所示。接口中 各信号的方向是固定的,左声道和右声道用 于驱动耳机,所以对于手机就是输出;麦克风 是采集语音信号的,所以对于手机其方向为输 入 。 总体上讲,手机耳机孔接口提供了两个输 CJ F一」 左声道 右p;r道接地 麦克风 出通道和 一个输入通道,可以满足手机和硬件 回 1 -2 iPhone 耳机接口的定义 第1:1撞单片机改变世界 3 外设的双向通信的要求 。 如 果使用耳 机接 口作为外设电路与 i Pbooe 之间唯一 的连接,那么电路必须从耳机接口 取电,也就是需要依靠音频芯片输出 的能量来驱动电路。 iPbone 的 音频输出功率有多大呢?是否 能够驱动外部电路呢?带着这些疑问,可 以先 测试iPhone 手机一个声道的输出功率 。 图 1-3 是利用 iPbone 3GS 输出 20 ~ 20阳恒的信号 在不同的负载 阻抗下测试得到的 输 出电压有效值和输出电流以及输出功 率的关系。其 中抛 物线形的曲线是输出电压与输出功率的关系,带圈的曲线是输出电流与输出电压的对应关 系 。 输出功率在输出电压为 240mV 的时候达到峰值,这个时候输出功率达到 15.6mW ,输 出电流约为 66mA 。 图 1-3 iPhone 3GS 单声道输出电压与输 出电流及功率的关系 音频输出的最高功率达到 1 5.6mW ,如果能够设计出低功耗的电路,这个功 率能够支撑 电路工作 。 有了能量保障,采集心电信号需要哪些功能电路呢? 心电信号非常微弱,而且受到的干扰非常严重 , 直接采集会淹没在噪声之中,所以必 须设计降噪放大电路完成心电信号的调理。 心电信号从模拟域到数字域的转换,就 需要数 模转换器来完成 。 除此以外,还希望电路具备一 定的数字处理能力,完成心电信号的预处 理以及与 iPbone 的通信 。 综合以 上 这些要求,可以选择一 款具备数模转换等功能的低功辑 单片机 。 提到低功耗单片机,就会让人想起 一 款经常使用水果电池供电做演 示超低功耗单片 机一-MSP430 单片机 。 MSP43 0 且在片机很长时间以来一直作为低功耗单片机的标杆产品, 那么它的功耗到底有多低呢? 可以做一个计算,假如使用 3V 的银铮纽扣电池 CR2032 供电,电池的容量为 200 mAh o 4 第一部分预备篇 单片机使用 MSP430F20xx 系列,在看门狗工作的待机模式下其消耗电流为 0.6μA ,在 CPU 工作频率为 1MHz 的活动模式下消耗电流为 300μA 。在实际的低功耗应用中,单片机一般 情况下处于待机模式,中断请求到达时被唤醒,处理完中断请求后再次进入待机模式。因 此,单片机在大部分状态下都处于待机模式,下面分别以 1% 和 0.1% 的工作时间对其进行 评估。 工作时间为 1% 的情况下,电流消耗的平均值为: 工作时间为: Iavg=06.μA X 0.99+300μA X 0.01=3.594μA 2OO mAh Tl%= 3~ .~5~9.4μA• X 2_4. X ~ r~ 365 =6.35 Years 工作时间为 0.1% 的情况下,电流消耗的平均值为: 工作时间为: Iavg=0.6μA X 0.999+300μA X 0.001=0.8994μA 2OOmAh To. l%= 0.8994 μA X 24 X 365 =25 Years MSP430 单片机在 1% 和 0.1% 的工作时间下,工作时间分别达到了 6.34 年和 25 年, 其低功耗的特性也得到了充分体现。 MSP430 单片机除了低功耗的特点,还有哪些特征呢? MSP430 经过多年的发展已经有超过 450 个型号,相互之间具备非常好的兼容性。 MSP430 大部分器件工作电压在1. 8 ~ 3.6V ,低的工作电压可以方便使用在单节电池供 电的环境中。平均工作电流为 200μA/MIPS ,最高 CPU 工作频率可以达到 25MHz 。提供 MCLK 、 SMCLK 和 ACLK3 个时钟系统,具备 5 种低功耗模式。片上外设非常强大,具备 数字和模拟两大类外设。数字外设包括数字1/0 口,具备捕获和比较功能的定时器,支持 UART 、 eC 和 SPI 的硬件串行接口, USB 接口, DMA ,硬件乘法器,看门狗, RTC 等数 字外设。模拟外设主要包括 10 位 ADC 、 12 位 ADC 、 16 位 SD 、 24 位 SD 、 12 位 D/A 、模 拟比较器、电源监测 BOR ,运算放大器 OPA 等。可以根据具体应用选择所需要的外设,进 而选取对应型号的 MSP430 单片机。 丰富的外设能够帮助简化电路的设计,但是会不会引起 MSP430 功耗的上升呢?在实 际应用中可能用不到所有的外设, MSP430 可以选择关闭不使用的外设,这样就避免了功耗 上升的风险。 制作 iPhone 心电图仪的硬件外设选用了 MSP430F1611 单片机。有了低功耗的单片机, 下面来看看整个外设电路如何实现。 第一步实现能量的采集,从图 1-3 中的曲线数据可以知道输出电压有效值为 240mV 时, 音频输出功率最大,这个时候负载阻抗为 V 0.24 R= 一 -ι斗。 =3.60 0.66 第 1 章单片机改变世界 5 240mV 的电压较低,需要升压才能作为单片机的供电电压。但是 240mV 的电压还不足 以让 boost 升压电路工作。必须使用一种有效的升压方式,音频信号为交流信号,因此可以 采用如图 1-4 所示的变压器电路,利用 1 : 20 的变压器将音频信号升压。 GND 图 1-4 升压整流电路 为达到高效的能量传输,负载和音频源端输出阻抗匹配。已知源端阻抗为 3.6 0 ,变压 器初级线圈的电感为 25μH ,就可以根据电感的感抗计算公式获得最住的音频频率。 XL寸 ωL寸 2πfL f= 主 =22.9KHz L πL 如图 1-4 所示使用右声道传输能量,那么最佳的音频频率为 22.9KHz 。由于变压器还有 约为 0.20 的直流电阻,升压后电压约为 4.2V 。然后经过 MOS 管组成的整流电路,将电压 变为直流信号。采用 MOS 管做直流整流电路,原理上与常见的二极管全波整流电路相似, 但是具备更低的管压降,所以效率更高。整流滤波后的直流信号约为 4V , MSP430 的供电 电压可以选定为 3V ,所以最后还需要降压电路。该降压电路最好选用 DC-DC 降压电路, 以取得较高的效率。 获得了电源,还要完成单片机电路和心电信号的调理电路,心电信号调理电路会在 后面的章节中详细介绍。下面再看 MSP430 是如何完成与 iPhone 通信的。 iPhone 的耳机 接口中右声道已经被用作供给能量,就剩下左声道和麦克风。左声道可以用作 iPhone 向 MSP430 传输数据,而麦克风可以用作 MSP430 向 iPhone 传输数据。 MSP430 和 iPhone 之 间都是交流藕合,所以直接传输数字电平信号是行不通的。这里可以借用无线传输中的一 种方式,通过 FSK 调制传输数据,简单来说就是将数字信号调制到一个更高的载波信号 上,数字信号的 0 和 1 分别用不同频率的载波信号,根据接收到的载波频率可分为 0 和 1 。 看似困难的调制与解调过程可以依赖于 MSP430 的片上外设轻松完成。 完成 FSK 调制,需要使用到 MSP430 的1/0 口中断,通用异步、同步收发器 UASRT , 定时器的比较输出功能。整个过程除了一处简单的电路连接,其他的过程都可以编程实现。 FSK 的调制的实现过程如图 1-5 所示。 6 第一部分预备篇 TXD UASRT (UAR1模式) 发送 MSP430 FSK调制 中断I10 日 P l. x外部中断 定时器比较中断 定时器比较 输出 _n_ PWM输出 图 1-5 MSP430 实现 FSK 调制 单片机与 iPhone 之间完成的异步通信,可以将片上外设 UASRT 的配置为 UART 接口 来实现,需要发送的数据直接写入 UASRT 既能够自动封装为符合串口标准的数据格式。接 着将 UASRT 的输出管脚 TXD 输出的信号接至片上具备1/0 口中断功能的 1/0 口管脚, P1 端口和 P2 端口的各 8 个管脚都可以选用。 1/0 口管脚发现 TXD 管脚的电平变化就会发生中 断,并在中断中修改定时器的定时周期,进而输出不同频率的 PWM 信号,输出的 PWM 信 号如图 1-6 所示。 UUTXDO Vcc (MARK) GND (SPACE) UPl.7 Vcc - GND : Start : I Bit I Data Bits 图 1-6 FSK 调制披形 由于 iPhone 和 MSP430 之间是交流藕合,所以 PWM 信号经过低通滤波并隔离直流分 量,输出至麦克风接口被手机采集。手机具备很强的数值计算能力可以利用软件无线电算 第 1 章单片机改变世界 7 法处理采集到的 FSK 信号并解调出 MSP430 发送的数字信号。 由 iPhone 发往 MSP430 的调制信号,也可以充分利用片上外设解调,实现框图如 图 1-7 所示。 Vcc 车型斗 模拟比较器 比较中点电平 图 1-7 MSP430 实现 FSK 解调 iPhone 左声道传输的 FSK 信号也是交流信号,先使用电阻分压电路将该信号抬升至中 点电平,即 1 /2 Vcc 。利用 MSP430 片上的模拟电压比较器,将输人的信号与 1/2 Vcc 进行比 较,比较后的信号交由定时器进行捕获计数,测量 FSK 信号的周期。最终 CPU 根据信号周 期判决解调出数字信号,解调波形如图 1-8 所示。 UCAO Vcc v川 f GND UURXDO Vcc 仙1ARK) GND (SPACE) L.: : Start : , Bit Data Bits 图 1-8 FSK 解调波形 ! Stop t Bit 通过以上方法就可以解决供电和通信两大难题,再配合 iPhone 上的应用软件就能够成 8 第一部分预备篇 功地将一部于机转换为心电图仪。 从上面的介绍中可以看到大部分处理任务通过 MSP430 单片机片上外设就能完成,利 用 MSP430 单片机强大的功能实现了单芯片解决方案。 MSP430 单片机是一款资源丰富的超 低功耗单片机,在后面的章节中我们将逐步向大家介绍。 1.2 成为改变世界的单片机工程师 单片机的学习者有初入职场的菜鸟工程师,有渴求知识的在校大学生,也有迫于项目 需求的电子工程师。迫于项目需求转换开发平台的电子工程师往往具备其他类型单片机的 使用经验,学习新类型的单片机并不会有太大的障碍,但是菜鸟工程师和在校大学生就是 真正的"初学者"。初学者在开始学习单片机的时候都有一个相同的问题那就是"怎么才能 尽快地学会使用单片机? " 菜鸟工程师由于身边有"老兵"的指导,加之有目的明确的工程项目的驱动,在单片 机学习上并不会走太多的弯路。在校大学生在学习之初,首先要面对的就是"迷茫",空有 一腔热情,却不知如何下于。 在学习单片机之初应当有一些基础知识准备。单片机是电子技术发展到一定程度才出 现的产物,本身就是众多电子技术的结晶,对其中一些知识的了解是学习单片机所必需的, 所以网络上经常出现的"零基础"学习单片机是不客观的说法。在学习单片机之初,应该 具备基础的电路知识,主要包括基本的数字电路和模拟电路知识。比如,在学习单片机的 1/0 口时,就会涉及数字电路知识中1/0 口电平、施密特触发器等内容;在学习单片机的 ADC 通道时肯定会涉及信号带宽等模拟电路方面的内容。在学习单片机之前不苛求必须有 深厚的电路功底,但是常识性的电路知识是不可或缺的。 学习单片机的很大一部分工作是学习单片机的编程,简单地讲就是编写代码控制单片 机的工作流程。目前,绝大部分的单片机开发工具都能够支持 C 语言,并作为单片机的开 发语言,也有人推崇使用汇编语言作为单片机的开发语言。不可否认使用汇编语言可以获 得更高的执行效率和代码密度,但是汇编语言在开发效率和代码的可读性上比 C 语言要差。 事实上, C 语言编译器效率已经提高到了相当高的水平了, C 语言编写的代码编译后在执 行效率和代码密度上眼汇编语言相比并没有太大的差距, C 语言早就成为单片机开发的 绝对主力。所以初学者掌握基本的 C 语言知识即可,元须在开发语言的抉择上花费太多 的时间。 准备的最后一点就是学会使用最基本的实验设备,这里列举一般的实验室都能提供的 4 种设备:万用表、稳压电源、示波器和信号发生器。这些设备的熟练使用将对学习中遇到 的调试 (bebug) 有非常大的帮助。 有了以上的准备,就可以正式开始单片机的学习了。初学者最好选用一款性能稳定, 范例丰富并且推广较好的单片机作为学习目标。性能稳定,避免在学习过程中遇到由于芯 第 1 章单片机改变世界 9 片本身的设计失当导致的一些无法解决的问题;范例丰富,大量的示例供用户阅读和借鉴, 更容易理解单片机的操作机理;推广较好,意味着学习的受众面较广,有很好的学习氛围 和学习资料,并且有容易获得的学习开发板。从这 3 点出发, MSP430 系列单片机就是一个 很好的选择。首先,该单片机目前在电子行业已经使用多年,一直都作为低功耗单片机的 标杆产品;其次,该单片机所有的型号都具备官方范例代码,而且有较多的参考案例;最后, MSP430 单片机在中国通过大学计划推广了多年,大量的大学生使用这款单片机完成实验、 参加竞赛,积累了很多的书籍教材和网络资料,开发板类型也很丰富, TI 提供售价约为几 十元人民币的 LaunchPad 开发板。单片机都有相似性,学会使用一款单片机,再过渡到另 一款就不太困难了。 学习单片机可以从学习单片机的开发环境开始,当前的单片机都有自己对应的集成开 发环境( IDE , Integrated Development Environment) ,井有免费版本供初学者下载使用。集 成开发环境可以完成代码的编辑、编译和调试过程,使用起来比较方便。 TI 推出的 CCS5 还可以完成 MSP430 单片机的图形化配置。对于初学者,集成开发环境的基本使用没有障 碍,但是特别要注意的是开发环境中对应的开发工程的属性配置。 熟悉开发环境的开发流程后,就可按照引导教材或者用户手册,逐一了解单片机的各 功能模块的特性并完成对应的功能模块的实验操作。逐个模块熟悉下来,基本上一款单片 机即可学会使用。这样一个流程下来,能够掌握单片机的基本操作。希望熟练掌握则需要 进一步通过完成更为复杂的实验或者项目来锻炼。 前面的介绍中也强调了实验的重要性,实际上大多数学习单片机的初学者都会陷入一 个误区,过度的重视实验,把绝大部分精力放在调试上,却忽视了单片机使用原理的学习。 这种情况在大学生身上非常明显,很多情况下还没有能够理解单片机功能模块或者外设的 使用原理和方法,就急切的展开实验。大多数情况下,编写的代码还存在缺陷甚至错误, 无法达到预期的效果,就进入到了无尽的盲目修改和调试中。最典型的情况就是刚开始接 触一个外设,连工作方式和寄存器的功能还没有弄清楚,就开始粘贴示例代码,并编译下 载。反复调试不能成功,心态就开始变的浮躁,进而厌恶单片机。如果一直调试未果,学 习热情被消耗殆尽,对单片机的使用产生恐惧感,最终就会放弃单片机的学习。细究这种 情况的原因,其实就是急功近利的心态在作祟。初学者都急切的希望自己的代码可以跑起 来,所以重心就从"学"偏移到了单纯的"做"上。这种心态我要特别提出来,希望能够 告诫初学者必须保持平稳的心态,先仔细地浏览教材或者用户手册,理解工作原理,之后 再调试代码完成实验。 单片机学习过程中每个人都会遇到各种各样的难题并且遭遇长时间的调试过程。遭遇 到这样的情况,就需要冷静下来查找问题成因。一方面,可以借助于网络,查找是否有相 似的问题并借鉴其他人的分析及解决方案,这是一个比较直接高效的方法;另一方面,反 复地查阅单片机的数据手册或者用户手册,逐个分析列举可能的原理,并设置对应的测试 来解决,一些"莫名其妙"的问题,往往需要通过这样的手段来解决。当然,能够获得有 10 第一部分预备篇 使用经验的老师或工程师的指导则是最直接、最有效的方法。随着单片机学习以及使用的 深入,遇到的问题将越来越复杂化,这时候外界因为缺乏对此项目的深入了解,所能起到 的协助作用就会减弱,这个时候独立的定位问题以及解决问题的能力就必须具备。所以在 学习的整个过程中,都应该有意识地培养这种能力。 当熟悉单片机的使用之后,就应该完成一个视野转换的过程。这个时候关注范围则应 该由单片机扩展到整个单片机系统上,不仅仅关心单片机上代码的实现,还需要考虑如何 构建以单片机为核心的电子系统。单片机工程师一般会对一个或者若干个类型的单片机非 常熟悉,比如,非常熟悉 MSP430 单片机。在得到工程项目需求时,能够快速地评估系统 所需要的单片机控制核心,在满足需求的前提下一般会尽量采用最熟悉的单片机,合理设 计划分系统电路功能模块,尽可能高效利用单片机片上的外设,以达到最优化的设计。如 果评估发现使用的单片机不合适,则还需要更换单片机平台。在工业应用上,还必须考虑 单片机系统所需要面对的严苛工作环境,保证系统能够顺利通过相应工业标准的测试。最 终完成由点到面的扩展,逐步朝单片机工程师方向迈进。 第 2章大 改变世界从 MSP430 开始 i 2.1 MSP430 系列微控制器的发展和应用 MSP430 系列微控制器最早诞生于 1992 年 2 月 14 日,但是当时的 MSP430 是作为 ASSP (ASSP. App1iction Specific Stardard Parts ,简称专用标准产品,是为在特殊应用中使 用而设计的集成电路)器件使用在热表中。在 1996 年诞生了 MSP430 的第一代产品 3xx 系 列 MSP430 ,该系列 MSP430 使用 ROM 或者 OTP (One Time Programmab1e )作为其非易 失存储器,其计算能力低于 4 MIPS ,工作电压范围 2.5 ~ 5V ,提供 LCD 驱动器、 ADC 、 定时器等外设。 3xx 系列又被分为大概 3 个子系列,分别是 x31x 、 x32x 和 x33x o 3xx 全系 列都能够提供 LCD 驱动器,在 x32x 系列中引入了 14 位 AD , x33x 引入了硬件乘法器、 16 位定时器 TimerA 和通用同步异步收发器( USART)o 3xx 系列因为受当时非易失存储器工 艺的限制,采用了 ROM 、 OTP 或者 EPROM 作为其非易失存储器。在 FLASH 出现后 3xx 系列 MSP430 就逐渐被淘汰,现在的 TI 器件列表里面也看不到该系列的身影。 2000 年开始推出基于 FLASH 的 l 系列 MSP430 ,该系列的 MSP430 最大的特点是采 用了 FLASH 作为其非易失存储器,可以反复编程。微控制器性能也有所提高,达到了 8 MIPS 。 2002 年开始推出 4 系列 MSP430 器件,该系列 MSP430 增加了 LCD 驱动模块,以加强 其显示功能,性能上与 1 系列相近。 2005 年开始推出 2 系列 MSP430 产品, CPU 性能有了大幅度的提高,达到 16 MIPS 。 待机功耗进一步降低,并减少了唤醒时间。 2009 年开始推出 5 系列 MSP430 器件,该系列器件具备更大的 FLASH 空间和 RAM 容 量。 CPU 性能达到了 25 MIPS ,为目前最高性能的 MSP430 系列产品。器件工作功耗进一 步降低。 2010 年开始推出 va1ue 1ine 系列 MSP430 ,即为 MSP430G2 系列产品。该系列产品价格 极为低廉,基本与 8 位的微控制器相当,但是能提供 16 位的性能。 MSP430G2 系列能够提 供 16 MIPS 的计算能力,代码与其他系列兼容,但是在外设上有所删减。 2012 年开始推出 MSP430FR59xx 系列 MSP430 产品。 FR59xx 系列属于 MSP430 的 12 第一部分预备篇 新一代"金刚狼"产品,该系列使用铁电存储器 (FRAM) 替代了 FLASH ,并采用超低 漏电工艺技术。功超只有上一代产品的一般,而且其 FRAM 写入速度相比较 FLASH 快 100 多倍。 MSP430 一直以来都作为超低功耗微处理器的标杆产品,在便携式检测控制仪器、数据 采集系统、智能仪表、医疗仪器、节能设备等方便都取得了广泛的应用。 2.2 MSP430 系列微控制器产品概况 目前的 MSP430 产品主要包括 l 系列、 2 系列、 G2 系列、 4 系列、 5 系列、 6 系列、 FRAM 系列、低电压系类和 RF 片上系统系列,有超过 450 种可供选择的器件。每个系 列都有各自的特点,可以通过 MSP430 的器件标号解析每款微控制器的具体特性。下 面以一个器件标号来解析其代表的含义,比如一款 2 系列的 MSP430 微控制器产品标号 为: MSP430F2618ATZQW下 EP 。 MSP: 代表是混合信号处理器( Mixed Signal Processor )。这里的标号还可能出现其他 两种情况,分别是 CC 和 XMS o CC 代表是带射频棋块的片上系统系列; XMS 代表该型号 还在硅片实验阶段,尚未正式发布。 430: 即代表的是 430 系列微控制器。 F. 该位代表单片机类型。 F 代表的是 FLASH; C 代表的是 ROM; FR 代表的是铁电存 储器 (FRAM); G 代表的是 FLASH ,但是为经济型产品 ;L 代表没有片上非易失存储器; FG 代表用于医疗应用的 FLASH 器件; CG 代表用于医疗应用的 ROM 器件; FE 代表用于 电力测量的 FLASH 型器件; FW 代表用于电子流量表的 FLASH 器件; AFE 代表模拟前端 器件; BT 代表具备蓝牙的预编程器件; BQ 代表用于无接触供电应用的器件。 2. 代表器件所属的系列。 l 代表 l 系列,计算能力可以达到 8 MIPS; 2 代表 2 系列, 计算能力可以达到 16 MIPS ; 3 代表 3 系列,已经停产; 4 代表 4 系列,具备液晶驱动器, 计算能力可以达到 16 MIPS; 5 代表 5 系列电计算能力可以达到 25 MIPS; 6 代表 6 系列, 具备液晶驱动器,计算能力可以达到 25 MIPS: 。代表 0 系列,为低电斥系列。 6: 代表器件家族型号。 18: 代表器件序号。 A: 如果器件有版本更改,可能会出现这个标号用于表明不同的版本。 T: 该位代表器件工作温度范围。 S 为 o ~ 50 "C; 1 为 40 ~ 85 "C; T 为 -40 ~ 105 "C。 ZQW: 该位代表器件封装。 T: 该位代表器件分发的过程中的包装方式。 EP: 该位是表示使用温度范围的扩展位。 EP 代表温度增强型 可以在一40 ~ 125 "c 的范围使用; Ql 代表为汽车级器件; HT 代表极限温度器件,可以在一 55 ~ 150 "C范围 使用。 第 2i能改变世界从MSP430开始 13 了解器件标号解析可以方便的明确~~件的特性,下 面来分别介绍 各个系列 MSP430 产 品的特点 。 l 系列 MSP430 工作电压为1. 8 -- 3.6V. 能够提供 8MIPS 计算能力 。 该系列提供 1 -- 60KB 的 FLASH 空间或 1 -- 16KB 的 ROM 空间,具备 512B ""'" 10KB 的 RAM 。 通用 1/0 口竹脚数目有 1 4 、 22 和 48 -:种 。 l 系列片上外设包括 10 位成1'f 1 2 位的 S AR 型 A DC 、 12 位的 DAC 、模拟比较器、 DMA 、 16 x 1 6 硬件乘法器、 16 位定时器、通用同步、异步收 发器( USART. 支持 UART 和 SP I 接r1 ) 哼,其特征框罔如附 2-1 所 示。 l 系列器件在低 功提模式 F. RAM 保持状态消起电流为 0.1μA. 实时时钟状态消槌电流为 0.7 川。 从待机 模式下唤醒屁时 6 间, 工作状态消屁电流为 200μAlMIPS 岳阳 冒圃' 圄菌矗 立习贯孟晶 r..11r.1 啤- ~帕I!:i1l 且­ E噩圄 阮 11 11 1 11 [:Ju'.ms'!': 1 11 圃噩噩 1lI1也 lEι 比tI1 ZS_A ·百_1艺三 响~‘..二叹百回 应~]PJ个il\fl'n时2· 灾 fí '(,î 圆ilatEil il)]'同- 句个‘ u J 忱经ßT~ a 思控制 . (Dr.tA ) ... 1''''理l, 回lIIL.13.I阻且l ~玉[]gI íllnlll 帽'件优势~ [C:mlII冽耐 r~)( "PYI @总[1lÆ埠cq ISV 'i, 阁 2-1 1 系列 MSP430 器件特征框闯 2 系列 MSP43 0 工作电压为1. 8 ""'" 3.6V. 能够提供 16 M IPS 计算能力 。 该系列提供内 达 120 KB 的 FLA SH 空间,具备 128 B -- 8 KB 的 RAM 。 通用 I10 口管脚数目有更多的选 择,具备 10 、 1 6 、 24 、 32 、 48 或在 64 个 110 口管脚 。 2 系列 M SP430 片上还集成了极低功 提振荡器 V LO. 可以提供 1 2kHz 的振荡 。 2 系列的 110 口管脚增加了内部上下拉功能 。 片上外设新增了 16 位和 24 位的 Sigma-De1ta 型 ADC 和片上运算放大器 。 通信接口方面 新增了通用串行通信接口 (USCI) 模块,可以支持 SPI 、 eC 、 LIN 、 JrDA 和 UART 接口 。 其 特征框阁如阁 2-2 所示 。 2 系列器件在低功麓模式下. RAM 保持状态消辑电流为 0.1μA . 实 时时钟状态悄屁电流为 0.7μA。在新增的 VLO 活动情况下待机消屁电流为 0.3 μA。 从待机棋 14 第一部分预备篇 式下唤醒耗时减少,仅需要不到 1 间的时间 。工作状态消能电流为 220μA/Ñ但PS o 睡露面 E醒 噩噩 图 2-2 2 系列 MSP430 器件特征框图 G2 系列 MSP430 是针对经济型应用而推出的 MSP430 产品,外设上相对其他系列器件 稍有精筒,但是价格上有大幅降低,基本与 8 位微控制器相当 。 G2 系列器件仍然可以提供 高达 16 MIPS 的计算能力, 工 作电压在1. 8 ~ 3.6V 。 存储空间上可以提供 5 12B - 16KB 的 FLASH 空间, RAM 有 128B 、 25 6B 、 5 12B 三 档可选 。 在存储器上较其他系列有所减 少。外设方面可以提供 10 位的 SAR 型 ADC 、模拟比较器、定时器等 。 02 系列器件能够提 供的 1/0 口管脚相对比较少,有 4 、 10 、 16 和 24 管脚四种,串行接口可以支持 12C 、 SPI 和 UARTo 器件特征框图如图 2-3 所示 。 02 系列还具备非常有特色的电容触摸 IJO 口,可方 便的用于触摸按键的设计 。 02 系列的低功耗性能基本与 2 系列产品相当 。 4 系列 MSP430 器件种类比较多,继推出 l 系列~ MSP430 后就陆续有各种 4 系列器件推 出。 4 系列产品最大的特点是一般都具备 LCD 驱动器,系列下面还有较多针对低功耗计量 和医疗应用的优化型号 。 CPU 性能上,该系列器件可以提供 8 MIPS 或者 16 MIPS 的计算 能力。除了 MSP430 常见的基本外设外,该系列器件引入了 RTC 时钟和 32 x32 位乘法器 等新的外设 。 其器件特征框图如图 2-4 所示 。 4 系列器件低功耗性能基本与 I 系列相当 。 5 系列 产 品和 6 系列产品比较接近, 6 系列增加了 LCD 驱动器 。 这两个系列是 MSP430 中性能最高的两个系列,能够提供高达 25 阳PS 的性能。存储空间上可以提供高达 256 KB 的 FLASH 空间和 18 K 的 SRAM 。 在外设方面新增高分辨率的 PWM 模块、增加 USB 通信 第2~主改变世界从MSP430开始 15 1, ' , ( ' ' ! : l ! ! l I !I e t m 系列 画画高刊[;'Jrn 定时器 '‘· 由主多 2 个[I~位主贯4嚣 ærn 每个白多达存3 个嚣 比往寄 r.'I门纳吉唱4器 E隘噩噩矗噩 回国蝇耐瞌E ·-甜传怒骂 系统 模拟 rl_UI,II 、 自岛、[ 0 #1 比军费~ E肘子筐。 ~、l.1llI υsι IJII[~ 电容曲'接lDl 自 2-3 G2 系列 MSP430 器件特征框困 v|| I I ~,1τ牙~;''OJ古自 II ‘ - 图 2-4 4 系列 MSP430 器件特征框图 16 第一部分预备篇 接口、具备 5V 驱动能力的 110 口、 24 位精度的 Sigma-Delta 型 ADC 这两个系列的器件片 上管脚数目较多,片上外设非常非日,同一类型外设在片 ι具备多个。两个系列的特征分 别如阁 2-5 和阁 2-6 所示。这两个系列的产品将 MS P430 的:c作功挺降到了 165/μAlMIPS , 唤醒时间不大于 5 仰 。 阳雷帽帽模型国 匾 匾圄圃' 噩噩噩 阳 2-5 5 系列 MSP430 器件特征框阁 FRAM 系列是 MSP430 新 -代基于铁电存储器的产品,铁电存储器相比较于 FLASH 进 一步 降低了功耗,加快了读写速度,特别是写的速度提高了 100 俏以上 。 FRAM 系列器件 能够提供 24MHz 的 CPU 1:作速准。存储空间上,能够提供 4""-' 16K 的 FRAM 作为 非易 失存储器,还可提供 1 ~ 2K 的 SRAM 。 外设方便跟其他系列相近,如图 2-7 所示,由于 FRAM 的使用引人了存储器保妒单元 (MPU)o FRAM 的使用让 MSP430 的工作功屁降低 至 82 队fMHz ,相比较上一代产品降低了 50%。 低电压系列 MSP430 是针对1. 5V 单节电池供电推出的越低电压微控制器,能够在 0.9 -- 1.65V 范围内 工作 CPU [作速率为 4MHz ,内部的非易失存储器只有 ROM ,可以 通过外部存储器加载代码。黯件的管脚数目较少,只提供 11 个 1/0 接口。外设方面提供 定时拇、看门狗和 APOOL 棋块,特征框图如图 2-8 所示 。 APOOL 棋块集成了参考电Jß、 圄囱幽甜 匾酶圈圈 噩噩噩噩 第2:i主改变世界从 MSP430开始 17 用 2-6 6 系列 MSP430 器件特征框图 隘锚盟国E 撞瞿噩噩噩 回国藉疆噩 阁 2-7 FRAM 系列 MSP430 器件特征框图 1 8 第一部分预备篇 8 位 ADC 、 8 位 DAC 、比较器和电源电压检测的功能 。 低电压系列具备极低的工作功耗, 在供电电压为l.3 V 的情况下工作功耗为 45μA/MHz ,待机模式电流消耗为 6μA 。 .噩噩噩 .噩噩圄 噩噩噩. 图 2-8 低电压系列 MSP430 器件特征框图 CC430 是集成有射频模块的 SoC (片上系统)器件,实际是将 5 系列 MSP430 的内核 与 I GHz 以下射频通信芯片 CCIIOI 整合在 一起 。 该系列器件能够提供最高 20MHz 的 CPU 运行速度, 8......_ 32K 的 FLASH 空间以及 2 ,...__ 4K 的 SRAM 。 外设方面更能提供 MSP430 通 用的外设,如图 2-9 所示 。 工作功耗为 180μA/MIPS , RAM 保持电流为 lμA 。 射颜~ ~黑手lJl 币il'Jm 阳"~ 匾翩翩矗画 .圄翩翩翩. Il-l庭传感翠 慢拟 -‘- ~ liIt1l;j口[fIIi!i1] 3 遭迫口Li SAR lIIJ童~ ~耐摇 il~2 个iIlI位主古!f:'l 匈 n 们争路 b 中'自醒 比佳部[lt"~ l'iI门钩斗智4翠 ~时时忡lI3DII 系统 llL\Ll&'l'LlIII rrr~阳,军>'J.l r;.;m且(iÏ !flIfI1l仲院势5 lL\IlÐI ri1撞!'II储罩白电蛇~l 嚣lI!1I!J.'Il -电噩国民 H 监酬嚣 fllßj 楼口 ":;0、[tEil 'i.H川〉 ,_" ~ ~ ltiJ!JIIII "'" 显示院 lI!I!l赔[llij 图 2-9 射频 SoC 系列 MSP430 器件特征 i眶图 以上对 MSP430 的各个常见系列的特征做了简要的介绍, MSP430 系列微控制器具备非 常多的选择,可根据实际需求选择合理的器件 。 第3主 ι 吃透 MSP430 单片机的构架飞 iij~; 3.1 MSP430 总体构架 MSP430 是一种超低功耗的 16 位微控制器,其构架框图如图 3-1 所示。 MSP430 片 上提供独特时钟的模块,为 CPU 和外设提供不同频率的时钟以达到最小化功耗的特点。 MSP430 是使用 16 位精简指令集的 CPU ,其数据总线和地址总线都是 16 位的。片上提供 JTAG 调试逻辑,所以支持在线调试。片上的非易失存储器、 RAM 、看门狗和 16 位的外设 都是通过 16 位的系统总线访问。片上的非易失存储器主要包括 ROM 、 FLASH 和铁电存储 器 (FRAM) , ROM 主要是针对最早的 3 系列 MSP430. FLASH 是目前绝大多数 MSP430 所采用的存储器, FRAM 是 MSP430 最新的 FR 系列和下一代金刚狼系类采用的非易失存储 器。 MSP430 上不仅有 16 位的外设,还包括 8 位的外设。内部 16 位的数据总线通过 8 位转 换电路,转换为 8 位数据总线完成对 8 位外设的访问。 r-----------~~----------------------i JTAG ~-----------------------------------­ 图 3-1 MSP430 微控制器构架框图 20 第一部分预备篇 3.2 CPU 结构和特点 MSP430 微控制器采用的 16 位架构,提供 16 个高度灵活、可完全寻址的单周期操作 16 位 CPU 寄存器,分别是 RO ~ R15 0 CPU 采用精简指令集,仅采用了 27 条指令与 7 种统一寻 址模式。 MSP430CPU (简称 CPU) ,其 CPU 寄存器都为 16 位,所以其寻址空间有 64阻。 随着 MSP430 的发展,其 CPU 扩展了寻址空间,达到了 1MBo CPU 结构也略有变化, CPU 寄存器扩宽到了 20 位。这种新的 CPU 为 MSP430X CPU (简称 CPUX) , MSP430X CPU 向后兼容 MSP430 CPU 。二者的区别如图 3-2 所示,两种 CPU 数据总线的宽度仍然保 持为 16 位,但是 CPUX 的地址总线扩展到了 20 位。 CPUX 的算术逻辑单元 (ALU) 也可 以完成 20 位的计算。 CPUX 虽然地址总线扩展,但是其中断向量表(参考中断系统)里存储的中断服务函 数的其起始地址仍然是 16 位的,所在中断服务函数依旧是在地址空间的低 64KB 的范围, 这一点也是和 CPU 兼容的。 MDB - Memory Data Bus Memory Address Bus - MAB MDB - Memory Data Bus Memo可 Addre田 Bus-MAB 16 16 20 16 图 3-2 CPU 和 CPUX 结构示意图 第3章吃透 MSP430单片机的构架 21 3.3 存储空结构和地址空间 MSP430 采用了冯·诺依曼结构,所以具备统一的地址空间。内部的特殊功能寄存 器、外设、随机存储器 (RAM) 和 FLASH 共用一个地址空间。图 3-3 为 MSP430x1xx 系 列 MCU 地址空间结构图,图 3-4 为 MSP430x2xx 系列 MCU 地址空间结构图。可以明 显地看到二者之间的区别, MSP430x1xx 系列 MCU 寻址空间是标准的 64 KB (2 16 ) ,而 MSP430x2xx 系列 MCU 寻址空间达到了 128 KB 。对于 2xx 系列、 4xx 系列、 5xx 系列和 6xx 系列的 MSP430 都出现了寻址空间超过 64 KB 的情况。这主要是因为新的 MSP430 引 人了 CPUX , CPUX 扩展了寻址空间,使得寻址空间达到了 1 MBo MSP430 数据能够以宇 (2Byte) 和字节( 1Byte )的方式寻址,指令的寻址地址一般在偶地址。 OFFFFh OFFE 。h OFFD Fh 'b Interrupt Vector Table Flash!ROM Access WordIByte Wor而Byte lFFFF'h 10000lh OFFF 'h OFFE lh OFFDF'h 4 ' Flash!ROM Interrupt Vector Table Flash!ROM Access WordIByte Wor而Byte WordIByte + 020-O0hh OIFFFh OIOO。hh OF Fh 01 Oh OFh 。h RAM 16-Bit Peripheral Modules 8-Bit Peripheral Modules Special Function Registers WordIByte Word Byte Byte l 020 Oh OIFFh OlOOh OF 'h 01 lh OF'h lh RAM WordIByte 16-Bit Peripheral Modules Word 8-Bit Peripheral Modulcs Byte Sp巳:cial Function Registers Byte 图 3-3 MSP430x!xx 地址空间 图 3-4 MSP430x2xx 地址空间 对于 FLASH 不大于 60KB 的 MSP430 , FLASH 的结束地址是 OxFFFF; 如果 FLASH 的大小超过了 60KB , FLASH 的会占用 OxFFFF 以上的地址空间。在 FLASH 地址空间的最 高部分的地址从 OxFFEO 开始至 OxFFFF 被中断向量表占据(目前很多器件的中断向量表占 据更大的空间,从 OxFFCO 到 OxFFFF)。如果器件没有使用其中的一些中断向量,那么这 部分中断向量占用的空间可以作为普通 FLASH 供数据或者代码使用。地址空间的 Ox0200 为起始地址,往高地址增长是 RAM 占用的地址空间, RAM 占用空间的大小眼具体的器件 直接相关。 RAM 部分可以用来存储数据和指令。 地址空间的 OxOOFF 到 Ox01FF 是 16 位外设占用的地址空间,这部分空间必须使用字访 22 第一部分预备篇 问指令才能正确读取。如果错误的使用了字节访问指令,只会读取到偶地址的数据,高位 的奇地址数据读取值一直为 0 。 地址空间的 Ox0010 到 OxOOFF 是 8 位外设占用的地址空间,这部分地址空间必须是用 字节访问指令。如果错误地使用了宇访问指令,读取字的高 8 位值不可预知。 地址空间最低的 16 个地址 OxOOOO 到 OxOOOF ,是特殊功能寄存器占用的地址空间,同 样的该地址空间也必须使用字节访问指令进行读写。 下面通过两种不同资源的 MSP430 地址空间的对比验证以上的介绍。表于 1 是 MSP430G2553 和 MSP430F2619 的地址空间对比。其中 MSP430G2553 具备( 16K+256) 字节 FLASH 和 512 字节 RAM 资源,其 FLASH 尺寸未超过 60KB; MSP430F2619 具 备( 120K+256) 字节 FLASH 和 4K 字节 RAM 资源, FLASH 尺寸超过 60KB 。其中 MSP430G2553 的 FLASH 地址空间从 OxCOOO 开始,以 OxFFFF 为结束地址; MSP430F2619 的 FLASH 容量超过 60KB ,所以地址空间还占用了比 OxFFFF 高的地址。 MSP430G2553 的 RAM 严格的遵守了从 Ox0200 起始的规则, MSP430F2619 则占用了 Ox010FF ~ Ox01000 地 址段。外设和 SFR 部分则与之前的规则一致。 项目 内存 主:中断向量 主:代码内存 信息内存 RAM 外设 表 3-1 G2553 和 F2619 地址空间对比 名称 尺寸 闪存 闪存 尺寸 间存 尺寸 16 位外设 8 位外设 8 为 SFR MSP430G2553 16KB OxFFFF ~ OxFFCO OxFFFF ~ OxCOOO 256B 010FFh ~ 01000h 512B Ox03FF ~ Ox0200 01FFh ~ 0100h OFFh ~ 010h OFh ~ OOh MSP430F2619 120KB OxOFFFF ~ OxOFFCO Ox1FFFF ~ Ox02100 256B Ox010FF ~ Ox01000 4KB Ox020FF ~ OxO 11 00 OxOOlFF ~ OxOOl00 OxOOOFF ~ Ox00010 OxOOOOF ~ OxOOOOO 3.4 时钟系统 3.4 .1 时钟源 MSP430 典型的时钟源有 4 种,分别是低频振荡器 LFXTl CLK 、高频振荡器 XT2CLK 、 数控振荡器 DCOCLK 和低频低功耗振荡器 VLOCLK 。其中 LFXT1CLK 和 XT2CLK 需要 外部晶体或者谐振器组成振荡器, DCOCLK 和 VLOCLK 是片上时钟源。 LFXTl CLK 需要配合外部晶体(无源晶振)或者谐振器,组成一个完整的振荡器。配 合外部晶体的情况下, LFXTl CLK 能够构成一个低频的振荡器,一般情况下配合 32768Hz 的晶体使用,并集成有补偿电容。 G2xxx 系列最大的振荡频率为 50kHz 。也可以利用外部 第3章吃透 MSP430单片机的构架 23 时钟源向 LFXTICLK 通过 XIN 管脚输入时钟 此时时钟频率可以在 400 kHz ~ 16MHz 的 范围内变化。 XT2CLK 是一个高频时钟源,可以配合外部晶体或者谐振器使用,也可以从 XIN 管脚 输入外部时钟源,工作的频率范围在 400kHz ~ 16MHz o DCOCLK 是集成在 MSP430 片上的数控振荡器,能够在一个非常宽的频率范围内工 作,以 G2xxx 系列为例,可以高达 16 MHz o DCO 频率可以使用 MSP430 片上 FLASH 信 息区的校准信息进行校准。 VLOCLK 是片上集成的低功耗低频振荡器,典型的振荡频率为 12 KHz o VLOCLK 受 工作电压和温度的影响较大,频率电源电压漂移约为 4%/V,频率温度漂移为 5%/"<:: 。 时钟系统原理框图如图 3-5 所示。 VLOCLK 的选用通过基本时钟模块控制寄存器 BCSCTLl 的 LFXT1选择位 XTS 和 BCSCTL3的低频时钟选择位 LFXT1 Sx 位完成。 XTS=O 选择在低频模式下, LFXT1Sx=10 选中 VLO o VLO 如果没有被选用,则会自动关闭以减少电流消耗。状态寄存器 SR 的 OSCOFF 位可关闭 VLO 。 LFXT1振荡器内部包括两个可变的补偿电容,由基本时钟模块控制寄存器 BCSCTL3 的 XCAPx 位配置,可在 1 ~ 12.5pF 的范围内分 4 档变化。 XTS 位会选择 LFXT1振荡器 工作在低频模式或者高频模式。选择工作在高频模式,则 LFXT1 Sx 选取工作的频率范围; 选取工作在低频模式, LFXT1Sx 设置为 00 以选取 LFXT1使用 32 768 Hz 的晶体。如果 LFXTICLK 的频率低于设置值,则 LFXTl 振荡器错误标志位 LFXT1 0F 位(在 BCSCTL3 寄存器中)会置位,以阻止 CPU 将 LFXT1 CLK 作为时钟源。状态寄存器 SR 的 OSCOFF 位 可关闭 LFXT1振荡器。无论在高频模式还是低频模式,设置 LFXT1 Sx = 11 , OSCOFF = 0 , XCAPx = 00 ,则选择使用 XIN 管脚外部时钟源。 XT2 振荡器没有补偿电容,需要在外部电路添加。它由基本时钟模块控制寄存器 BCSCTL1的 XT20日选择使能或者禁用。基本时钟模块控制寄存器 BCSCTL3的 XT2Sx 位选择工作的频率范围。如果 XT2CLK 的频率低于设置值, XT2 振荡器错误标志位 XT20F (在 BCSCTL3寄存器中)也会置位,用于禁止 CPU 将 XT2CLK 作为时钟源。状态寄存器 SR 的 OSCOFF 位可关闭 XT2 振荡器。 DCOCLK 是 MSP430 微控制器自身认为是最可靠的时钟源, MSP430 启动的时候将 DCOCLK 作为 CPU 的时钟源,看门狗(下个小结将介绍)也将 DCOCLK 作为时钟失效后 的备用时钟源。 DCO 的关闭通过将状态寄存器 SR 的 SCGO 置 l 来实现。 DCO 频率的设置 由 3 部分寄存器来完成,基本时钟模块控制寄存器 BCSCTL1的 RSELx 位,选择 16 个标称 频率范围; DCO 控制寄存器 DCOCTL 的 DCOx 位,用于选择在每个标称范围内 8 个档次 的微调。频率步进关系如图 3-6 所示。 24 第一部分预备篇 VLO 振荡器 LFXT1 振荡器 11 Iun,t,~e.m..aul且 11 ,V"LüCLK I LP/LF ~二 一-) 10咀cillatort I DlVAx Auxillary Clock XIN XOUT LFXT 1 Oscillator XCAPx ;xuk 振荡器 1 日in. Pulse / / Connected only ;when XT2 not present:on-chip SELMx ~--------------------------------------酌 ___________________J Sub System Clock 国 3-5 时钟系统的原理框图 DCOCTL 的频率调整位 MODx 用于两个微词颇率档次之间的频率调整,调整后的 32 个时钟周期的时间长度为 t = ( 32-MODx) X tDCO 十MODx ~( tDCO 斗。由频率调整模块调整后 的时钟频率在 !OCOx 到 !OCOx+l 之间,相当于实现了进 A 步的频率微调 o MODx 清零可以禁用 该功能。 MSP430 上电后默认的 DCO 振荡频率约为 1.045MHz o 第3章吃透MSP430单片机的构架 25 f oco 20000 kHZ 1000 kHZ 100 kHz RSEL = 15 RSEL = 7 RSEL = O DCO=O DCO= l DC0=2 DC0=3 DCQ--4 DCO=5 DC0=6 DC0=7 回 3 -6 RSELx 和 DCOx 的频率步进关系 DCO 频 率 也会受温度和电源电压的影响产生漂移 , 在 MSP430 的 FLASH 信息段中存 储着出 厂 校准数据供用户使用,用这些数据可以直接配置 DCOCTL 和 BCSCTLl 。 可按照 下面的方式配置: /*配置 DCO 频率为 1 MHz* / BCSCTL1 = CALBC1 1 MHz; //设置 SELx 的范围 DCOCTL = CALDCO 1 MHz; //设置 DCOx 的值和频率调整值 MODx 户配置 DCO 频率为 8 阳俨/ BCSCTL1 = CALBC1 8 MHz; DCOCTL = CALDCO 8 MHz; /*配置 DCO 频率为 12 MHz 忖 BCSCTL1 = CALBC1 12 MHz; DCOCTL = CALDCO 12 MHz; 户配置町0 频率为 16 阳z*/ BCSCTL1 a CALBC1 16 MHz; DCOCTL = CALDCO 16 MHz; 3.4.2 时钟信号 MSP430 的时钟信 号 有 3 种,分别是主时钟信号 MCLK 、次主时钟信号 SMCLK 和 辅助时钟 信号 ACLK o MCLK 为 CPU 或者系统时钟信号,比如 DMA 可以使用 MCLK 作 为时钟信号; SMCLK 一般作为外设时钟信号 ; ACLK 一般情况下也作为外设时钟 信号 。 MCLK 、 SMCLK 和 ACLK 的时钟信号来自上面介绍到的时钟源 。 MCLK 和 S M CLK 时钟 信 号 的信号 源可以是 LFXT 1CLK , VLOCLK , XT2CLK 或者 DCOCLK ; ACLK 时钟信号 的信号源为 LFXT1 CLK 或者 VLOCLK。 时钟分配关系可以通过圄 3-7 理解 。 , MCLK 的时钟源由基本时钟模块控制寄存器 BCSCTL2 的主时钟选择位 SELMx 位 选择 。 若选用 LFXT1 CLK 或者 VLOCLK ,则需要进一步通过基本时钟模块控制寄 存器 BCSCTL3低频时钟选择位 LFXTlSx 控制 。 MCLK 在输出前,可通过分频模块对其时钟源 进行分频,分频系数为 1 、 2 、 4 或 8 ,由基本时钟模块控制寄存器 BCSCTL3 的 MCLK 分 频选择位 DIVMx位选择 。 26 第一部分预备篇 SMCLK 在具备 XT2 振荡器的型号上,时钟源通过 BCSCTL2 的 SMCLK 选择位 SELS , 这个时候只能在 XT2CLK 和 DCOCLK 之间 选择;在不具备 XT2 振荡器的型号上,如 LFXTl Sx G2xxx 系列, SELS 选择时钟源为 DCOCLK 或者 LFXT1 CLK 和 VLOCLK , LFXT 1CLK 或者 VLOCLK 的选取还要依靠 LFXT1 Sx 位 配置。与 MCLK 相似,由 BCSCTL3的 DIVSx 位选择 SMCLK 的时钟师、分频系数, 分频系数也是 1 、 2 、 4 或 8 0 ACLK 时钟源的选择只能是 LFXT1CLK 或者 VLOCLK ,通过 LFXT1 Sx 位配置即 LFXTl Sx LFXT町LK 俨飞↑ SELS •--- -----+1、 一V一L一O一C-LK+1I /' J XT2CLK ν" 可。与 MCLK 相似,由基本时钟模块控 制寄存器 BCSCTL1的 ACLK 分频选择位 LFXTl Sx DIVAx 位选择对时钟源分频系数。 3.4.3 基本时钟模块寄存器 MSP430 内与时钟相关的配置都是通过 基本时钟模块配置寄存器完成的,前面的介 图 3-7 时钟分配关系示意图 绍中已经用到了这些寄存器,下面对寄存器的各位代表的详细意义做解析。 表 3-2 基本时钟模块控制寄存器 BCSCTL1 Bit7 BitO XT20FF XT20FF: XT2 振荡器禁用位。 XT20FF=0 , XT2 振荡器开启; XT20FF=0 , XT2 关闭。 XTS: LFXT1振荡器工作模式选择位。 XTS=O , LFXT1振荡器工作在低频模式; XTS=O , LFXT1振荡器工作在高频模式。 DIVAx: ACLK 分频选择位,完成对 ACLK 时钟源的分频。分频系数为 2DIVAX ,所以分 频系数为 1 、 2 、 4 或 8 。 RSELx: DCO 标称频率范围选择位,用于选择 16 个 DCO 频率范围。 表 3-3 基本时钟模块控制寄存器 BCSCTL2 Bit7 BitO DCOR SELMx: MCLK 时钟源选择位。 SELMx=OO 或 01 , MCLK 的时钟源为 DCOCLK 。 第3章吃透 MSP430单片机的构架 27 SELMx=10 , MCLK 的时钟源为 XT2CLK ,若没有 XT2 振荡器,则时钟源为 LFXT1CLK 或者 VLOCLK。 SELMx= 11 , MCLK 的时钟源为 LFXT1CLK 或 VLOCLK o DIVMx: MCLK 分频选择位,完成对 MCLK 时钟源的分频。分频系数为 2DIVMX ,所以 分频系数为 1 、 2 、 4 或 8 。 SELS: SMCLK 时钟源选择位。 SELS =0 , SMCLK 的时钟源为 DCOCLK。 SELS =1, SMCLK 的时钟源为 XT2CLK ,若没有 XT2 振荡器,则时钟源为 LFXT1 CLK 或 VLOCLK c DIVSx: SMCLK 分频选择位,完成对 SMCLK 时钟源的分频。分频系数为 2DIVMX ,所 以分频系数为 l 、 2 、 4 或 8 。 DCOR: DCO 电阻选择位,该位并不常用,用于使用外部电阻代替内部电阻以微调 DCO 频率范围。 DCOR 啡,选择内部电阻; DCOR =1 ,选择外部电阻,此时 DCO 频率范 围选择位 RSE口无效。 表 3-4 基本时钟模块控制寄存器 BCSCTL3 Bit7 Bitl BitO XT20F I LFXTIOF XT2Sx: XT2 振荡器频率选择位。用于设定 XT2 中断器的工作频率。 XT2Sx=00 ,使用 0 .4 ~ 1 MHz 的晶体或者谐振器。 XT2Sx=01 ,使用 1~3MHz 的晶体或者谐振器。 XT2Sx=10 ,使用 3 ~ 16 MHz 的晶体或者谐振器。 XT2Sx=11 ,使用 0 .4 ~ 16 MHz 的外部时钟源。 LFXT1 Sx: 在 XTS=O 时,该位为低频时钟源选择位;在 XTS=1 时,该位是 LFXT1振 荡器工作频率选择位。 在 XTS=O 时, LFXT1 Sx =00 , LFXT1振荡器使用 32768Hz 的外部晶体。 在 XTS=O 时, LFXT1 Sx =01 ,未定义。 在 XTS=O 时, LFXT1 Sx =10 ,使用 VLOCLK 作为低频时钟源。 在 XTS=O 时, LFXT1 Sx =11 ,使用外部时钟源。 在 XTS=1 时, LFXT1 Sx =00 , LFXT1振荡器使用 0 .4 ~ 1MHz 的晶体或者谐振器。 在 XTS=1 时, LFXT1 Sx =01 , LFXT1振荡器使用 0 .4 ~ 1MHz 的晶体或者谐振器。 在 XTS=1 时, LFXT1 Sx = 10 , LFXT1振荡器使用 0 .4 ~ 1MHz 的晶体或者谐振器。 在 XTS=1 时, LFXT1 Sx =11 ,使用 0 .4 ~ 16MHz 的外部时钟源。 XCAPx: LFXT1在使用 32768 Hz 晶体组成振荡器时,内部补偿电容选择位。 XCAPx=OO ,电容有效值约为 1 pF 。 28 第一部分预备篇 XCAPx=O L, rl1容有效值约为 6pF 。 XCAPx= 10 ,电容有效值约为 10pF 。 XCAPx= ll ,电容有效值约为 12.5pF 。 XT20F: XT2 振荡器错位标志位 。 当振荡频率低于频率选择位选定的值时,该位会yt. 位,并阻止 C P U 将该时钟作为时钟源 。 LFXTI0F: LFXT1振荡器错位标志位 。 当振荡频率低于频率选择位选定的值,该位会 ~yt位,并阻止 C PU 将该时钟作为时钟源 。 表 3-5 DCO 控制寄存错。COCTL Bit7 BitO DCOx: DCO 频率选择位,用于选择 RSELx 配咒的两个标称频段间的 8 挡频率选择 。 MODx: 频 率调整位,用于启用频率调整模块 。 3.4.4 时钟源的配置与使用 在大部分应用中, MCLK 和 SMCLK 可以将 DCOCLK 作为时钟源,而 ACLK 将 VLOCLK 作为时钟源 。 在使用 XT2CLK 和 LFXTI CLK 时,肉为要用到外部晶体,可能因为外部电 路故障导致 XT2 振荡器或者 LFXTl :无法正常起振 。 此时不能将 XT2CLK 和 LFXTl CLK 作 为 MCLK 的时钟源,因此在操作顺序上建议按照下面的步骤完成: 1 )便能对应的振荡器并选择合适的工作频段 。 2) 将状态寄存器 SR 中的 OFI FG 位清零 。 3 )延时至少 50 问 。 4 ) 检查 OFJFG 标志位是否泊零 。 如果清零,则可以选择对应的振 2奋斗m 作为 MC LKj 否则重复步骤 2 - 步骤 4 。 XT2 振荡器操作顺序如下,有 一 点需要说明. MSP430 上电后默认 MCLK 时钟源来自 DCOCLK。 BCSCTLl 品- - XT2; BCSCTL3 1- XT2S 2; do //使能 XT2 搬荡器 //选得 XT2 搬荡器工作在 3 - 16MHz ,视使用情况而定 IFGl &- ~ OFIFG; / /清零 SR 中的振荡错误标志位 OFIFG for (i - OxFF; i > 0; i-寸; / /延时 while (IFGl 晶 OFIFG); BCSCTL2 1- SELM 2; //检查 OFIFG 是否消零 //选用 XT2CLK 为 MCLK 的时钟源 在使用 DCO 时,一般会使用前面提到的内部非易失存储器的信息段,里面有 DCO 的 校准信息 。 信息端里面的数据可能被用户擦除,所以在使用前建议检查信息端的信息,可 第3章吃透MSP430单片机的构架 29 按照以下步骤进行: if (CALBC1 8MHz :20xFF I I CALDCO 8MHZ ~; OxFF) { 11 检查校准信息是否被擦除 (FLASH 被擦除后数据为全 1) 。如果是, DCO 配置不成功, CPU 进入死循 环;如果不是,将正常配置 DCO 为 MCLK while (1); BCSCTLl = CALBCl 8MHz; DCOCTL = CALDCO 8MHz; 3.5 低功耗模式 对于嵌入式处理樨系统来说,低功耗设计有 3 个基本原则: · 工作频率和功辑成反比关系 。 · 工作电压和功耗成正比关系 。 · 工作棋块数量和功耗成正比关系 。 MSP430 系列 MCU 具有强大的低功耗模式设计 。 在不同的低功耗模式下,配置不同的 时钟信号来降低 CPU 及工作模块的工作频率;选择性的关闭暂时不使用模块和相关的时钟 信号来降低工作模块的数量以达到降低整机功祀的目的 。 MSP430 的 5xx 系列和 6xx 还支 持用户设置内核电压,通过降低内核工作电压来降低功耗 。 低功耗模式是 MSP430 的特色功能, 一般情况下, MSP430 分为 6 种工作状态,分别是 活动状态 (AM)、低功耗模式。 (LPMO) 、低功耗模式 1 (LPMl )、低功耗模式 2 (LPM2)、 低功耗模式 3 (LP M3 ) 和低功耗模式 4 (LPM4)。 对于 5xx 系列的产品带实时时钟 RTC 的 信号还具备低功耗模式 3.5 ( LPM3 .5)和低功耗模式 4 .5 (LPM4.5 )。 根据不同的应用合理 地选用低功耗模式可以有效地降低 MSP430 功耗 。 图 3 - 8 是 MSP430F21xl 工作在 lMHz 对 应于 AM 模式和低功耗模式下的电流消耗 。 从图中可以看到低功耗模式下,电流消起要远 小于 AM 模式。 300 3主 '1 0.9 0.7 . 0.10.1 AM LPMO LPM2 LPM3 LPM4 图 3-8 不同工作模式下 MS P430 的电流消辑 下面对各种 工作模式做详细的介绍 。 30 第一部分预备篇 MSP430 的低功耗模式是通过状态寄存器 SR 各位的配置来完成的, SR 寄存器如表 3-6 所示。与低功耗模式相关的是系统时钟控制位 (SCGO) 和 (SCGl )、振荡器关闭/开启位 (OSCOFF) 和 CPU 关闭/开启位( CPUOFF)o SCGO 位用于关闭 DCO 的直流发生器,也 就是关闭 DCOCLK; SCG 1 位用于关闭 SMCLK; OSCOFF 位用于关闭 MSP430 的振荡器, 包括 LFXT1和 XT2; CPUOFF 位用于关闭 CPU 。 表 3-6 SR 寄存器 Bitl5 Bit8 V Bit7 BitO SCGl C 5 种低功耗模式可以使用表 3-7 区分,表中显示了 5 种低功耗模式下, MSP430 的时钟 信号 MCLK (CPU) 、 SMCLK 、 ACLK 和 DCO 振荡器的关断状态 c 表 3-7 低功耗模式和对应 SR 状态 低功耗模式 CPU MCLK LPMO OFF LPMl OFF LPM2 OFF LPM3 OFF LPM4 OFF SMCLK ON ON OFF OFF OFF ACLK CPU OFF SCG1 ON 。 ON 。 ON ON OFF SCGO 。 OSC OFF 。 状态介绍 CPU 和 MCLK 关断, SMCLK 和 ACLK 可用 CPU 和 MCLK 关断, 。 SMCLK 和 ACLK 可用, DCO 关断 CPU 、 MCLK 和 SM- 。 。 CLK 关断, ACLK 可用, DCO 启用 CPU 、 MCLK 和 SM- 。 CLK 关断, ACLK 可用, DCO 关断 CPU 、 MCLK 、 SM- CLK 和 ACLK 全部关 断, DCO 关断 MSP430 进入低功耗状态后,其 1/0 口状态、寄存器状态以及 RAM 的状态都会保持。 MSP430 的唤醒则是通过中断的方式实现的,不同的状态下可以利用不同的中断源唤醒。低 功耗模式与对应的唤醒方式如表 3-7 所示。 LPM4 模式下,由于所有的时钟全部关闭所以只 能通过外部中断的方式唤醒,比如使用 1/0 口的外部中断功能唤醒。 部分 MSP430 支持 LPM3.5 和 LPM4.5 的低功耗模式。 在 LPM3.5 低功耗模式下 CPU 处于掉电状态( Shut-Down ); RAM 和寄存器的值将丢 失; GPIO 的状态保持不变;备份区的 RAM 内容保持不变; CPU 只能从以下几种中断或事 件来唤醒: RSTINML RTC 事件、 GPIO Pl 、 GPIO P2 。在该低功耗模式下, RTC 由低频的 第3章吃透 MSP430单片机的构架 31 时钟晶体提供时钟源,其他所有的时钟源都处于关闭状态。 在 LPM4.5 低功超模式 rCPU 处于掉电状态; RAM 和寄存器的值将丢失; GPIO 的状 态保持不变;备份区的 RAM 内容保持不变; GPIO 的状态保持不变; CPU 只能从以下几种 中断或事件来唤醒: RST/NML GPIO Pl 、 GPIO P2 。在该低功耗模式下,包括 RTC 在内的 所有时钟源都停止工作,整机功耗达到最低。 不同系列的 MSP430 的低功耗模式下的功耗也不一样,表 3-8 列举了 MSP430 各个系 列的典型芯片的低功耗模式时的典型功耗。 芯片型号 MSP430F149 MSP430F2012 MSP430F417 MSP430F5438 MSP430F6736 MSP430FR5739 MSP430FR5969 AM 280μA 300μA 300μA 230μA 265μA 8 1. 4μA 100μA 表 3-8 f~功耗模式和对应 SR 状态 LPMO/LPM1 55μA 85μA 92μA 73μA 89μA 175μA LPM2 17μA 25μA 17μA 1 1. μA 7 .4 μA 61μA 0.7μA LPM3 1. 8μA 0.9μA 0.9μA 2.1μA 2.5μA 6.3μA 0.5μA LPM4 0.1μA 0.1μA 0.1μA 1. 2μA 1. 6μA 5.9μA LPM3.5 LPM4.5 1. 24μA 1.5 μA 0.5μA 0.1μA 0.78μA 0.32μA 0.02μA 如果 MSP430 处于低功耗工作模式,当可屏蔽中断和非可屏蔽中断源产生时,会唤醒 CPU 进入中断处理程序,如下的操作将由硬件来完成: 1 )入校保护当前 PC 指针寄存器。 2 )入战保护当前 SR 状态寄存器。 3 )清零 SR 状态寄存器(置 GIE = 0 ,屏蔽可屏蔽中断,并结束低功耗模式, CPU 切换 到 Active 模式)。 4) 从中断向量表中取出中断向量到 PC 指针寄存器。 5) 跳转到中断服务程序开始执行。 6) 中断执行完毕后执行 RETI 返回指令。 7 )出战恢复 SR 状态寄存器和 PC 指针寄存器的值。 8) CPU 恢复到原来的低功耗模式。 注意:如果在 CPU 返回原先低功耗模式时改变低功耗的模式,需要在中断处理程序中修改 堆裁中的 SR 控制位的值。 LPM3.5 和 LPM4.5 的唤醒会触发 BOR ,所以从 LPM3.5 或 LPM4.5 模式唤醒需要更长 的时间。在唤醒过程中需要等待重新建立内核电压,在进人应用程序之前还会执行 BOOT 代码。所以如果不是对功耗有特别的要求,尽量少用 LPM3.5 和 LPM4.5 低功耗模式。 图 3-9 演示了 MSP430 的各种低功耗模式切换和唤醒的过程。 32 第一部分预备篇 (:=>1:作筷式 c) 郁件 一~ T.作模式 图 3-9 MS P430 低功耗模式切换示意图 褒 3-9 低功耗模式对应的唤醒方式 低功耗模式 LPMO LPMI LPM2 LPM3 LPM4 | 唤理中断源 I 定时报 、 A 町 、 DMA 、 UA盯 、 W町 、 1/0 、比较器、外部中断、 盯C 、 φ行通信、其他外设 I 定阳 、 ADC 、 DMA 、 UA 盯、 WDT 、川 、 比较貌 、 外部中断、盯C 、 取行通信 、其他州 I 定时怨、 ADC 、 DMA 、 UA盯 、 WDT 、 uo 、比校器、外部中断、 盯C 、 。行通信 、 其他外设 I 定时稽 、 ADC 、 DMA 、 UA盯 、 w町 、 11 0 、比校器、外部中 断 、 盯C 、 审行通信 、 其他外设 I 外部中断 MSP430 各个系列在低功耗模式下的 唤醒时间 有所不同,表 3- 10 列出了各个系列的 一 些典型的芯片在不同的低功耗模式下唤醒进入工作模式的时 间 。注 意,部分芯片从低功施 模式唤醒到工作模式所需的时间和工作频率有关,具体请参见详细的数据手册说明 。 亵 3-10 各系列 MSP430 从低功耗模式唤醒到工作模式所需的时间 芯片型号 MSP430F149 MSP430F201 2 MSP430F417 MSP430F5438 MSP430F6736 MSP430FR5739 MSP430FR5969 LPMO 立即 立即 立即 立即 立即 0.5μs 立即 LPM1 立即 立即 立即 立即 立即 12μs 6.0μs LPM2 6.0μs 1. 0μs 6.0μs 3 .5μs 3.0μs 12μs 6.0μs LPM3 6.0μs 1.0)lS 6 .0μs 3.5μs 3.0μs 78μs 7.0μs LPM4 6.01-15 1. 0μs 6.0μs 3.5 μs 3.0μs 78μs 7 .0μs LP M3. 5 / L P M 4 .5 N/ A NfA NfA 2.01-15 2.0j.lS 310μs 250μs 第3章吃透 MSP430单片机的构架 33 3.6 中断系统 MSP430 的中断分为 3 种:系统复位、非屏蔽中断和可屏蔽中断。系统复位指向中断向 量表(表 3-11 )的最高地址 OxFFFE 。非屏蔽中断和可屏蔽中断根据能否被 SR 寄存器中的 全局中断使能位 GIE 禁用来区分,非屏蔽中断不受 GIE 的控制,具备独立的中断使能;可 屏蔽中断除了受本身的中断使能控制,还接受 GIE 控制。 在 MSP430 中非屏敲中断主要有 3 个,分别是来自 MSP430 外部管脚 NMI 的触发、 FLASH 非法访问以及振蔼器错误。非屏蔽中断都指向中断向量表中的 OxFFFC 地址。 MSP430 具备大量的可屏蔽中断,定时器、 ADC 、 DMA 、 UART 、 WDT 、 1/0 、比较器 等都具备中断功能。不同的可屏蔽中断优先级可根据中断向量表决定. G2 系列的 MSP430 中断向量表如表 3-11 所示。可屏蔽中断的中断向量表从 OxFFFA 地址开始向低地址扩展, 地址越高的中断向量表所对应的中断优先级越高。 每个中断向量在中断向量表里面占据一个 2Byte 空间的表项,这个 2Byte 的空间用来 存储对应中断服务函数的首地址. CPU 根据中断向量表里的地址跳转到中断服务函数。仔 细观察中断向量表可以看到,一些中断向量对应于多个中断源。例如,地址为 OxFFF8 的 Timer1 A3 中断,当 TAICCRl 中断标志位 CCIFG 置位或者 TAIFG 置位都会跳转到该向 量。又如具备中断功能的 Pl 和 P2 端口,端口中的任意一个管脚发生中断都会跳转到对应 的中断向量。这种中断就叫做多源中断。对于多源中断,中断源中任意一个中断发生都会 跳转到公用的中断向量表项,这个时候需要通过中断标志位区别具体的中断源。有了这些 中断向量表的基础知识,下面介绍中断的处理过程,包括中断的接收和退出过程。 表 3-11 MSP430G2553 中断向量表 中断源 加电 外部复位 安全装置定时器+ 违反闪存密钥范围之外 PC NMI 振荡器故障 闪存内存访问冲突 Timerl A3 Timerl A3 Comparator_A+ 安全装置定时器+ TimerO A3 TimerO A3 中断标志 PORIFG RSTIFG WDTIFG PCKEYV NMIIFG OFIFG ACCVIFG TAICCRO CCIFG TAICCR2 TAICCRl CCIFG TAIFG CAIFG WDTIFG TAOCCRO CCIFG TAOCCR2 TAOCCRl CCIFG TAIFG 系统中断 字地址 复位 OFFFEh (不)可屏蔽 (不)可屏蔽 (不)可屏蔽 可屏蔽 OFFFCh OFFFAh 可屏蔽 OFFF8h 可屏蔽 可屏蔽 可屏蔽 OFFF6h OFFF4h OFFF2h 可屏蔽 OFFFOh 优先级 31 最高 30 29 28 27 26 25 24 34 第一部分预备篇 (续) 中断源 USCI AO几JSCI BO 接收 USCI BO I'C 状态 USCI AO/USCI BO 发送 USCI BO eC 收/发 ADC10 1/0 端口 P2 1/0 端口 P1 未使用 未使用 安全密钥 (BSLSKEY) 未使用 中断标志 UCAORXIFG UCBORXIFG UCAOTXIFG UCBOTXIFG ADC10IFG P2IFG.O 至 P2IFG.7 P1IFG.O 至 PIIFG.7 系统中断 可屏蔽 字地址 OFFEEh 优先级 23 可屏蔽 可屏蔽 可屏蔽 可屏蔽 OFFECh 22 OFFEAh OFFE6h OFFE4h OFFE2h OFFEOh OFFDEh OFFDCh ~ OFFCOh 21 19 18 17 16 15 14 ~ 0 微控制器使用过程中一些突发的程序跑飞问题,很多时候都是由于没有正确地处理中 断造成的。中断发生的先决条件是对于中断使能位使能,非屏蔽中断要求其独立的中断使 能开启;可屏蔽中断要求全局中断使能和自身中断使能同时开启。 当中断请求到达, CPU 从接受中断请求到开始执行中断服务函数的第一条指令需要 5~6 个 CPU 周期。前面介绍过 MSP430 有两种 CPU ,分别是 CPU 和 CPUX 。其中 CPU 处理过程耗费 6 个 CPU 周期,而 CPUX 处理过程耗费 5 个 CPU 周期。中断请求接收后, 会按照以下顺序处理: 1) CPU 执行完当前指令。中断和 CPU 一般不是同步的或者 CPU 正在执行的指令不是 单周期指令,所以 CPU 先处理完当前指令。 2 )指向下一条 CPU 指令的 PC 被压楼。 3 )状态寄存器 SR 压拢。步骤 2 和步骤 3 的目的是保护现场,为中断服务函数执行完 之后恢复之前运行状态做准备。 4) 选择最高优先级的中断进行服务。中断优先级在这个时候就会发挥作用。 5 )单源中断标志位会被自动清零,多源中断标志位需要软件清零。因为具备1/0 中断 功能的 Pl 、 P2 端口中断标志位属于多源中断标志位,其中断标志位不会自动清零,需要在 代码中于动清零。 6) 状态寄存器 SR 被清零,将会终止任何低功耗状态,并且全局中断使能被关闭 ( GIE)o MSP430 在接收了中断后由于 SR 的清零操作自动关闭全局中断使能,就是说默认 状态下是不允许中断嵌套的,若用到中断嵌套的话需要在中断服务函数中,打开全局中断。 7 )中断向量中存储的中断服务函数地址被装载到 PC 中开始执行中断服务函数。 中断服务函数的最后一条汇编指令是 RETI ,表示从中断服务函数中返回。 MSP430 的 返回过程比进入过程要快一些 主要是因为返回过程的时候 CPU 指令已经执行完。返回过 第3章吃透 MSP430单片机的构架 35 程对于 CPU 需要 5 个 CPU 周期,对于 CPUX 需要 3 个 CPU 周期。按照下面的顺序执行返 回操作: ①状态寄存器 SR 出拢, SR 的设置会立即生效。 ② PC 指针出拢,接着执行中断前的代码。 在使用中断时,如果某个中断开启,则一定要写中断服务函数,即便中断服务函数为 空操作。这个过程是对中断向量赋值,避免中断发生后,程序跑飞。 3.7 系统复位和初始化 MSP430 的复位信号有两种,分别是上电复位信号 POR 和上电清除信号 PUC 。二者的 区别主要在于触发信号不同。 POR 是上电复位信号,它只在以下 3 种情况下发生:在芯片上电; RST/NMI 设置成 复位模式,在 RST/N MI 引脚上出现低电平复位信号;电源电压监测片上外设模块 SVS 的 POR 使能位 PORON=1 时,并监测到低压电压状态发生。 掉电复位电路 BOR 会在芯片上电或掉电的过程中监测电源电压,并产生 POR 信号。如 图 3-10 所示,芯片上电过程中,当电源电压 Vcc 超过 Vcc (start) 后, BOR 电路产生 POR 信 号,直到 Vcc 超过 V(B 肌),然后再经过延时 t(BOR) 后, POR 信号撤销。如果 Vcc 电压上升 速率较慢 , t (BOR) 会相应延长。芯片掉电过程中 , VCC 必须降到低于 V(B IT-) 之后, BOR 电 路才产生 POR 信号。这是个迟滞比较的功能 , V(B_IT+) 和 V (B_IT-) 差值即为迟滞电压凡ys (B IT- ),通过迟滞比较避免错误产生 POR 信号。 Vcc (sta肘, Vhys (B_IT- ), V (B_IT- )和 t(BOR) 的值如 表 3-12 所示。 表 3-12 BOR 电路相关参数 参数 调节 典型值 单位 VCC (start) 0.7. V(B IT-) V V(B IT-) 电源电压上升速率小于 3 V/s 1.35 V Vhy, (B_IT-) 140 mV t (BOR) 2000 μs L一一一一一 PUC 信号是上电清除信号, PUC 会伴随 POR 信号产生而发生,但 PUC 信号的发生不 会产生 POR 信号。能够触发 PUC 信号的事件为: 1 )发生 POR 信号。 2 )看门狗定时时间到。 3 )看门狗定时器的配置寄存器写人错误的安全密码。 4) FLASH 存储器的寄存器写人错误的安全密码。 5) CPU 从外设地址范围 OH ~ 01FFH 取数据。 36 第一部分预 备 篇 v Vcc 叫开--二二三!jgt=== V回阳⑩ 01 I vt I SetSign副岛.r_ POR cin:uitry _ 01 门 ιι恤. 图 3-10 掉电时序困 1 I 系统复位后,系统的初始状态如下 : 1) RST/NMI 管脚默认到作为复位功能管脚使用 。 2) 所有 1/0 口管脚被设置为输入状态 。 3 )外围模块被初始化,其寄存器值为手册上的默认值。 4) 状态寄存器 SR 复位 。 5 )看门狗定时器工作在看门狗模式。 6) 程序计数器 PC 载人中断向量表 OxFFFE 位置中的地址,如果该向盘中存储的地址 值为 OxFFFF ,则器件会被自动禁用,处在最低功耗状态 。 器件复位后需要依靠软件进行初始化,首先要将程序指针初始化 ; 然后配置看门狗的 工作状态,看门狗配置错误可能导致系统异常复位;最后根据应用配置外设。 第4茸 熟悉 MSP430 开发工具,,/:!i 4.1 ccs集成开发环境介绍 CCS (Code Composer Studio )是 TI 嵌入式处理器的集成开发环境 (IDE)o CCS 对 TI 设备具备非常好的兼容,能够支持 DSP 、 MSP430 和 ARM 的开发,本节内容主要介绍利用 CCS 完成 MSP430 的开发。该集成开发环境基于 Eclipse 开源软件框架,包括调试器,编译 器,编辑器,操作系统等内容。 CCS 的 C/C++ 编译器为 TI 嵌入式器件架构做出了优化设 计,在无损性能的前提下,更能满足代码大小需要。 基于 CCS 的 MSP430 开发有很多有效的工具,主要包括 MSP430 的资源库 MSP430ware 、 MSP430 外设图形化的配置工具 Grace 和低功耗代码分析工具 ULP Advisor , 下面将一一介绍。 4.1.1 ccs 基本使用流程 利用 CCS 可以很快捷的完成 MSP430 开发工程的建立和调试,下面介绍 CCS 的基本使 用流程。 CCS 的介绍基于 5.1 版本展开, CCS5.1 版本已经预先安装了 MSP430ware 、 Grace 和 ULPAdvisor 工具。下面将以建立一个工程并完成调试为例,介绍 CCS 的基本流程。 1 )打开 CCS 软件后会进入图 4-1 所示的图形界面窗口,这个窗口称作工作台。工作台 包含了开发和调试的各种视图与资源。工作台的最上方为工具栏,用于选择使用 CCS 的各 种功能;左侧部分为资源管理器,新建工程的所有相关资源会在资源管理器中列出;正中 位置为窗口,文件的查看和编辑都在窗口中完成。工作台的最下侧包括两栏,左边一栏为 控制台,输出项目构建消息;右边一栏为错误消息栏,将输出工程的错误信息。 2 )新建一个工程,依次单击 Fi1e->New->Project ,如图 4-2 所示。 3 )执行完上一步后会弹出图 4-3 所示的窗口,选择 CCS Project ,单击 Next ,或者在 上一步新建中直接选择 CCS Project 。 4) 填写工程信息。在上一步单击 Next 之后,会弹出如图 4-4 所示的工程信息窗口。在 该窗口中需要填写工程名称、选择工程目录、选择具体的器件型号,并选择工程模板。 38 第一部分预备篇 图 4-1 CCS 界面窗口 …'. -…._..叫阿抽 .....‘e 0'" c_ 幽 ‘-、1,0.0..._‘…. <..1... 制串M .. ('_..'、 , ._hh .0 哗 ',k _ f-..l'" m ~r...... ‘-" .,.. _.."1. " .. .... .-唰…问时_.、.. ‘,.蝇_.协_ -悦- 』惜 1........ ......'....-‘ ..1...... V… e 臼mp。饵rStudio v5 …一……皿甲 ^ H‘ghl幅..... ... • wd脏"眩.4! g四" . 、-‘ 缸尊重 a 嗣‘.‘衍ν-错,.吨_,_翩, 1 雀 蝇. . . .…""惆酬,,~、...., 1 B … .~;..1 .v_闸'…, , _ " , . 面- @ 画叫 G4tt1.咱Start.d . . . . . . . .跚跚阳""" ........ 就 ..--:.... ..岖..也· 恤' 图 4-2 新建工程 第4:1案熟悉MSP430开发工具 39 .... ..~四 胃…哩 翩翩..晴圃... c...‘.._ ~'/Ø 酬,刷刷 M 田 O~.… ........0.. ....(_1t 幢幢令 r :.._ _-'" 111.-也 | i jj运~ 。如"…d @ ~ C主主2 阁 4-3 选择 ccs 工程 l'il t:I'iI"'K,IL,.;mrtDl唁iI (1.. α3 脚吗ect ( rroJtcl UIIt .ut b. Sp.CI J:rOJ'C‘..... o..lyol lnt 坠.""‘ "'10 ~u.. 盖.hult locah 幅 刷t 阳 L OtVl U l ..il, : IISP430 监 ïVl &n龟. 1<=ù.cl or t".t f.l ‘工zγ7 性旦旦 同 !;......cli 蛐 巴 町创 USBlω 、. • u ..幅ud setllaø \_, , , froJect. 1 .\1 uut 四..pl. . k业主二旦 τ Ia EaPlyτoJtch ; 函 !蝴 Iop内μ‘y'ro川 . ! r昌; !Ioply 阳AJ霉I.阳.blro叫础Y 'roJ.ctl i r;!Io呻,抖‘ly 盯3沉C 'roj.cl e 圄 B阳‘"U川 咄霉ic lx幅pl .. ! i Bl呻Th. 1ZD li K.Uo l orld a 自 STs/BIOS J,~~~~~… mwmM my 一一写 izûtialiud for 由.. ul.cted d.~c. ⑦ C豆豆3 C豆豆二3 图 4-4 工程信息 40 第-部分预备篇 5 )填写工程名,此处使用英文命名, CCS 不支持中文命名; 工程路径可以默认为软件 指定的路径,也可以手动配置工程路径, 工程路径同样不支持中文路径 。 lio , l.roj cl nMle: T也 I Oulpul lype: b hb1e 回 Use ~ef~吐 t loc以 ion f.rowst 阁 4-5 工程路径伯忠、 6) 选择目标器件型 号。 CCS 支持 TI 的多种嵌入 式处理器产品,首先要在 Famil y 选项 中选择 MSP430。 D'Vlce r ...n l y: I 邸1'430 叫 「 r......nl : 眩Zm | J ~onn'clion: ~川剖旧Dl lU. J: au..a. \J 困 4-6 选择器件类型 选择 MSP430 系列,阁 4-7 中的下拉列表显示了目前 CCS 支持的 MSP430 的各种系列, 这里以 MSP430G255 3 为目标器件,所以选择 " MSP430Gxxx Famil y" 。 Devi ce h均 ~ω 叫 |α创历12 es an 酬pty projecl fully al.i zed for the selected devi ce. 由 4-7 选择 MSP430 系列 选定器件系列后,在器件具体型号列表中会显示出如图 4-8 所示的该系列的全部器件, 这里选择目标器件 "MSP430G25 53" 。 连接方式使用 LaunchPad ,f&载的 USB 接口 JTAG 调 试器 (S BW ) ,所以这里选择默认的 " TI MSP430 USBl [ Default]" 。 第4:1段熟悉MSP430开发工具 41 Device 抽l.割81蝴1t均 h忡s岱S阳P阳43 E如如V"1创8n川t仁: 陌l功拥ω 臼芷口xFe刽m刨t跚h川捕踊'l让毗肌吐l圳叫心Y句 In 旦。nnect.i on : MSP430 USBl [Default) Þ Advωced set tings • Project templates and ex割。ples Ityp~ fll ~el ! t l<' 卧 E E·pt y Projects Ib E.pty Project 卜 ~ Empty Assembly- only Project e 卡 lër Empty RTSC Project ~ Elllpty Grace ωSP430) Project r; é. ~ Basic Ex8lllples Bli 出 The LED ~ lf..ll n 霄,川 A < 图 4-8 应挎 MSP430 具体 型号- 7 ) 选择工 程模艇 。 CCS 预 置 了多 种 工 程模板,如 图 4-9 所示,有 空 白 工 程 、 空白汇 编 工 程 、空 白 RTSC 工程、空白 的 GRACE 工 程以及 一 部 分 施例工程 。 这里选择 "Empty Project" ,之后单击 " finisb" 。 , Project templates and ex明pl 臼 l ~如 hBBhh EBKBE l - ‘ -E· S f国 山o:,rtIyt {-:im : t Fh m c --、 sm sm s ca leS leLAA tyr Firv.-na‘.-..a.A,、. t臼d -1 mmu 辅 2q f p l 。 & pzt n r reOJ‘. ZH&飞 d . , 1且 、 -, E. 、 u'Ae唁A 2yqd V·-Ae h‘ E·i · -·1·-3 ·B · 国 卜 -i E~回回· V V EpEpEp M 叫 町 e F D D Z V 伽 l lw e e M --BiliN 1wm ­ nr e •• vdnu - aunc --、 4 zmVA a a ·、 rn B ··U JZ ·"、A V 、" U - 、 τ。 J --Jag A曹 、 V础 - ,ι , Im j h 田 mm V- - 困 4 -9 选择工程模板 8 ) 空 白 工程新建完成 , 如 图 4-10 所示,可 以在窗 口 的编辑器中写入代码 。 42 第一部分预备篇 | 事 (CS F. dlt 10 TOGG川川 C 川仁lILIJl…巾 ' llh ld.l VU., 1""1 μh troJect &- Stt叩 ts laa.tow Hù.p ~- 和 ,.~ - 。' ~ IQa:s ...吨 缸 " 。白 、/ 2 .. ftIa.1.n.c 3 -/ 15v6ol·d ...‘D (vot void _in (void) WDTCTL = WDTPW + WDTHOLD ; unsiqned int i; PIDIR 1= BITO ; //设置 P l. O PIOUT &= - BIT; 1fhil. (l) P lOUT ^= BITO; for (i=O; i< 20000; i++); 10 )编译代码 。 如图 4- 11 所示,右键单击资源管理器中的对应工程,然后选择 " Build Project" ;或 者使用快捷键 Ctrl+B 。 11 ) 编译过程 。 在编译工 程中会弹出如图 4-12 所示的进度框,在控制台中同步输出当 前构建信息 。 12 )编译出错 。 在上面的代码中故意预留了 一 个错误,如图 4- 13 所示,所以在控制台 和错'位信息窗口中会指出当前错误,编辑窗口中会指出错误行 。 指出错误行并不能肯定是 该行代码出错,可能是前后某行代码出错 。 如图 4-14 所示,应将 "P I0UT &= ~ BIT" 语 句修改为 "P 10UT &= """"' B ITO" 。 第4章熟悉 MSP430开发工具 43 9~ 罕 事 面;. G8IC!_EIP I 9~ m且皿~LmlIE一_u:;,'" 崎+,t Bin...iu aew 国画~ b.cldu 'c!o 俨 &!(i坠 D.b吨 U vQPy .l. ti ,4 1战川创 ~,川' ω~ .'_Irl. e )( Q_ t.• .tJ 略问:融部3!' Sourc. ' R.n电. . . 1/ ' 2 - t"IIa.l.ll.Ç z 禽J C 龟r1+唱: 芒wVV O.h... F2 自 幅.in , 153.b> 0: WDTI 设置: 部矗1..pOT 飞 ... ‘,.:l !xp自、 ShQW Ih111d S.Uin... _ _ _ _ _J:r0 : -圄lIIIOIIIIlW圃 ChU\ Proj.ct. 2000- 心 R.fu曲目 C101_ '..oj .c:\ ‘B iU Confi。据ratíons , .‘k. T‘ r .ts lndn Ad.d 1ilu .. ~.b‘, T皇" C帽P.ar' 'i 由 R.ulore fr_ 1.ou1 Ki storX. , • SOW ' C' R. f&c:‘or 'tOp t.r t... 且 I+!t>‘ w ar.mIII!IG…t ~ 川inυrojecl 阁 4- 11 编译代码 L'l l呕I . . , G.ner..tir、, k.fil. for source folder D.bu 口国豆豆豆iJE正在某位7业 lRlll\~ i~n ~~ckgro_\lI\_dj 1 Co.nc.l 11 !!..tails >> 1 因 4-12 进度框 … >> Cozap11ee1on r.il\lr食 omake: (main.ob' J ! rror 1 beeause of i qmAJce:τ a. roe 巳 '811' nocεe.m6de err。言'5. …. …· 81lild !'inubed 图 4-13 错位信息 ?目。 11..枫组rc. .ü n. ε htl比 /IO 44 第一部分预备篇 ø TI Resovce E咐。rtr 1 /* 2 ." ma主n. c 3 */ 4 骨 1nclude 5 unsiqned cbar FLAG - 0 ; 6 void delay(); 7 void main (void) 8( 9 WDTCTL - WDTP剖 + WDTHOLD; o unsiqned lnt 1 ; PIDIR 1- 8ITO; //设置 P1. 0和 PL 6方向为输出 PIO盯俨"革言: wbile( l) 8 19 120 1 PIOlJT ^= 8ITO; for(i=O; i< 20000; i++); 图 4-14 错误行 13 )修改代码后再次编译 ,这次会顺利 完成编译 。 如图 4-15 所示,在控制台中会输出 "Finished Building target:IO TOGGLE.out" 。 e! Co".01l民 I .0.仓|龟I~ 因岛 出国. ~ . 白白 αT Bui1d Co....01. [10 口lGGU] -、~--r"",町T立re也~~'画.,-、飞=司宫飞飞画圈昭宝,...~画臼F古亩~ - 1 "F:/TI/ccsv5/cools/compiler/m3p430/1nclude" - 旨主 -~read libs --warn seccions --rom model -0 "10 T佣GLE.ouc" ". /main .obj " - l"libc.a" ".. /ln lc m3p430q2533.cmd" 'Finished building carget: 10 TOGGLE.ouc' n川 *w** Build Fin~shed ***由 ~ 图 4-15 编译成功 14 )调试 。 将 LaunchPad 通过 USB 电缆连接到电脑,并单击工具栏的 Debug 按钮 。 …- :‘- e ~ - i !jl f 因 4-16 Debug 按钮 15) CCS 进人 Debug 状态 。 进入 Debug 状态后,目标 MSP430 器件被暂停运行,图 4-17 中箭头指向的语句表示当前待运行的语句 。 16 )在 Debug 窗口中有一排调试按键,如图 4- 18 所示 。 第4~军熟悉 MSP430开发工具 45 , I:íiüiiili!l!l__"_"IM..'nm川 C巾 Co.poser St UdlO , lU. Ui l VI'" b'oj I.:t þols B:四 S町呻ls Ilt~d.O'Ir }1.1 • 内叶. .囚固 - 珍如h川机叫b肌川b问.u吨川呻μ斗 ‘咖州t吨 ~1 - …… 口叮白 aωH 智轨机l问x呻仙' … l晦. • ~立-队. 吧愣声 3丸. 吧⑩~ .反瓮 〈、þ' ‘心~ ~龟坦 e il lÿ mTOO旧 [Cod. Co.pOUI' Sludi 0 .. D..,ü . 0,1.唱吨] iI ~ π 酣明阳1!lSf.明白U呻uuhd) == ..inO ... ..in.. .::9 lhC盹 == , .41 c_int.∞',.þu.i \0 oxα陆 (th. utry .iftl r . .c:h . . . .. i tM Cor. R."川的 fi :M Sp.ciùJ回cliol\ Q) r.A ADClO ØI fi't. 5,.st幢,_tloà '0 w r.A nuh liI ~ 1'\_1_2 6iI r.t. 'orl_3_4 . æ !*' Ti..呻P I EiI ~Ti.ul_1日 ) .., 1.< @πInourc. bploru 1 ,. 2 .... aa.ln.c ., :立 2w 3 m则仙 刷 d刷 即 f 」叫 d m 阳 U 圳 回 m m m 归 m 袖 " t m h 川p 叫 川 剧…… 如 : z肌 叫 HM- - bt d w AT Z M嚼 …由 翩 bem 切 向 为 输 出 町 J, RA U < 句4 m 120 J F百万1 m TQG(冠Z MSP430 : Proqra.m loaded. Code Size - Text: 188 byçes Oata: 10 bytes G:!~rR': I 回~~Gil C 扮 =0 VÙ . UI Ðucrip ^ 自由 : 0" ~ : Li<.皿刊 1 frit仙 s..,.t, Ins.,.‘ 9 : 图 4- 17 Debug 界面 圈 4-18 调试按键 各键的作用如表 4- 1 所示 。 媳 一伽-m Resume ,从暂停处继续运行 Suspend ,暂停运行 - 表 A『 AEE 调 试 拨 键 - - - - 一 一制 一即 一 俐 46 第一部分预备篇 按键 '~- 。 :'ò_ q .在 喝' 龟-d 1句 (续) Tenninale ,终止泌1 试过程 接键作用 Step Inlo ,跳入 。 可'qþ执行迎3iIJ T-葫数就进入,斤,且tI事给 1)\步执行 Step Over ,跳出 。 'Y.L步执行时,在函数内逃到子阁敛ß.t不会.ìll:入手函数内单步执行, 1f1iM将手两 数整个执行完再停止,也就是把子函数作为单独的语句米执行 Assemb1y Step InlO , t(l步调试汇编语句跳入 Assembly Step Ovcr, ')l多· 调试汇编语句跳出 Slep Re阳m ,跳出 子 的童~ 1棋步执行到子函数内时. nI 以执行元子函数余下部分, .tt-返附上一日 函数 Resel CPU , i1.位 u 标 CPU Reset ,巫新的 ~J程序 Refrcsh ,刷新 17 )单击 Resume 按钮,即 可珩到 MSP430 全速运行,极上 L ED 闪烁 。 单 jj. View ,如 罔 4-19 所示,可以打开 Variables( 变革t ),如图 4-20 所示 j Exp ressions( 表达式),如阁 4-2 1 所示 j Register (寄存器),如阁 4-22 所示 j Memory Browser (内存查看'器)和 Breakpoints (断点)等查看窗口 。 在程序暂停状态下可以看到查看日标的值 。 筝'何 rt~ l'...j"tlx如U i \; ID i~o.Ui.. . #1 1:..'"必1., ;e!tus.l. ~Itft( :( t.."t 阳5""由圃 '_Scr刷吨阳,tl. =1....,.bl1 |IZELe l!.'!l.".tus GJfr.,r刷刷 @n怜1,0._,,叫" ffh啕 lah Ot1or ι 等, 1- .f. 飞.' .. ~., oo 恃 Yui蜘常r.,rmi... r'::lt".tt1, 匀 .tly )tllt 1U rn曲。 =i s,.t._Qt 511U IgIIflC! cIlar ï ..AG c 0: 6 回14 delay(): a~旨邸 D.b吨 I!ac >> 句 也 自 8973 堂。'目 。 IIH,n,h 幅 1..衡y l句肝4 1tp,tlf 1....,. 1..,.4 ltø,\tr 1....,. 1..,.4 10".\.. '蛐笛y lt;>pt4l.p.t" 1....,. Itpp.4 &.".ttr p.'I 1.何1 t;> l.".t" 1....,. ltpp..I.p.ttr" 1...,. 1t;>pt4I.".t" …·民 图 4-19 View 工具栏 lI.... ~ t中 a 第4章熟悉 MSP430开发工具 47 Typ. unsi lJltd int Volu. 图 4-20 查看变量 又在 Locati on R.gi sltr R1S Typ. * voi d + .Add n... '~.PT'u3i V.J.u. 缸回)2 1 Addr us 18 )双击编辑窗口的最左侧,因 4-23 中的阴影处,会在对应行设置断点,程序运行到 断点会暂停 。 ø n :&noUl'ce !JcplOl'." 1/' 2 • 顶帽 in.c 3 ~/ 4 'Inc1ude <皿sp430q2SS3 . h> 5 unsiqned Char f"L且,G - 0 ; 6 vold delay () ; 7 vold _tn (VOld) 8( 9 . . - WDTPtI +阳801.0; ll10 unslqned int i; mERWBm H设蛋白 。和 P1 .6!; 向为输出 12 P1α1T‘- -8ITO; 13 Vh lle (l) 图 4-23 断点 19 )单击 Tenninate 按钮,退出调试 。 48 第一部分预备篇 4.1.2 资源库 MSP430Ware MSP430Ware 是 MSP430 的资源集合库,它收集整理了跟 MS P430 相关的所有资料 。 Code Composer Studio 5.1 版 本已经顶先集成了该 t 且,低版本的 CCS 可以悦独安装该 t 具 。 MSP430Ware 整理了用户手册、数据手册、勘误者、范例代码、 MS P430 相关库以及各 种开发工具等相关资源 。 开启 CCS 后, TI Resource Explorer 前门中就可以看到 MSP430ware; 或在通过 View->TI Resource Exp lorer 开启 MSP430Ware ,如阁 4 -24 所示 。 〈主主D ..,_,......... .…·民 .圄蛐嗣.肉"_.回.._ .. f . IW1....,_.阳晒。_~.l6e n llU'tJal*-...CDt町. .,篝旬-,....._"" • .. ......MpI-.......…......._....IfIII.,......,...间"‘圃_ 血..- ... · 吨....四._……… ...t..,......‘....….._ …~ .. · 叮...….,...-........飞拥"……‘...._…....嗣…_.… - _ . .佩 ",...,,~Þt.M刷...lJ4 rotnt <IM -_ 阳WlIOc:.ð .aM to ....,....,。阳帽队配~''''''''侃"嘟 ......ck .... ... 向帽,唱, 翩翩 "'''oødr鸭"储缸测.... .钩..... 栩栩圃'..‘,_,间" . ‘n......... ..,幽...凰...,........啊.唰喇躏酬'阳..,..εH …_ 咱恻盹 帽‘ ~..IrIII ,.,...1II曲 · 副....曲锺‘ . .‘…· . .筐=. . ~... . ..坦鱼缸· . c_扁扁-帽缸_..-刷,.,.................…- {刽 4-24 TI Resource Explorer MSP430Ware 的 主界面如阁 4-25 所示,在左侧的资源将巾分条列举了各个系列的器件 相关手册和范例、开发 工具和 支持障 。 .. '0400_.-.. . # ._‘回 . , .. • # 1ISHD1_ 帽h p ........ G.o‘ . . . . . . h l. . .嗣U .. …m也叫 ‘"'.... ..唰 .._ G '--1旨"毒" .. , 由啤阳" .. , w咽h … ,.. . , 由咽圃阳,.. ,翩陆国 . # 0::'帽忧" . , 由蛐腼 刷 , ....‘'.....‘,.... M 曰 "‘....1 .. .....-比.. ... 咱,四.-问..hd.唰 阁 4-25 MSP430Ware 界面 第4j在熟悉 MSP430开发工具 49 4.1.3 图形化外设配置工具 Grace 使用介绍 Gracc 是 Tl 针对 MSP430 推出的阁形化配置 工具。利用该 t 县,开发人员可通过与按 钮、下拉菜单、实用弹出窗口的互动生成简单易懂的 C 语言代码,自动配置摸数转换器、 运算放大器、定时器、串行通信帧块、时钟以及其他外设装置 。 下面的内容将介绍如何使 用 Grace 完成外设配置。 1 )新iJ!L:程。使用 Grace T.共则要求新建一个 Grace T 程,流程跟新建任何一个 CCS 工程一致,只是在工程模板中需要选择 "Empty Grace ( MSP430 ) Project" .如图 4-26 所示 。 ‘ ... ProJ.ct _p1.to. and u_p1 .. b啊 a(:] 18附 rroj.cts fa E.pty I'roJ.ct r; E.pty ;......1>1y-叫y I'roJ'ct I ::: !nabl.. proj.cl 也. US' .0 lh.l oyofuGcr...c. .c.n..ptlhu.c".yuoyor , 人 『 凹nfiguro your ponph.rols, tntnto ‘ r'Wlti.. lnÎ t1 ell z:.h 00 C:od.... nd col1 lhi 萃 codo fr睛 yo= .ppllc.hon ^'l 1 I I g 队pty 町吉C l'叫 .ct a 自 BBasEiicilJI4xi.i..Mp'1....Wð国--- |川|巳阳川窒叮P庐叩叫r归。o勾J川… |cμolls lαh. C.幅n tr剖 .todi山a剧.1I‘01 川‘.li 。n帕 I阳 c归。d. 咄d .x川 阳川its. I '1 ~Bli由 Th. LlD I ...y ",oro poriphorol-sptci fi c tx嗣p1 .. ‘ v u-wail h1. in lh. Gr .c. lx帽pl.. -~ r.:. 1I.11. '.rl~ ..chon of lh. TI &..ourco !xploror ----"" )' (.cc....d vi. lho 叭...->T1 &..ourco .., ~ 阁 4-26 新建 Grace 工程 2 )新建工程后,会弹出图 4-27 所示的 Grace 配置窗口,或者双击左侧工程资源管理器 的 main.cfg 文件,也会弹出该窗口 。 …... ,.., 。" .. .!.to _J"‘ þ-' 1- Sø-~f"l l l~倒恤 .... 电… .... .111 '.1.......,. :1 ..... ... .~~ Ia' . . ... . 自‘‘..­ ..... .... ."‘.'.‘副-阳 .... 'k酌-. a c.冒充 Wel曲嗣· G.:ii:王三::JG:至茎~ ·恤'申‘._ ... .t.... _ ..OOIIr.... .. …..-..__....抽..-."~."a‘,旧.· . 帽 ‘.… lade. - - - 7 ' --- 'r.(Mt 雹 0 " ‘tK1 I.n.o '/ ••t tt.oJø. (U/K\l./......,..tO/cd/CSL.h> 11/. "u....' /‘ --- _ t.".‘ _u -- .tec. c‘.,. - ..町、, n , IUC ·国 L_,..nUJ 11 l.<>>), 11 ,.u. ,.‘..r 回由 be :re <<<<< ~‘.ra 10" ul 图 4-34 配置完成 9) 使用 Grace 完成了外设的配置,然后继续完成工程相 关代码的设计 。 第4i撞熟悉MSP430开发工具 53 4.1.4 ULP Advisor 低功耗应用代码分析工具介绍 ULP Advi so r 是 TI 推出的低功槌代码分析工具,用于指导开发者充分利用 MSP4 30 超 低功施特性写 :fi 高效的代码 。 该工 具通过将代码与低功耗规则表单逐条对比的方法提出低 功辑代码修改建议 。 目前,低功括规则 一共有 15 条,下面将逐一介绍各条低功耗规则 。 规则 1 . 1 :确保低功耗模式的使用 。 低功屁模式 (LPM ) 的使用是 M S P43 0 实现超低功艇的重要途径 。 最大化 M S P4 3 0 处 于 LPM 状态的时间,最小化活动状态的时间,可以非常有效地降低 M SP430 在应用中的能 量消糙 。 在 LPM 模式下,片上外设可以独立于 CPU 运行 。 只有当遇到 CPU 必须介入的俯 况时,可以唤醒 C PU 并快速返问 L PM 模式 。 所以,在代码中遇到等待外设任务执行完毕、 等待中断或者使用 Wh i le ( 1 )轮转的悄况下,建议让 M S P4 3 0 进入低功耗状态 。 当 ULP Adv isor 检查代码,未发现任何让 MSP430 进入低功糙的语句时,会出现该 ULP 边议 。 规则 2 . 1 :利用定时器模块完成延时操作。 在微控制器的使用中经常会遇到需要使用延时的情况,有一 种做法是通过 CPU 计数或 者做空操作的方式来实现 。 对于 M S P430 这样的微控制器, CPU 是片上最大的电流消耗者, 所以使用 C PU 空操作完成延时,对于低功耗应用是非常不利的 。 M S P430 片上提供了看门 狗定时器 、 基本定时器、 Ti mer_A 、 Timer_B 等多种定时器模块,这些定时器模块可以独立 于 CPU T.作 。 当需要延时的时候,可以让 MSP430 进入低功揭模式 , 相应的 CPU 也会被 关闭,定时器会保持运行状态 。 定时时间到, CPU 被唤醒,微控制 器进人正常运行 。 当 U LPAdvisor 检查发现有以下的况时,会显示该 ULP 建议 。 1 )使用 _NOP () 语句或者 _no_ op e ration() 语句 。 2 )检查到延时计数操作,比如谓句: vo1atile int i & MAX VALUE; while ( . i-- . i > 0 ) ; 3 )使用延时函数,如 _d elay_cycles ( NUMBER_OF_CYCLES)。 规则 3 . 1 :尽量使用中断而非循环检查标志位 。 MS P4 3 0 的外设都设有状态标志位 , 不同 的外设还 对应有中 断 向盘 。 外设的运行不一定 与 CPU 同步,所以就存在不停地读取外设状态标志位的方式来确定其运行状态 。 M S P43 0 的外设对应有中断向盘 , 在外设的状态标志位置位前, CPU 可以处于休眠模式 。 当对应的 状态标志位置位时,利用中断功能, C P U 可以自动唤醒并跳转到中断服务函数直接执行对 应的操作 。 在此之前 CPU 无需循环读取状态标志位,有效地减少了 CPU 的工作时间 。 当 ULP Adv isor 检查发现有循环读取状态标志位的情况时,会显示该建议 。 循环 读取状态标志位的操作如 : wbile ( ! ( TAI CTL & TAIFG )) 或者 wbile (ADC1 2CTLl & ADCI 2BUSY )。 54 第一部分预备篇 规则 4.1 :禁用未使用的通用1/0 口。 微控制器没有使用的1/0 口管脚,如果既没有禁用也没有进行配置,管脚上的空载电 压或者直通电流可能会导致 MSP430 的整体功耗增加。建议禁用通用1/0 口或配置为输出 低电平。比如使用 P1SEL = OxBE 或 P1SEL = OxEF 使能管脚的第二功能(非1/0 口功能) 或者使用语句 P1DIR=OxFF , P10UT=OxOO 将其定义为输出低电平。 当 ULP Advisor 检查到选择的 MSP430 器件有端口既没有配置也没有禁用时就会出现该 建议。 规则 5.1 :避免计算密集型操作:模操作、除操作。 规则 5.2: 避免计算密集型操作:浮点数操作。 规则 5.3: 避免计算密集型操作:打印操作( s ) printfO 。 模操作、除操作、浮点数操作、打印操作有一个共同的特点,都非常耗费 CPU 运行 周期。特别是打印操作 sprintfO 和 printfO ,微控制器构架本身不支持这种函数,编译器 需要调用附加的库来实现函数功能,这样会产生额外的代码。对于这些操作应该尽量少的 使用,特别是 MSP430 作为从机使用的时候,建议将计算量大的操作交给计算能力更强的 主机完成。如果必须使用可以将代码搬移到 RAM 中运行,这相对于在 FLASH 中运行可以 降低功耗,但是需要用户自定义的链接文件。 当 ULP 检查到模操作或者除操作,会显示规则 5.1 ;检查到浮点操作,会显示规则 5.2; 检查到 sprintf ( )或者 printf ( ),模操作或者除操作,会显示规则 5.3 0 ULP Advisor 目前 还无法识别代码是否被搬移到 RAM 中运行,所以搬移后仍然会显示。 规则 6.1 :避免在没有片上硬件乘法器器件上做乘操作。 MSP430 的大部分器件都具备硬件乘法器,但是有小部分器件没有改外设。在没有硬件 乘法器的器件上做乘法操作,编译器会产生额外的指令来模拟乘法运算,增加了 CPU 的执 行周期。如果可能的话,建议删除代码中所有的乘法操作,或者在 MSP430 作为从片的时 候,将大计算量的运算交给主机。在乘法运算不可避免时,建议使用移位、相加等方式替 代乘法运算。 当 ULP 检查到工程中的目标器件没有乘法器,并且代码中有多个乘法操作时会显示该 规则。 规则 7.1 :尽量使用局部变量而非全局变量。 MSP430 的 C 编译器会将全局变量放置在存储空间的 RAM 中,但是局部变量会直接分 配到 CPU 的寄存器中。相比较于访问 RAM ,甚至于 FLASH ,访问 CPU 寄存器是最快速 高效的。所以使用全局变量相对于使用局部变量会耗费更多的访问时间和功耗。在 MSP430 的代码中,建议尽量使用局部变量代替全局变量。 当 ULP 检查到一个静态的全局变量仅被一个函数访问时会显示该规则。 规则 8.1 :使用 "static" 或者 "const" 修饰局部变量。 在 MSP430 的 C 代码中,函数中的普通局部变量都是在函数的调用过程中动态的分配, 第4章熟悉MSP430开发工具 55 也就是每次调用都会分配一次 。 这将随着调用频率扩大对代码和 RAM 的要求 。 但是如果使 用 static 作为前缀,该变盘只会分配并初始化一次,而且在整个应用周期内都有效 。 这将减 少因为每次调用函数重新分配和初始化变盘带来的代码量 。 使用 const 前缀,对应的变盘会 作为函数的 一部分存储在 FLASH 中,因此每次调用函数就不需要为该变量'再分配空间 。 当 ULP 检查到代码包含可以申明为 const 或者 static 型的变茧,但是没有这样定义时, 会显示该规则 。 规则 9 . 1 : 大型变量使用引用的方法传递 。 C 函数可以通过直接传递值或者引用的方式传递变量 。 使用传递值的方式,编译器将 产生代码用于将传递的值复制通用寄存器和堆钱中 。 寄存器具有很快的访问速度,但是数 目有限,可能被前面的变白;占用 。 对于结构体或者联合这样比较大的变量需要在堆棋中占 用额外的空间,因此需要执行更多的指令 。 而使用引用的方法传递变茧 ,则 只需要复制变 盘的地址 。 这样一来,执行数据复制指令的次数只跟函数参数的个数相关,跟参数的大小 无关,所以对于大型变量可以有效地减少执行的指令数目 。 数组也属 于大型变盐,但是在 C 语言中,数组以指针的方式传递,所以也属于引用传递的范畴 。 当 ULP 检查到代码中由函数使用传递值的方式传递结构体或者联合就会显示 ULP9.1 规则 。 规则 10. 1 :最小化中断服务函数内部的函数调用 。 中断的使用是保证系统实时性和低功耗特性的有效手段 。 在 MSP430 的开发中,推荐在 主函数运行的过程中,以中断的方式服务外部事件或者外设事件。 为保证系统的实时性,应 保证在中断服务函数中执行尽量少的指令。 因此,在中断服务函数中调用其他函数的实现方 法是不建议使用的.这将引人额外执行指令,如当前 PC 的存储、压枝、载人调用函数等 。 如果必须在中断服务函数中执行 一些操作,可以将操作代码直接写入中 断服务函数,而非 调用子函数的方式 。 在中 断函数中使用宏或者采取一些手段尽量减少执行代码的调用跳转 等 。 如果可以的话,将中断服务函数需要执行的代码直接移入主函数,特别是计算密集型 操作 。 在 ULP 检测到代码中存在中断服务函数调用子函数的情况,就会显示 ULPIO.I 规则 。 规则 11 . 1 :在循环控制的代码中尽量使用低位比特 。 该规则主要跟 MSP430 的 CPU 结构相关,在 MSP430 的 CPU 中设置有常数发生器,可 以用于产生最常用的几个常数,分别是 -1 、 0 、 1 、 2 , 4 。 对于需要访问或者比较之前数据的 指令,这些常数立即可用 。 也就是说如果指令访问或者比较的值不是常数发生器可以产生的 值,就需要额外的指令去完成 。 在循环控制代码中会经常地去比较某个值,使用常数发生器 能产生的值,则能有效地减少执行指令 。 比如以下的代码就充分使用了常数发生器。 fdefine FLAG 1 1 'define FLAG 2 2 56 第一部分预备篇 'define FLAG 3 4 'define FLAG 4 8 void main(void) unsigned int i , variablesFLAG_l; while ( variable & FLAG 1) /*执行操作*/ 代码需要反复的与 FLAG_ 1 相与,将 FLAG 1 的 值设为 1 ,则对应的指令可以立即利 用常数发生器产生的值 。 在 ULP 检测到存在如上的循环控制代码的时候,可以使用 l 、 2 、 4 、 8 这样的数值,却 没有使用 ,则 会提示 ULPl l.1规则 。 规则 11.2 :在 1/0 端口的位操作中尽 量使用低比特位 。 原因跟 1 1.1相似,都是 因为常数发生器的作用。对于需要经常操作的 νo 口管脚,应 该将其选定为 1/0 端口的低 4 位,这样可以有效的利用常数发生器 。 在 U LP 检测到在循环中存在管脚翻转操作的时候,却没有使用到 1/0 端口低 4 位中的 任何一位,则会提示 ULPl 1.2 规则 。 规则 12.1 : 使用 DMA 代替大规模调用 memcpy ( )函数 。 规则 12 . 1b: 使用 DMA 代替潜在的大规模调用 memcpy ( )函数 。 memcpy ( )函 数用来将源地址的数据搬移到目标地址, 需要 CPU 完成搬移操作 。 DMA 可以在 CPU 不介入的情况下自动完成数据的搬移操作,在此期间 CPU 可处以休眠状 态,所以降低了功耗 。 对于未知个数的数据搬移操作,可能是超过 100 个数据的搬移,所 以也应该使用 DMA 代替调用 memcpy ( )函 数 。 在 ULP 检测到代码中调用 memcpy ( )函数完成超过 1 00 个数据的搬移时,则会提示 规则 12 .1 ;检测到代码中存在调用 memcpy ( )函数完成未知个数数据搬移时 , 则会提示规 则 1 2.2 0 规则 12 . 2: 在反复传输中使用 DMA 外设 。 原理与规则同 12.1 一 样 , 在 ULP 检测到至少一 个或者多个循环中存在反复的传输数 据,则会提示规则 12.2 。 规则 13 . 1 :在循环中使用减计数 。 在 MSP430 的 汇编代码中,完成一 次变革-或者寄存器与非零值的比较的条件跳转需要 两条指令;但是完成与 0 比较的条件跳转只需要 BNE 这一条指令 。 所以,每次使用减计数 可以少执行一 条指令。 ULP 检测到循环中使用加计数,则会提示规则 1 3. 1 。 57 第4j在熟悉MSP430开发工具 规则 14.1 :使用无符号数作为标号。 当无符号数作为数组标号的时候, MSP430 的变压器可以产生更好的代码,不过这种影 响很小 。 ULP 检测到使用有符号数作为数组标号的时候,则会提示规则 14 . 1 。 规则 15.1 :使用位屏蔽域操作代替位域操作。 该规则与 MSP430 的编译指相关, MSP430 的编译器可以将多个屏蔽操作合并为 一条指 令,而无法将位域操作合并为 一 条指令 。 所以,用位屏蔽操作代替位域操作可以减少指令 数址,进而减少 CPU 的运行时间 。 在 CCS 5.3 版本中已经集成了 ULP Advisor 功能,只要使能 ULP 功能即可使用 。 在工 程属性中选作 General 选项卡,选作编译器版本为 TI v4. 1.2 (v4. 1. 0 版本之后才支持 ULP 功能),如阁 4-35 所示 。 I 川iII芒一111一r IlU' ‘Ii !uourct Gëñutl ,. Iil lulld 1iiI 1Sf430 C.. .hr h.~... .r Op u 恤$ op‘1.11."0. ‘… ..~吨。"‘幅S laù04. op s 叽" .l.dvl'''' u.蛐ctd Opt lODS iOI 1Sf430 ...由.r D.\oo" r..kT", :J I 伽时 .Q lr gj ,> • c.nl1cv.ho" . ~ D.hu‘ [ Âc.... ) " 111.,.". , Confi"‘u.t .ns •. I r百 I..a 。-.tpv.t ‘". D..,ct ["U1T |EU 嗣\ ~ù..\ .r \". rnhr \u\> t_onn川 0" ~I 郎m 1JSBIω. r..w.t) .J~ [1Sl'4… ~ v I可 W民, u to .hol. proj.f:t) 回..."".山 proj.c:t' s l....'.t-conflcur.hoD nt....hc.uy .. AdYuu:.d ..thap D.Y1 U .......u晦... C帽'P,1.,. ....."恤 。时,..t fo....\ Ul. Ltokv C_ C.l. 坠坦里主主53. ..4 \a.. , lua rQP ort l.br町 t .叶. 国曰 I 1.0.. pOWU .od. OJ>削"崎· ii 82 : So!\wu. 伺) dù.,. 国.133: n吨 po11i吨 抽 Ø4~ 'or\ lruhùÎut iGD 国 85: Procu:u""'G'II'u" lohhU.. 呻.....t io:as ggtMmMU 川 回 7 : V咄咄且. sup. ~ ø 8: Coo.S\曲" 由曰 9: l \lM l ÎotL þ .,....ter 国 13.0 : 1扭 ø 暗E] ll : COfl.S tut 萨tl.u.l or ulllluh m. Ii l2 : Direcl 凰..ory Þ.CCISS 恤呻回吨· fil13 日; lAop (<1田 t.. ø0 '.: Ql Arr _,.- u~d.霍 &l 15: Bí. tfiùds 苦哀 1 。. v l lh咽 COÑI CQr刷刷 .. 1 E豆豆E E豆豆豆2 ⑦且…_.......1 "..t C.-u.d, ~. 图 4-3 6 使能 ULP 工2 C二~ G王2 .......c. ,.也 一一 I IlW二且阻I 1 1) D.t.ctd _ ...u .f' 1" ,....,. . .d. s h.h CÀ幅..uu _.n I 11皿IZ:l (IIU 4.. J) D.t..ch4 uiaituli... r.rl 2 i. 由川r.J.c:t 阳 I tWlZ:且阳Z 4 1) D.hch' utiù"e4i "rt 3 i. 也hpnj.c ‘惚2 t 阻.m:I CI.II..1' 2. 1) '.hct.' sr 也l ~ h.p uiac ..pty h啡. hc_…l1LC' 1m …·‘... I IIlii革二a (141 8. 1) .....,.M. .,u.v"' h ..... •• .. c...‘蛐‘ ...-刷 .ULC f llS!:R MI 13. 1) D.'.ch4 h崎 e锁a\i.,咽 R.c...帷~ 100'. c /VU I鼠, <>00 ....c.t i_ t". -·· ...... l-aazaaIaTT S - -rr,/,r,r,,, p、 , ,,, 险 , 、 CHCHC vH-、C2HU 幢 2HE2H2 1 · 幢 · b •••• , 、 FK,, 、 .. -、 22 ,h 图 4-37 ULP 编译结果 4.2 MSP430 集成开发环境 IAR Embedded Workbench 介绍 IAR Embedded Workbench 是全球著名的嵌入式开发 工具, 该软件为众多微控制器提供 支持。 IAR Embedded Workbench for TI MSP430 (后 面简称 IAR) 是专门用于 MSP430 开 发的集成开发 工具,能够为 MSP430 系列微控制器提供非常好的支持 。在新版本的 IAR 中 还集成了和 CCS 一致的 ULP 功能,可为微控制器代码提出低功耗优化建议。下面介绍使用 IAR 软件的开发流程: 1 )打开 IAR 软件, IAR 软件的启动界面如图 4-38 所示 。 界面的上方是工具栏 ;左侧 :;:|iiTLP|;: 圈 子 也 洲均属 〉问 嗣同H 前 i ••a•;gE za iE --i ‘e·e· ,.,--•• -a 叶 ' 毡 ,,。ad jz !-tIEi a z雹P· a · · m P f Z憾 事 司 瞻 · iit! a,•••,• E · e s .••E,z•‘••" ,筐‘•••e •• ‘a .墨 ‘ , , · · 甚 Z E E - . -R 晴 』E l R g 岗 " '』 - a z ' . E2 e-筐 -。 zs笔 '··sag'"" E草 ES n 笔 6 汉2 哩' 骂 泸 崎-n 罩 量3 6 3 5 毒 草 荡 荡 ‘ g E Z S 鸣 。 雪 是 第g 饵" ' ' 去 5 3 6 " a " '再 R s e s S Z E B B , 。 ' " ' 主 a 鑫 ¥ a s z 写 爱 , 2每 百 哇 " ‘ 蠢 越 -雷 2 0份 a。 E H ­ 草E 主S 巢E 军 " s a n E 写 E E R E Z Z 罢 ' 告 S Z a eE 也 售 量 呈 荡 。 蜒 A WM S A带 咀 蝇 , 笛υ布 重睛 ' 玲 。 , , 。 写繁aR Z 地e 墨 S F E Z 喜g 民 E Z S 吨 虽 M)竟 何岛河 附 蹄H h 常 S H JO牛g ' 畔 VQ g H gOZ M J 白& 圈 子 注 F H H面 包 白 HM市驾 轴 囡 憾 ! 今 F M卢H 部 · 吉 囹 E Z iii ijis ; E v . 、 J, ‘ ,、••• ‘••• 四 。 , 军 晨 i, s a ;E ---azEi ·E 抠 ,- 曹 e· --'E"-aA-h-s a· a‘ 属 · 2董 · ·F · ,•. ..'· ,..,•• -···‘.‘-a岖·''· ··eE•-,•••e·•。-R写dFC确吨'··•·E·•.···a- jiiis·a· " · · a 8 · ·· 军 e ·B·S·S·- 噩 ' 雹 盔 '2 ,哩'e •• 。a a· · · · · '"-m··· ., ‘ e a iiIt!i ··= ·•·•• , ·'··· ·' z · ·· e z · · b 毡 ' 6 2 · 英aS E R S 串 键 画 " ¥ 位 笼 罩 a am啪" 事E S E g e 2 5 要 Q g s z 3 军 军U S Z ZO码。 ••。 笔 『墨 , , 骂EC E --32 Z E 罢S , 事 · · 雀 去 当 传 E Z a π ‘ 军 拘 留 罄 。 E Z Q E 军 6 9 E ..,. zj ••髦 E·g-w·e -E-·E·-···ssa c ,• •zg • p - 2·s ‘•••量曹 ··• z , a · · 2 · ,,‘ -R』,•• 镜Z e n - ­ e、 虫 , g s B E E R 嚼 g h E安 也 呈 击 Z 哥Z 禽 a n Z 喜 写 g z " 事 -鸳 z‘ 霄 6 亚 盖 黛 a ·嚣 E 布 Z 。 $ 2 6 。 嚣 , 。 a 事 键 e n z 2 4 2 · E海 Z S a z -‘ 。 。24、『-S E E 峰 ' 鸳 AH$3津 L飞ι 洲 。 啤油 辑H 围夺 。川 阿 亘哗 幅 常 · 副 叫 畏 温 襟 暗 眉 品甲、?H甜 u 川 附 在 醋 口 协 主 事 精 品 怖 部 描 醋 精 带 溯 口 至ω 喝田 部 陶 渊 E ω。 湖 辩 H B 加 阳 迦 。1 <0 60 第一部分预备篇 3 )新建工程选项配置 。 由于使用的版本是 IAR for MSP430 ,所以 工程会默认使用唯一 的 MSP430 工具链 (Tool Chain ),选用 C 语言作为编程语言,如图 4-40 所示 。 单击 OK 按 钮完成配置 。 !oolchðil町 IMSPω -er明ect t回lplates: l æ ASD IÐ asm 1t}C忡 巳C 回 External曾以成 executab怡 厚I 3 A C 阳oject using default t∞1 sett时s inclu伽19 剧团npty maÎn.c file. E互:=J _c纪~ 图 4-40 新建工程选项 4 ) 工程新建完成后,会弹出如图 4-41 所示的界面 。 新建的 main.c 文件夹中已经初始 化部分代码, 关闭了看门狗 。 ." 1,\11: ~ .t... ,1 川 , ...);1,,,川川 、 .户 11 (.1. l 4i‘[i.. tU)U‘ SO...1....,. 1叫‘(....御酬, o Iòi 1.1 " ~ t f'·川. '1 .:J -r、‘~.~r:'."".~ 句 .. ': 嗖 )' ~ .t. h - 110咀.. …..:;!J hr翩-M-剧-由-、-楠-'--伽-陪-咽-F-气-t_-_-_-__-_-:_-----------------------------~- . . II 111些 ~: 1" lIaOIO_TOGGL.. • I lIinclud.. "i04到.h" t:õ~Ou=qwo I lnt 嗣in( vold ) { 11 Stop to/Otchdog timer to pre四川创me out reset = 幡)TCTL hÐTPW +幌)THOLO; return 9; ..!w!阻厂一一-一 llfd.J... ...., 图 4-41 工程新建完成 h{ '险'严 第4章熟悉 MSP430开发工具 6 1 5 )配置工程选项 。 工程新建完成后,还需要对工程属性完成配置才能开发对应的目标 器件 。 有健对应工程,如图 4-42 所示,在菜单中选择 Opti ons 选项,弹出如图 4-43 所示的 对话框 。 '-_ .._-…a..Rn~~___________________________________________________________'吨 也 剖 晶晶 b 一 二 百 才 同. . 哗..... cl唱 I Stop watch曲11 t{翩俨臼 prewnt t i.-. out Nset ZτCTl .101)τPW 吨.. W THOlO; ........ .lturl'l l; • ,锄,.<tSxx 1.i1y ~ lJ292 cc‘:如南xx F嗣 11y ~ I u 112 .od. I CiJ-.: ...uhtl on ...d, I G.n... c ~I MSP430FRxxx l'嗣 i1y ~ 一一一一-一一 一-=-一」 tosi tion-.nd.ptudmce I…A回lIi田111写_zr.市.-.. 口 !;.od. 阻dTU舍。nly~ ISP430xOxx 1幅 i1y ~ d 哩 '1 邸问3Ox1xx r . i l y ~ , ISP4抽泣"" 1.i1y ~ 口 lxclud. R!SlT ".ct9.rl 监P430x3xx ..ly MSP430刘xx F蛐.1y ~ MSP430,,5xx F酬ily ~ MSP‘3晚31 2 翩SP4拙i23 1 3 郎"抽泣332 ISP4其院333 ISP43O(泣352 俗"事犯自53 MSP4筑路在402 俗P430 voi~n (VOid) e--I ,.. +,, ,". wDTn STD LlqnR E up .• e1 AU. 、 Wn npBMio HJ" J u , 设 、 盯 置 协 叫J ,, - , A 于 ­ P ‘A n.u, nu P10UT 晶- - 81TO ; while (1) ^- P10UT 81TO ; for( 1-0; i< 20000; iT+); oll1l… 巳曲唱町. 第4章熟悉MSP430开发工具 63 口百setti>gs I 由m血 tot 、, 口lllt .""0 Eilt Ðtvict dutriph 抽 ".10 口Q.ve.rTi d.. d.hw. t i钉:00皿 I_ DaS\eObfl ,\即叫院S曰" 「… 口口 I CarCeI I 图 4-45 选择调试器 cat町p.y. Ger阳al Op恤lI1S 巳位村田喃自 As帽由阳 Custxm 队JiId 隘Jid Act阳E I.nker η lLP A由isor k凯嘟"曾 I~…_1 smAab:lr |Factorv Setti1gs 1 ‘ - ci.nn•c i 。也 Irex&s Ins 「俨a气町同回… a甲皿-吧~兜~lIII íP民忑 dM FOr J Ior伊 t VCC (11\ .J I 口 At h10 1也t tT句 .~t ~咽16\6r lll~.~ Ifù. 。自在 自 Ø 5 郁 的h ;. ' ''(、 、 h 因. ~~ ~嗣 同』 鹏飞:1 ~-~ ~~ 。"咱 画L←F咽咀~B.EgB臼umMm·uC ~ -盟 ~ #include F.=.吨.1 unsigned cha俨 FLAG = e; vo1d delay() ; vo1d main(vo1d) { WOTCTL = WDTPW + WDTHOLD; ' uns1gned int i ; P1DIR 1= BITe; PlαJT &= -BITe; 咐1 1le(l) E 而万GGU: 9 '‘ 坐坐wl壁' 2qRadle捕(,}ngdeb恒U~悔d位... 士 " _ ' ; '..1 0 mðln. t lJnlong To回 numbel of errors; 。 T酣睡 nur响ber ofwormng" 0 ....,. P10UT ^= BITe; for(i=e; i< 2eeee; i忡); 面 file tr.... o. ,曹缸吨s 0 .... 峙:. Co1 10 s,s ‘ · 因 4-48 编译完成 ~ ., •• -;:、 ,、, lJno '、 -.筝- 第4章熟悉 MSP430开发工具 65 11 )使能 ULP 功能 。 前面介绍到 LAR 软件也引人了 ULP 功能,默认情况下该功能是 关闭的,需要在 t 程选项中开启 。 在工程选项对话框中选择 TI ULP Advisor 选项卡,并 且句选 " Enable TI ULP Advisor" 选项,如阁 4-49 所示,单击 OK 按钮完成配置 。 配置完 叽P 使能,还需要在 Tools->Options 中使能 ULP 显示,如图 4-50 所示,在 "Show build mcssages" 菜单巾选择 All :ì在项 。 而| ~忡'即· , Gener.Op帽、$ I q 忡国啤曲 ' Ma国咱曲, l F剧呻 S阳>g$ 1 Tl UU'"曲uor ‘- 回ln'U, Tl茧:1 ......., .or cr:!豆iru 主豆豆!llhonS5S旺\uild .UI~ n \JU AdvlSOr confacurehob S.t ec: tive Ul.P Advilor !回 1 1 . Low po".r . .4. Q..PI) us叩 回2 1 S.ft...... 创) 401 .,- 回31 n吨 p.u.吨 回‘ 1 Port alU h ùuth 帕 i囚$1:"叫 FHW tJWMzm 立:" s r;;l 2~ frOCUS1 A<<, 'ow.r Inhnsive oper.honl flo&tin<< pOlnt "一 一一一 二二_il ) "‘主主坠旦旦.ntl 回 1-1ST∞LlCITJlD岳飞 111< l~4…?1J IOJJl iIBS飞I"BlSI\Ib".C'由町b .‘,.4 叫 旦 C五3 仁CanCeI 1 图 4-49 使能 ULP 功能 C帽翩。,、 'Oftt拿 l.y luuhÐØ r ~帽 t",,14.U5吨H L恤刷唱· Wl也 hr Loc lA r.le 1... 鸣" sP.r.o..Jcect‘C.ù Cclrol ‘ D.bu .r ‘s .clt 口Lec ~ld .'11吨..山 (.1, ~, J ‘ r. • lj>or盯'‘. 01. n 1. 11 ,. laùlo 且1 Dulo S蛐. di aloC box.. c 幅 b. .啤pru..cl lÞy..1..:tl 吨­ -n.ñ ‘ ùo唱, 咱'1"" ù.ck 'box Cl.ck .laûl. W q....... Diùocs. h 幅....1. ill I晤pru... 也ù.., \.... I t i 11 .iII 1 ~ 1A' 1 lI!-'l I 图 4-50 使能 ULP 显示 66 第一部分预备篇 12 )再次编译工程。可以在 Messages 窗口 中 查看 ULP 建议,如图 4-51 所示 。 """!9" F帽 11 ut.PA阳$0' 'G飞MS阳30 PROJECT\lO TOt:;GLf\m剧n.c'. IIOe 14 rem阳k l154+O: ωlE.且Jl Oe回cted 1∞p ∞u晴ngup Re∞mmendloops ∞unt down as detedlng zerot 11 easior '0飞MSP430 PBOJECI\lO TOGGlE\mojn 11 关闭着门狗 WDTCTL # WDTPW + WDTHOLD; H 设置 Pl. O 管脚为输出 PIDIR .. OXOli /设置 P1. 3 管"为输入 PIDIR &- - Ox80 11 设置 P1. 3 管"内部为上拉状态 PIOUT '" OX08i P1REN 1 罩 OX08i /1 使自~ Pl.3 管脚的中断功能 PlIE 1" Ox08i /1 设置 P1. 3 管"中断沿为下降沿 Pl IES 1= Ox08; /1 消除 P1. 3 中断标志位 Pl IFG &- ~ Ox08 ; 76 第一部分预 备 篇 //进入 LPM4 低功挺状态并使能会局中断 B1S SR(LPM4 bits + GIE); 1/1/0 口 l 中断服务函数 'pragma vector=PORTl_VECTOR __interrupt void Port_ l(void) 11 消除 P l. 3 中断标志位 Pl IFG &= - Ox 08 ; 11 翻转 P l. O 输出电平状态 PIOUT ^= Ox Ol ; M SP43 0 管脚振荡用于组建触摸按键的范例将在后面的实验部分介绍 。 6.2 看门 狗定 时器 WDT 6.2.1 WOT 介绍 看门狗定时器是微控制器运行状态的监控系统 , 在微控制器内部程序跑飞后,微控制 器的控制功能将进入混乱状态,这个时候看门狗将复位微控制器,重启系统控制,避免产 生不可预料的后果 。 在 M S P43 0 的内部集成了 1 6 位的看门狗定时器,在需要看门狗的应用 中,该定时器可以作为看门狗使用;在 一 些不需要看门狗的设计中,看门狗定时器可以配 置为普通定时器使用,最大化利用片上资源 。 片上看门狗定时器可以简化硬件设计,给应用带了很大方便 。 MSP43 0 的片上看门狗定 时还具备以下特点 : · 可配置为看门狗模式或者普通定时器模式 。 · 看门狗模式下,有四种时间间隔可选 。 · 所有寄存器都需要通过密码保护机制进行访问 。 · 时钟源可选,具备时钟失效安全机制 。 · 可停用以节省功耗 。 下面将详细介绍看门狗定时器的两种工作模式的配置及使用 。 6.2.2 WOT 操作及寄存器配置 系统在上电清零 (PUC) 后,看门狗定时器 WDT 会默认进入看门狗模式, 此 时 WOT 会默认复位时间隔在 32768 个 DC O 时钟周期 。 因此,看门狗的配置必须在这个时间段内完 成 , 下面将分别介绍看门狗模式和普通定时器模式的配置使用 。 看门狗定时器 WDT 的配置主要由 WOT 配置寄存器 WOTCTL 控 制 , WDTCTL 是 一个 16 位具备密码保护机制的寄存器,其中高 8 位为密码位,低 8 位为配 置 位 。 每次对 WOTCTL 写操作需要在高 8 位 写 入 Ox5A ,才能够正常写人 。 如果写操作对高 8 位写人的 第6章解膏IjMSP430单片机 77 值不是 Ox5A 将导致一次系统 PUC ,这就是保护机制在起作用。对 WDTCTL 的读操作,高 8 位读回的值一定为 Ox69 o 下面将详细介绍 WDT 配置寄存器所控制的功能以及配置方法。 Bit15 Bit7 BM 表 6-3 WDT 配置寄存器 Bit1 2 Bit1 1 IBitl0 I BωI Bit8 WDTPW 一一一-γ­ Bit4 Bit3 BitO WDTl Sx 为时间间隔选择位。看门狗定时器 WDT 工作在看门狗模式下的 PUC 间隔时 间和工作在普通定时器模式下的定时时间都由这两位决定。共有四种时间间隔可供选择: • WDTISx = 00 , 32768 个 WDT 时钟源周期。 • WDTISx = 01 , 8192 个 WDT 时钟源周期。 • WDTISx = 10 , 512 个 WDT 时钟源周期。 • WDTISx = 11 , 64 个 WDT 时钟源周期。 WDTSSEL 为 WDT 时钟源选择位,看门狗定时器 WDT 在配置的时候有两种时钟源可 供选择: ACLK 和 SMCLK 。具体的配置为: • WDTSSEL= 0 ,看门狗定时器 WDT 时钟源为 SMCLK 。 • WDTSSEL= 1,看门狗定时器 WDT 时钟源为 ACLK 。 这里有很重要的一点需要注意,看门狗定时器 WDT 工作在看门狗模式下,承担监控微 控制器的运行状态的工作,首先要保证看门狗定时器 WDT 能够正常稳定地工作,这个时 候看门狗定时器 WDT 的时钟源的有效性就显得尤为重要。 MSP430 微控制器为了确保时钟 的有效性,设计了时钟失效安全机制。当看门狗定时器 WDT 的时钟源 ALCK 或者 SMCLK 失效的时候, WDT 的时钟源不需要软件的干涉,会自动地切换到 MCLK 。在这种情况下, 如果 MCLK 来源于外部晶振,但是外部晶振也失效了,微控制器内部的 DCO 会被自动激 活,并作为 MCLK 的时钟为 WDT 继续提供时钟振荡。 在看门狗功能开启的情况下, MSP430 的一些低功耗模式可能无法关闭对应的时钟。因 为这些低功耗模式可能关闭的时钟恰好是看门狗定时器 WDT 的时钟源,在安全机制的保护 下, WDT 的时钟源会保持在持续工作状态。比如,看门狗定时器 WDT 将 SMCLK 作为时 钟源,那么在 LPM3 模式下, SMCL 就不会被关闭,这种情况可能会增大系统的电流消耗, 在系统设计的时候需要尤为注意。如果看门狗定时器 WDT 工作在普通定时器模式下,时钟 失效保护机制不会工作。 WDTCNTCL 为看门狗定时器清零寄存器。当 WDTCNTCL 的值为 1 时,看门狗定时 器的 16 位计数器将被清零;清零完成后 WDTCNTCL 位会自动复位为 0 。看门狗定时器的 16 位计数器不能直接访问,只能够通过 WDTCNTCL 对其进行清零操作。 WDTTMSEL 为看门狗定时器的模式选择位,用于配置 WDT 工作在看门狗模式或者定 78 第一部分预备篇 时器模式。具体的配置为: • WDTTMSEL= 0 ,看门狗定时器工作在看门狗模式。 • WDTTMSEL= 1 ,看门狗定时器工作在普通定时器模式。 WDTNMI 用来选择~ RST/NMI 管脚的功能,具体配置为: • WDTNMI= 0 , ~ RSTINMI 管脚作为低电平复位输入管脚。 • WDTNMI= 1, ~ RSTINMI 管脚作为不可屏蔽中断输入管脚。 WDTNMIES 用来配置触发不可屏蔽中断 NMI 的沿属性。在 WDTNMI=l 的情况 下, ~ RSTINMI 管脚作为不可屏蔽中断输人管脚,如果输入信号与 WDTNMIES 配置的触 发沿一致将会引发不可屏蔽中断。 WDTNMIES 位具体代表的意义为: • WDTNMIES= 0 , NMI 管脚上的上升沿引发不可屏蔽中断。 • WDTNMIES= 1, NMI 管脚上的下降沿引发不可屏蔽中断。 WDTHOLD 为看门狗定时器的停止位,利用该位可以停用看门狗定时器。在不需要看 门狗的应用中可以关闭看门狗定时器模块以降低功耗。 WDTHOLD 位的具体配置意义为: • WDTHOLD= 0 ,没有停用看门狗定时器 WDT 。 • WDTHOLD= 1 ,停用看门狗定时器 WDT 。 在前面介绍中提到了 WDTCTL 寄存器的保护机制,在该寄存器的最高 8 位即为密码位 WDTPW 。 前面的这部分内容介绍了看门狗定时器 WDT 的专属配置寄存器 WDTCTL ,由于看门 狗定时器 WDT 具备中断功能,所以还有相对应的中断使能寄存器和中断标志寄存器。但是 看门狗定时器 WDT 的中断使能寄存器和中断标志寄存器适于其他模块共用的,看门狗定时 器 WDT 仅占用其中的若干位。下面详细介绍这些控制位。 与看门狗定时器 WDT 相关的中断使能寄存器位为 IEl ,寄存器的第 0 位和第 4 位,如 表 6-4 IEl 寄存器所示。 表 6-4 IE1 寄存器 Bit7 BitO WDTIE NMIIE 是非屏蔽中断使能位。当该位为 1 ,非屏蔽中断被使能;当该位为 0 ,非屏蔽中 断不被使能。 WDTlE 是看门狗定时器作为普通定时器使用的时候中断使能位。当该位为 1 时,定时 器中断被使能;反之,该位为 0 ,定时器中断被关闭。当看门狗定时器工作在看门狗模式下, 该位不用置 l 。 与两个中断相对应的中断标志位为 IFGl 寄存器的第 0 位和第 4 位,如表 6-5IFGl 寄存 器所示。 第6ì言解~JMSP430单片机 79 表 6-5 IFG1 寄存器 Bit7 BitO WDTIFG NMIIFG 位是非屏蔽中断标志位,当 NMI 发生的时候该位会被置 1 0 NMIIFG 不会自动 清零,所以必须在中断服务函数中以软件的方式清零,否则会不断地请求中断 。 WDTI FG 位是看门狗定时器中断标志位,在看门狗模式下,该位必须以软件的方式请 零;在定时器模式下,该位会在服务中断的时候自动清零 。 6.2.3 WDT 操作示例 第 一个范例将介绍看门狗定时器当做通用定时器使用,代码的作用 是设置看门狗定时 器的中断间隔为 32ms ,每次中断发生则翻转 P l. O 管脚的输出电平 。 Hnclude void main(void) 11 设置看门狗定时霉的时间间隔为 32ms WDTCTL = WDT MDLY 32; 11 使能看门狗定时器中断 IEl 1- WDTIE; 11 设置 Pl.0 管脚为输出 PIDIR 13 OxOl; 11 进入低功耗模式。,并开启全局中断使能 BIS SR(LPMO bits + GIE); 11 看门狗定时器中断服务函数 'pragma vector=WDT_VECTOR __ìnterrupt voìd watchdog_timer(void) 11 翻转 P1. 0 输出电平 PI0UT ^= OxOl; 下面一个范例,看门狗定时器将工作在看门狗模式下 。 MSP430 的 ν0 口输出寄存器在 单片机复位之后会保持在之前的状态 。 代码中看门狗处于工作状态,由于缺乏看门狗清零 (喂狗)处理,看门狗会默认在 32768 个时钟周期后,因为溢出复位单片机,每次复位重 启,都会翻转一次 P l. O 管脚的输出电平 。 t1nclude <阳p430g2553.h> void main(void) /1 设置 P1. 0 管脚为输出 PIDIR 1- OxOl; 11 翻转 P1. 0 输出电平 PI0UT ^= OxOl; 11 单片机进入低功耗模式 LPM4 80 第一部分预备篇 BIS SR(LPM4 bits); 6.3 片上非易失存储器 FLASH 6.3.1 FLASH 和 FRAM 介绍 FLASH 是非易失存储器,简单来讲就是二者存储的信息在掉电的情况下也不会丢失。 FLASH 存储器能被反复擦除和编程,而且具备非常长的数据保存时间,因而在微控制器中 应用也非常普遍 。 FLASH 的编程特性是擦除完毕的 FLASH 所有的存储位都为 1 ,编程的 过程中可以将为 1 的位编程为 0 ,但是不能将已经编程为 0 的位再次编程为 1 ,所以在改写 FLASH 数据时需对 FLASH 完成一 次擦除操作 。 在 MSP430 系列微控制器中,绝大部分型号的器件都具备 FLASHo MSP430 内部的 FLASH 典型的擦写次数可以达到 10 万次,数据保存时间预计不低于 100 年 。 FLASH 的编 程操作并不是在 MSP430 的工作电压范围( 1.8 _.._ 3.6V )中都可以完成, MSP430 必须在不 低于 2.2V 的情况下工作才能满足内部 FLASH 的最小编程电压,在低电压状态下使用的时 候需要特别注意 。 内部 FLASH 必须在闪存定时器设定的 工作频率范围 内 工作,这个频率范 围为 257 _.._ 476时{z。 对于 FLASH 来讲编程和擦除的速度相对较慢,字或者字节的编程时 间长达 30 个时钟周期,批量擦除时间 更是长达 10593 个时钟周期 ,这里所说的时钟 周期是 指闪存定时器设定的时钟周期 。 下面将分别结合带有 FLASH 的 02 系列 MSP430 和 带有铁电存储器的 FR 系列 MSP430 介 绍两种非易失存储器的配置和使用 。 6.3.2 FLASH 操你及寄存器配置 MSP430 内部 FLASH 使用非常灵活 , 同时具备位寻址、字节寻址和字寻址 。 对应这 3 种寻址方式, 具备位编程、字节编程和字编程 3 种编程方式 。 在 MSP430 内部集成了 Flasb 控制器,这个控制器由 3 个部分组成,分别是 4 个配置寄存器 、 FLASH 定时器和编程电压 发生器 。配置寄存器主要用来配置 F LASH 控制器的 工作状态, FLASH 定时器用于产生编 程或者擦除操作的时钟,编程电压发生器用于产生编程或者擦除 FLAS H 块过程中需要的电 压 。 FLASH 模块的原理框图如图 6-1 所示 。 MSP430 内 部的 FLASH 可以分为两种,一种是普通的主存储器,另一种是信息存储 器 。二者 的区别在于信息存储器里面会存储一些关于 MCU 的校准信息,比如 DCO 的频率 校准参数,这些参数在出厂之前就会存储在信息存储器里面便于用户 使用,用户可以选择 擦除信息存储器里的数据,并将其像主存储器 一样使用;另外,信息储存器和主存储器在 分段上的大小不同,主存储器的段大小为 512B ,信息存储器段大小为 64B 或者 128B 。一 第6章解ßiJMSP430单片机 81 般来讲,主存储器会有 2 个以上 512B 的段( MSP430G200 1 是唯一的例外,只有 512B 的 FLASH )。下面将通过一个 4KB 的 FLASH 作为例子介绍 FLASH 的段结构。 阳h · M · · 町 mw d Enable Data Latch 图 6-1 FLASH 模块原理框图 FLASH 存储器段结构如图 6-2 所示, 4KB 的主存储 FLASH 被划分为了 8 个 512B 长度 的主存储器段; 256B 的信息储存器被划分为了 2 个 128B 的段。特别注意的是,从地址空 间 OxFFFF 开始到 OxFFCO 是中断向量表的位置(参考"中断系统"章节)。这块区域如果 不用做中断向量表,也可以作为用户空间使用,但是在实际应用中不建议使用。如果开启 的中断所对应的中断向量表位置被用作用户空间使用,可能会导致中断服务函数跳转错误, 进而导致代码跑飞。 信息存储器中段存储了与器件直接相关的信息,特别是信息存储器的 A 段( Segment A) 往往存有器件的校准信息。 Segment A 中存储信息如表 6-6 Segment A 存储信息表所示。 在字 (WORD) 地址空间 Oxl0FE 到 Oxl0F8 中存储的是 DCO 的频率校准信息, Oxl0EA 到 Oxl0DC 存储的是 ADC 的校准信息, Oxl0CO 存储的是 Oxl0C2 到 Oxl0FF 这段空间中数据 的校验和。根据实际的器件型号, Segment A 中存储的信息略有不同,比如某些器件中并没 有 DCO 工作在 12 ~ 16MHz 的校准信息,所以 Segment A 中的存储信息要针对具体的器件 加以利用。 82 第一部分预备篇 4KB + 256 Byte FFFFh FOOOh 10FFh 1000h 4 - KByte Flash MainMemory F~F~~F~F~h I SegmentO Segmentl Segment2 Segment3 Segment4 Segment5 Segment6 Segment7 xxFFl I xxCOh xxBFh I xx80h xx7Fh I xx40h xx3Fh Block Block Block 810ck SegmentA SegmentB 图 6-2 FLASH 存储器段结构 表 6-6 SegmentA 存储信息表 字地址 Oxl0FE Oxl0FC OxlOFA Oxl0F8 OxlOF6 Oxl0F4 Oxl0F2 Oxl0FO Oxl0EE Oxl0EC OxlOEA Oxl0E8 Oxl0E6 Oxl0E4 Oxl0E2 OxlOEO 高位字节 低位字节 CAL8Cl lMHz CALDCO lMHz CAL8Cl 8MHz CALDCO 8MHz CAL8Cl 12MHz CALDCO 12MHz CALBC 1 16MHz CALDCO 16MHz Ox08 (LENGTH) TAG DCO 30 OxFF OxFF OxFF OxFF OxFF OxFF OxFF OxFF Ox08 (LENGTH) TAG EMPTY CAL ADC 25T85 CAL ADC 25T30 CAL ADC 25VREF FACTOR CAL ADC 15T85 CAL ADC 15T30 CAL ADC 15VREF FACTOR 字地址 Oxl0DE Oxl0DC OxlODA Oxl0D8 Oxl0D6 Oxl0D4 Oxl0D2 Oxl0DO OxlOCE OxlOCC Oxl0CA Oxl0C8 Oxl0C6 Oxl0C4 Oxl0C2 Oxl0CO 高位字节 CAL ADC OFFSET CAL ADC GAIN FACTOR OxlO (LENGTH) OxFF OxFF OxFF OxFF OxFF OxFF OxFF OxFF OxFF OxFF OxFF Ox16 (LENGTH) CHECKSUM 低位字节 TAG ADC12 1 OxFF OxFF OxFF OxFF OxFF OxFF OxFF OxFF OxFF OxFF OxFF TAG EMPTY 正因为在 Segment A 中存储了这么多的器件相关信息,所以在 FLASH 控制器中,对 第6章解HlJMSP430单片机 83 Segrnent A 的操作设立了保护机制。在配置寄存器中,有一个 Segrnent A 锁保护位 LOCKA ,当 LOCKA= 1 时,对 SegrnentA 的编程操作和擦除操作都是无效的;当 LOCKA= 0 时,可以像其他的 FLASH 一样对 SegrnentA 完成编程和擦除操作。 具备了以上基本知识,下面将着重介绍 FLASH 的编程和擦除操作。 FLASH 的默认状 态是读状态,需要通过对控制寄存器的配置完成 FLASH 定时器和电压发生器的启动,进行 编程和擦除。 FLASH 定时功能框图如图 6-3 所示。定时器的时钟源可以是 ACLK 、 MCLK 和 SMCLK 中的任意一个,通过框罔可以看出时钟源的选择通过 FSSELx 位完成。选中的时钟 源可以通过定时器的分频器完成分频系数为 1 ~ 64 的分频,分频后的时钟即为 FLASH 定 时器使用的编程频率。对于 2xx 系列的 MSP430 ,这个频率必须在 257 ~ 476kHz 的范围, 分频系数则由 6 位宽的分频控制位 FNx 控制。 ACLK MCLK SMCLK SMCLK Divider , 1-64 BUSY 图 6-3 FLASH 定时功能框图 WAIT 控制 FLASH 定时器的配置寄存器为配置寄存器 FCTL2 ,如表 6-7 所示。配置寄存器 FCTL2 的最高 8 位 (Bitl5 ~ Bit8) 是 FLASH 密码保护位,要对寄存器进行写操作,必须 向该 8 位写入密码 OxA5 ,该 8 位的回读值会一直是 Ox69 ,这一点和看门狗定时器的配置寄 存器是相似的。 FSSELx4 种配置值分别对应 3 个时钟源。 FSSELx= 00 ,选定时钟源为 ACLK; FSSELx = 01 ,选定时钟源为 MCLK; FSSELx =10 或者 11 ,选定时钟源为 SMCLK o FNx 即为实际的 分频系数, FNx 共 6 位,所以最大分频系数为 64 (2 6 )。 表 6-7 FLASH 控制寄存器 FCTL2 Bitl5 Bit14 Bit13 Bit12 Bitll Bit10 Bit9 Bit8 FWKEYx Bit7 BitO 电压发生器则不需要专门的配置,会跟随 FLASH 操作自动运行。 ( 1 )擦除操作 FLASH 的擦除操作最小单位是段,按照擦除模式的划分,擦除操作可以分为 3 种,分 84 第一部分预 备篇 别是段擦除、主存储器整体擦除和主存储器和信息存储器整体擦除 。 擦除模式由配置寄存 器 FCTLl 的 MERAS 和 ERASE 位决定 。 MERAS 和 ERASE 不同的值所代 表的设置,如表 6-8 FLASH 擦除模式所示 。 MERAS 。 。 ERASE 。 。 表 6-8 FLASH 擦除模式 擦除模式 非银除模式 段擦除模式:擦除对应段的所有数据 3些体擦除筷式 : .除主存储器的所有数据 LOCK.A=O: 擦除主存储器和信息、存储器的所有数据 LOCK.A= l :擦|涂主存储器的所有数据 对于 FLASH 的擦除操作除了擦除模式的配置,还需要一 个 FLASH 的写操作用来启动 定时器和电压发生器 。 这个写操作的地址必须是待擦除的地址,如果写人的地址是不能被 擦除的位置,那么擦除操作会被拒绝执行 。 在 FLASH 执行擦除操作的时候,在 FCTL3 配 置寄存器中的 BU S Y 位会自动置 1 ,用于表示 FLASH 正在执行擦除操作 。 擦除操作完成, BUSY 位自动清零 。 具体的时序关系如图 6-4 所示 。 气ZF Programming Voltage EmopemdonAcdve I Erase Time, Vcc Current Coosumption is Increased 倒tzT Progranuniog Voltage BUSyJ tmass erase = 10593/fFTG. tsegmeot erase = 4819/fF1'G L 图 6-4 FLASH 擦除操作时序 (2) 写操作 FLASH 的 写操作分为 两种模式:字写模式和块写模式 。 字写模式每次只向 FLASH 中 写入一个字节或者一个字的数据,块写模式可以连续地写满若干个 FLASH 块 ( BLOCK )。 块写模式的速度是字写模式的两倍左右 。 两种写模式的配置通过 FCTLl 的 BLKWRT 位和 WRT 位完成 。 当 BLKWRT = 0 且 WRT = 1 时,写模式为字写模式;当 BLKWRT = 1 且 WRT= 1 时, 写模式为块写模式。 字写模式在写操作的过程中, BUSY 位会被置 1 ,写操作完成后 BUSY 位清零,具体的 时序图如图 6-5 所示。要改写 F LASH 的数据,首先要进行一次擦除操作,再改写数据 。 假 如没有按照这个顺序完成 FLASH 的 写操作,超过两次的对 FLASH 连续写操作(中间没有 擦除操作),可能会对 FLASH 造成损毁 。 第6章 解部IJMSP430单片机 85 ~ kt Progr缸nming Voltage Progr在mming Operation Active 噩噩2 牛→i H BUSyJ Programming Time,几Current Consumption is Increased IWi时 Writ. = 30月fno 图 6-5 字写模式时序图 斗 L 块写操作可以连续地向整块的 FLASH 中写入数据,其时序图如图 6-6 所示 。 在执行 块写操作时,要将 BLKWRT 位置 1 ,在块写完成后需要立即清零 。 整个块写的过程中, BUSY 位都位 1 ,块写完成,编程电压移除后 BUSY 位就清零 。 在块写过程中,还需要不 断地检查 FCTL3中的 WAIT 位,当 WAIT 位为 0 时表示编程正在进行,不能进行写操作; 当 WAIT 置 l 时表示 FLASH 已 经准备好接收下一字节的数据,可以继续写操作。 BLKWRTbit 」 Write to flash e.g. , MOV#I 23h,&Flash + 卜 Generate Pro咛mming Voltage Programming Operation Active : II II _: t Remov哩 -, - 0 2I'amlIlÌn1!: Voltal!: , -, II II II I 与 ωmulative ProgrammirigJT.ime 阳 ~叫邸,几C__u~rreI nItωumpt川Incre叫 J BUSY I H)ι'! ,I II 叶一-→ I Iι一 II II II II II WAI巾 tB阳队。 = 25/fn咀 牛廿… II 1 理 6-6 块写操作时序图 6.3.3 FLASH 操作示例 下面的示例操作将以累加的方式向位于信息区的 "c" 段中写人数据,在代码中插入了 空操作指令,在写操作完成后,利用 IDE 可查看写人 FLASH 的数据 。 'include 86 第一部分预备篇 //写入 FLASH 的数据 char value=O; //函数声明 void write_segc (char value); void main(void) //关闭着门狗 WOTCTL = WOTPW + WOTHOLO; //读取 FLASH 存储的校准信息,确保未被掠除 J 若被擦除则不再载入 i f (CALBC1 1MHZ ==OxFF I I CALDCO 1KHZ == OxFF) while(1); //设置 OCO 为 1附泣, MCLK 为 1MHz BCSCTL1 = CALBC1 1MHz; //将 DCO 设置为 1MHz OCOCTL = CALDCO 1阳iz; //选取 FLASH 控制器时钟源为 MCLK,分频系数为 2*FNl+1 FCTL2 - FWKEY + FSSEL 1+ FN1; //死循环避免程序退出 while (1) //一直重复 { w 1 riN to /e p ,、-f //抽空 累(加Md植保 的V 方aZ式汕用 向~F子 "呻 Ch" 设置 段中写入数据 断 占 M川 观 察 "E M OOUH 必m 据 , 』 11''vr1 -/ 。 "A 户』 "Uw 段" 写 h w 岛 国 ­ 数 沁 nvF』 z CKHaM a v 、 4 ue} //定义 Flash 指针 char *Flash_ptr; unsigned int i; //初始化指针值,指向信息区的第 2 个段,参考段分配内容 Flash_ptr = (char *) Ox1040; //使能段擦除 FCTL1 a FWKEY + ERASE; //清零 LOCKA 位,可擦除信息区数据 FCTL3 = FWKEY; //空操作用于启动擦除 *Flash_ptr = 0; //使能写功能 FCTL1 = FWKEY + WRT ; //以累加的方式写入 64 字节(-个段}的数据 for (i=O; i<64; i++) *Flash_ptr++ = value; 1/ 写使能消零 FCTLl 霄 FWKEY; IIL'∞陆位置 1 FCTL3 ~ FWKEY + LOCK; 第6意解剖 MSP430单片机 87 6.4 片上铁电存储器 FRAM 6.4.1 铁电存储器 FRAM 介绍 FRAM 即铁电存储器,铁电存储器最大的特点在于可以像 RAM 一样高速写,并且具备 很低的功耗 。 对于 MSP430 这样的低功屁微控制器来讲,铁电存储器的使用对于进一 步降 低微控制器的功挺有着非常大的帮助,所以在 MSP430 的后续换代产品"金刚狼"也都采 用了铁电存储桥 。 FRAM 作为 MSP43 0 新一代的非易失存储器,性能指标有较大提升 。 最小编程电压降 低到 2V ,字或者字节编程时间低至 1 20 n S ,读写次数可以保证到百万亿次的水平 。 数据保 存时间在 85'(: 的极限情况下测试,指标上可以保证到 10 年 。 目前具备 FRAM 存储器的器 件为 MSP430 FR57xx 系列和刚开始提供样品的"金刚狼"系列 XMS430FR5969 (XMS 表 示还在供样阶段,正式量产后的标号会回到 MSP )。 下面将以 MSP430FR57xx 系列为例具 体介绍 F队M 。 在 FR 系列中, FRAM 完全取代了 FLASH 作为 MSP430 的片上非易失存储器 。 片上 FRAM 支持字或者字节的读写访问 , 并且配备了缓存以加快 FRAM 的 读取速度 。 FR 系列 单片机具备向动模式的等待状态控制辅以保证可靠的对 FRAM 的访问操作,而且具备自动 的错误校正码以校正错误位 。 FRAM 的操作通过 FRAM 控制器完成,其原理框图如图 6-7 所示 。 FRAM 存储阵列由 FRAM 控制器通过地址和数据总线控制, FRAM 控制器还配备了缓存加快读操作的速度 。 FRAM 的读取操作跟 SRAM 完全相似,不 同在于内部设置了两块缓存块 。 其中 一 块缓存 会自动 地预 先载入 4 个字长的 F RAM 数据 , 另 一块级存会存储最近用过的数据 。 均数据请求 到达,请求数据是两个缓存块中存储的数据, 则 FRAM 访问不会发生,访问操作速度与 CPU 速度一致;如果请求数据不是缓存中的数据, 图 6-7 FRAM 控制器原理框图 则需要对 FRAM 进行读取,如果 CPU 运行在比较快的速度下,则需要等待状态控制器控制 CPU 确保可措的访问 。 等待状态控制器是否工作 ,跟 C PU 的运行状态直接相关 。 如果 MCLK 不大于 8MHz, 88 第一部分预备篇 则不需要等待周期;如果 MCLK 频率提高,等待状态控制器就会起作用了。等待状态控 制器默认工作在自动状态,自动状态下不需要对等待状态控制器做任何配置。 FRAM 访 问正在进行时,等待状态控制器会自动阻塞 CPU 。等待状态控制器也可以工作在手动配 置状态,此时需要将 FRAM 控制器寄存器 FRCTLO 的 NAUTO 位清零。 NACCESSx 位和 NPRECHGx 位配置等待状态控制器的工作模式。 NACCESSx 位用于定义 FRAM 访问时间 所需要耗费的 CPU 周期, NPRECHGx 位用于定义 FRAM 的充电时间所需要耗费的 CPU 周期。 FRAM 的访问时间为 60ns ,充电时间也为 60ns ,总共的时间为 120ns o CPU 工作在 8MHz 下,一个 CPU 工作周期的时间为 125ns ,所以在 8MHz 的情况下不需要等待。对于 在其他的 MCLK 频率下对应的 NACCESSx 位和 NPRECHGx 位配置如表 6-9 所示。 MCLK 频率 IMHz 8 16 20 24 表 6-9 MCLK 不同频率下手动等待状态控制器配置 NACCESS[2:0] Oh 1h 2h 2h NPRECHG[2:0] Oh Oh 1h 1h 等待周期 。 3 3 在手动配置等待状态控制器的模式下, FRAM 还具备安全访问机制。当 NACCESSx 位 和 NPRECHGx 位配置不能满足 FRAM 的时序和 CPU 工作频率之间的关系时,安全访问逻 辑会确保正确的时序,同时通用控制寄存器 GCCTLl的访问时序错位标志位 ACCTEIFG 置 位。如果通用控制寄存器 GCCTLO 的访问时序错误非屏蔽中断使能位 ACCTEIE 使能,则 会发生非屏蔽中断。 为保证 FRAM 的可靠性, FRAM 还具备错误校正码( Error Correction Code , ECC)。 该功能支持错误位校正和不可更正错误位检测。如果 FRAM 的错误检测逻辑检测到不可校 正的位错误,通用控制寄存器 GCCTL1 的不可更正位错误标志 UB DlFG 置位。对应的不可 更正位错误非屏蔽中断使能 UB DlEN 置位,则会发生一次非屏蔽中断。如果 FRAM 的错误 检测逻辑检测到可更正的位错误,则可更正位错误标志 CB DlFG 置位,同时错误位被自动 更正。对应的可更正位错误非屏蔽中断使能 CBDlEN 置位,则会发生一次非屏蔽中断。 FRAM 的编程操作则可以通过多个途径完成, JTAG 接口、 SBW 接口、 BSL 都可以对 应完成写操作,也可以使用用户代码通过任何可靠方式完成 FRAM 的编程操作。 6.4.2 FRAM 操作及寄存器配置 FRAM 控制由 3 个寄存器完成,分别是 FRCTLO 、 GCCTLO 和 GCCTLl,其中, FRCTLO 寄存器设置了密码保证机制,在对 FRCTLO 进行写操作的时候,必须写入正确的 密码。密码位为 FRCTLO 寄存器的高字节,写人密码必须为 OxA5 。如果使用自写的方式, 密码位写入错误会引发 PUC 。下面分别介绍 3 个寄存器各位的具体含义, 3 个寄存器分别 如表 6-10 、表 6-11 和表 6-12 所示。 第6章解膏1] MSP430单片机 89 表 6-10 FRAM 控制寄存器 FRCTLO Bit15 Bitl4 Bitl3 Bit12 Bitll Bitl0 Bit9 Bit8 FRCTLPW Bit7 BitO Reserved FRCTLPW: 寄存器密码位。字写模式必须写入 Ox5A ,否则会引发 PUC 。当写入正确 密码后,该寄存器被写便能;需要向寄存器的高字节以字节写入的方式写入一个非密码数 据来关闭写使能。字节写入的方式不会引发 PUC 。 NACCESSx: 等待状态控制器访问时间控制位。用于手动配置模式下,表示 FRAM 访 问时间对应的 CPU 运行周期。 NAUTO: 等待状态控制器于动配置使能位,该位默认为 1 ,等待状态控制器工作于自 动状态;该位清零,则使能手动配置功能。 NPRECHG: 等待状态控制器充电时间控制位。用于于动配置模式下,表示 FRAM 充 电时间对应的 CPU 运行周期。 表 6-11 通用控制寄存器 GCCTLO Bitl5 Bit8 Reserved Bit7 BitO UBDRSTEN UBDRSTEN: 不可更正位错误 PUC 使能位。该位置位,当 FRAM 检测到不可更正位 错误,则会发生 PUC ,中断向量在 SYSRSTIV; 该位清零,则不会发生 PUC 。 UBDIE: 不可更正位错误非屏蔽中断使能位。该位置位,当 FRAM 检测到不可更正位 错,则会发生非屏蔽中断,中断向量在 SYSSNIV; 该位清零,则不会发生非屏蔽中断。 CBDIE: 可更正位错误非屏蔽中断使能位。该位置位,当 FRAM 检测到可更正位错误, 则会发生非屏蔽中断,中断向量在 SYSSNIV; 该位清零,则不会发生非屏蔽中断。 ACCTEIE :访问时序错误非屏蔽中断使能位。该位置位,在于动配置等待状态控制器 的模式下,当 NACCESSx 位和 NPRECHGx 位配置不能满足 FRAM 的时序和 CPU 工作频 率之间的关系时,则会发生非屏蔽中断;该位清零,则不会发生非屏蔽中断。 Bit15 Bit7 表 6-12 通用控制寄存器 GCCTL1 Reserved Bit8 BitO Reserved ACCTEIFG: 访问时序错误标志位。在于动配置等待状态控制器的模式下,当 90 第一部分预备篇 NACCESSx 位和 NPRECHGx 位配置不能满足 FRAM 的时序和 CPU 工作频率之间的关系 时,该位会置位。可以通过软件的方式清零,或者读 SYSSNIV 寄存器时,该位为最高优先 级的标志位则自动清零 。 对该位写操作只能写 0 ,写 l 无敛 。 UBDIFG: 不可更正位错误标志位 。 如果 FRAM 的错误检测逻辑检测到不可校正的位 错误,该位置位。可以通过软件的方式清零,或者读 SYSSNIV 寄存器时,该位为最高优先 级的标志位则自动清零 。 对该位写操作只能写 0 ,写 1 :无数 。 CBDIFG: 可更正位错误标志位 。 如果 FRAM 的错误检测逻辑检测到可校正的位错误, 该位置位 。 可以通过软件的方式消零,或者读 SYSSNIV 寄存器时,该位为最高优先级的标 志位则自动清零。 对该位写操作只能写 0 ,写 I 无效 。 6.4.3 FRAM 操作示例 FRAM 的 示例代码是基于 MSP430FR57xx 系列 FRAM 单片机完成的,示例代码实现 的功能是将 long 型数据连续写 128 个到 FRAM 中,这样连续的写操作每完成 100 次,则将 P I.O 管脚的输出翻转 。 tinc1ude 11 函数声明,声明 FRAM 笃函徽 void FRAMWrite (void); //定义 iUi:变量、 FRAM 指针和写入的数据 unsigned char count - 0; unsigned 10ng *FRAM_write_p tr; unsigned 10ng data ; 'deflne FRAM TEST START OxCAOO int main(void) //关闭着门衔 NDTCTL - NDTPN + NOTHOLO; /1 设置 HCLK 为侧目 Z ,阳系列的单片机时钟配置不同于之筒的系列 CSCTLO H - OxA5; CSCTL1 1- DCOFSELO + DCOFSEL1; H 设置 ACLK 时钟深为四..0 // Set mðX. DCO setti nq CSCTL2 - SELA 0 + SELS 3 + SELH 3 ; //设置 HCLK - SMCLK -民0/2 CSCTL3 - OIVA 0 + OIVS 1 + OIVM 1 ; u 关闭片上温度传.. REFCTLO 1- REFTCOFF ; REFCTLO &- - REFON; //设置 Pl. O 为销出 PIDIR 1 罩 BITO; //初始化无效数据 data = Ox11111111; while (1) /1 设置写入的有效徽据值 data +- OxOOOl0001 ; 第6J在解S1JMSP430单片机 91 //初始 FRAM 指针 FRAM_write_ptr ; (unsigned 10ng .)FRAM_TEST_START; H 连续写入 128 个 10ng 型数锯 (4B) .共 5128 FRAMWrite () ; //每完成-次连续写镰作计..加 1 count+ 叫~; //完成 100 次连续写操作,则将 P l. O 管脚的输出翻转 if (count > 100) / / .转 P l. O .,,,输出状态 PIOUT ^- OxOl; //计.变量清军 count - 0; //赋11 为无效徽<< data - Oxlllllll1; //FRAM 写函数,操作土跟写 RAM 相似 void FRAMWrite (void) unsigned int i-O; for ( i= O;i<128 ; i++) *FRAM_write_ptr++ - data; 6.5 通用定时器TIMER MSP430 除了具有功能丰富的定时器外设等基本的定时功能外,还能提供多路捕获和比 较,并支持 PWM 输出 。 在 MSP430 中定时器分为两种: Timer A 和 Timer B 。 二者的功能 和配置基本上相同,只是 Timer B 可配置性稍强,可以配置为 8 、 10 、 12 和 16 位定时器, 并且有更多的捕获和比较寄存器,所以 Timer B 可以 当做是 Timer A 的强化版本 。所有的 MSP430 几 乎都支持 Timer_A , Timer_B 只有部分功能较强的器件才有,所 以在下面的介绍 中主要以 Timer A 为范例做详细的介绍,并配合 LaunchPad 完成实验( LaunchPad 使用的 02 系列 MSP430 只有 Timer_A)o Timer_A 是一个 16 位的定时器或者计数器,具备以下特点 : · 具备 4 种操作模式 。 · 时钟源可配置 。 • 2 个或者 3 个捕获比较寄存器 。 · 可配置为 PWM 输出 。 · 异步输入/输出锁存 。 · 具备中断向盘寄存器,便于快速分辨 Timer A 中断 。 92 第一部分预备篇 6.5.1 TIMER 介绍 1.定时器基本结构 定时器的核心是一个 16 位的计数器,计数器基本的结构如图 6-8 所示。 16 位的计数器 TAR 在时钟沿的上升沿可以做增计数也可以做减计数, 1:十数溢出会产生中断。计数模式由 配置寄存器的 MCx 位配置,计数模式将在后面详细介绍。计数器的值可读、可写,写入的 值立即生效。时钟源有 4 种可选,分别是 TACLK 、 ACLK 、 SMCLK 和 INCLK , TACLK 和 INCLK 是由外部管脚输入的时钟。时钟源的选择由 TASSELx 位配置, TASSELx=OO ,则时 钟源为 TACLK; TASSELx=Ol ,则时钟源为 ACLK; TASSELx=10 ,则时钟源为 SMCLK; TASSELx= l1 ,则时钟源为 INCLK 。输入的时钟源还能够经分频器分频后作为计数器的时 钟。分频系数由 IDx 位决定,具体的分频系数为 2IDx 。计数器的清零操作可配置 TACLR 位 完成,使用 TACLR 清零,同时会清除 IDx 和 MCx 的配置值。 TASSELx TACLK ACLK SMCLK INCLK TimerClock IDx 15 16- bitTimer TAR TACLR 图 6-8 计数器基本的结构框图 MCx Timer Block EQUO 2. 定时器王作模式 定时器可以根据 MCx 位配置其工作模式, MCx 对应的工作模式如表 6-13 所示。当 MCx 不等于 0 时,定时器就会处于活动状态,所以将 MCx 配置为非零是启动定时器途径。 在 Up 模式和 Up/down 模式下,定时器的工作状态跟 TACCRO 也有关,当 TACCRO 被赋值 为 0 时,定时器也会处于停止状态,这个时候只要将 TACCRO 赋值为非 0 ,定时器就会启 动。下面分别详细介绍主要的三种工作模式一-Up 模式、 Continuous 模式和 Up/down 模式。 MCx 工作状态 。。 Stop 01 Up 10 Continuous 11 Up/down 表 6-13 定时器工作模式 解释 定时器处在停止状态 定时器会反复地从 0 计数到 TACCRO 定时器会反复地从 0 计数到 OxFFFF 定时器从 0 增计数到 TACCRO. 接着减计数回到。 ( 1 ) Up 模式 在 Up 模式下能够非常方便地设置定时周期,只要计数器计数到 TACCRO 相等的值, 计数器就会重新从 0 开始计数,实际的计数周期为 TACCRO+1 。结合图 6-9 能够很容易地 理解 Up 模式。 OFFFFh 第6章解由'jMSP430单片机 93 图 6-9 Up 模式 计数器在 Up 模式下可以产生计数中断,而且会分别引起两个中断胁志位的置位。如 图 6-10 所示,当计数器计到 TACCRO 时会将 TACCRO 的 CCIFG 中断标志位置 1 ;当计数 值由 TACCRO 计到 0 时, TAIFG 标志位会置 10 TimerClock Timer SetTAIFG Set TACCRO CCIFG ~~ ~~ 图 6-10 Up 模式下中断标志位置位时序 在使用的过程中可能会遇到定时器在运行的时候更改定时周期的情况,这个时候需要 修改 TACCRO 的值。如果新的周期值比以前的周期值要大,或者大于定时器当前的计数值, 那么定时器会计数到新的周期值;如果新的周期值比定时器当前计数值小,定时器会马上 从 0 开始计数。因为定时器和 CPU 可能是异步的,所以这个时候可能会出现多计数一次的 情况。 ( 2 ) Continuous 模式 在 Continuous 模式下,定时器会反复地计数到最大值 OxFFFF ,然后又回到 0 。其计数 模式如图 6-11 所示。 Oh 图 6-11 Continuous 模式 当定时器计数从 OxFFFF 复位到 OxOOOO 时,中断标志位 TAIFG 会被置位,具体时序如 94 第一部分 预 备 篇 图 6-12 所示。 TimerClock Timer SetTAIFG 的 图 6-12 Continuous 模式下中断标志位置位时序 (3) Up/down 模式 在 Up/down 模式下,计数器会从 0 增计数到 TACCRO ,让后从 TACCRO 减计数到 0 。 计数模式如图 6-13 所示。计数的过程中,计数方向会被锁存。所以计数器被暂停后,再继 续计数,计数器可以朝着相同的方向计数。如果不希望计数器继续之前的计数,那么需要 使用前面介绍到的 TACLR 位来清除计数的状态, TAR 的值、计数方向、分频系数都会被 清零。 OFFFFh TACCRO ~-…--…………_----一----- ... Oh 图 6-13 Up/down 模式 Up/down 模式也可以触发中断标志位的置位,其时序图如图 6-14 所示。增计数时计数 值从 TACCRO-1 向 TACCRO (图中标示为 CCRO) 跳变,会导致 TACCRO 对应的 CCIFG 位 置位;在图中还可以看到在这个时刻,方向锁存寄存器的值也同步变化,由增计数跳变为 了减计数。 TAIFG 标志位会在减计数的过程中,计数值由 l 跳变为 0 时置位。有一点需要 特别说明,在 Up/down 模式下,每个周期内中断标志位也只会发生一次置位。 TimerClock Timer ilfri--Rtipi-fEe SetTAIFG Set TACCRO CCIFG 图 6-14 Up/down 模式下中断标志位置位时序 第6章解'tftJMSP430单片机 95 TACCRO 的值在定时器运行的时候也可以修改。当定时器正运行在增计数状态下,如 果新的 TACCRO 值不小于旧的 TACCRO 值,或者新的 TACCRO 值比当期的计数值大,那 么计数器会继续计数至新的 TACCRO 然后减计数;如果新的 TACCRO 值比当前的计数值小, 计数器会马上由增计数跳变为减计数。当定时器运行在减计数状态,无论修改的 TACCRO 值为多少,计数器都会先减计数到 0 ,然后新的 TACCRO 值才会生效。 以上介绍了定时器的 3 种工作模式以及对应模式下的中断标志位置位的情况,下面将 介绍定时器的捕获功能和比较功能。 3. 捕获功能租比较功能 定时器的捕获功能主要用来时间测量,可以方便地测量外部脉冲的宽度;比较功能主 要用来产生 PWM 输出和定时中断。下面将分别介绍捕获功能和比较功能。 ( 1 )捕获功能 将捕获比较控制寄存器 TACCTLx 的 CAP 位配置为 1 时,捕获比较模块就被配置在捕 获状态。捕获模块的捕获源可以是来自微控制器管脚的外部信号也可以是内部的信号,信 号源的选择由 TACCTLx 寄存器的 CCISx 位选择。捕获的条件可以设置为上升沿有效、下 降沿有效或者上升沿和下降沿都有效。当信号满足捕获条件时,就会发生捕获事件,当前 定时器的值会复制到 TACCRx 中,并且对应的中断标志位 CCIFG 会置位。由于捕获的信号 源有很大的可能跟定时器的时钟是异步的(比如,信号游、来自 MSP430 的管脚输入),这种 情况会导致进入电路竞争状态。在这种情况下,比较简易的做法是将 TACCTLx 的 SCS 位 置 1 ,这样可以在下一个时钟将捕获信号和定时器的时钟同步起来。同步捕获模式的时序关 系如图 6-15 所示, TACCTLx 中的 CCI 位可以读取捕获信号的当前状态,捕获信号和定时 器时钟的下降沿同步。 TimerClock Timer CCI Capture Set TACCRx CCIFG 图 6-15 同步捕获模式 在捕获模块中还有一个溢出逻辑,这个溢出检测逻辑可以用来检测是否发生了第二次 捕获事件,该位需要使用软件的方式进行清零。具体的捕获状态跳转如图 6-16 所示。捕获 模块在捕获发生前处于空闲模式,如果捕获信号满足要求,跳转到捕获事件发生状态;捕 获事件发生后,如果正常地读取捕获状态,则会跳入捕获读取状态,如果在读取前发生了 96 第一部分预备篇 第二次捕获事件,就会跳入第二次捕获状态,此时 COV 位会置 1 , COV 位清零,使得捕获 模块再次进人空闲状态。 C1ear Bit COV in Register TACCTLx 图 6-16 捕获状态跳转图 ( 2 )比较功能 将捕获比较控制寄存器 TACCTLx 的 CAP 位配置为 0 时,捕获比较模块就被配置在比 较状态。比较状态一方面可以方便地控制定时中断,另一方面可以配合内部的输出模块输 出 PWM 信号。当计数器的值计到 TACCRx 的时候会发生以下事件: 1 )中断标志位 CCIFG 被置 1 。 2 )内部信号 EQUx 被置 10 3) EQUx 影响输出模块输出状态。 4) 输入信号 CCI 的状态被锁存到 SCCI 。 在介绍定时器的工作模式时已经介绍过定时中断,下面将详细地介绍配合输出模块产 生的 PWM 信号。输出模块的输出模式共有 8 种,如表 6-14 所示,具体模式由比较控制寄 存器 TACCTLx 的 OUTMODx 位控制。 OUTMODx 000 nuoul 表 6-14 输出模式 介绍 输出由 TACCTLx 的 OUT 位直接控制 当定时器计数到 TACCRx 的时候,输出置1,并一直保持该状态。直到定时器 被复位或者更改为输出模式,新的输出模式影响到输出时,输出才会发生变化 第6章解膏~MSP430单片机 97 OUTMODx 010 011 100 101 110 111 (续) 摸 式 Toggle/Reset Set/Reset Togg1e Reset Togg1e/Set Reset/Set 介 绍 当定时器计数到 TACCRx 的时候,输出会翻转,在计数器计到 TACCRO 的时 候,输出会复位 当定时器计数到 TACCRx 的时候,输出会置 1 ,在计数器计到 TACCRO 的时 候,输出会复位 当定时器计数到 TACCRx 的时候,输出会翻转,输出信号的周期是定时器周 期的 2 倍 当定时器计数到 TACCRx 的时候,输出会复位,并且一直保持复位状态指导 输出模式被改变 当定时器计数到 TACC Rx的时候,输出会翻转,在计数器计到 TACCRO 的时 候,输出会置 1 当定时器计数到 TACCRx 的时候,输出会复位,在计数器计到 TACCRO 的时 候,输出会置 1 模式。因为直接受 TACCTLx 的 OUT 位控制,所以跟定时器的工作模式没有太大关 系,其他的 7 种输出模式则可以配置 3 种计数模式使用,下面将结合示意图分别介绍。 图 6-17 是在定时器工作在 Up 模式下 7 种输出的示意图,使用的是比较模块。和比较模 块 1 ,所对应的内部信号分别是 EQUO 和 EQU1 ,标示 TAIFG 处,表示中断标志位被置 10 OFFFFh TACCRO 1 一一叼牛叨叨 叨 川叫...--....._--..... TACCRll. ……" 一句-------,---- Oh EQUO TAIFG EQUl EQUO TAIFG EQUl EQUO TAIFG 图 6-17 Up 模式下输出状态示意图 InteπuptEvents 98 第一部分预备篇 图 6-18 是定时器工作在 Continuous 模式下 7 种输出的示意图,使用的是比较模块 0 和 比较模块 1 ,所对应的内部信号分别是 EQUO 和 EQU1 ,标示 TAIFG 处,表示中断标志位 被置 1 。 OFFFFh ~- -- --… - …→叫 a…叫"………--户户叫一…归…… …----…一…… Output Mode 1: Set ---……………Ou·tput Mode 4: Toggle Output Mode 5: Reset TAIFG EQtJ l EQUO TAIFG EQtJ l EQUO Inteηupt Events 图 6-18 Continuous 模式下输出状态示意图 图 6-19 是在定时器工作在 Up/down 模式下 7 种输出的示意图,使用的是比较模块 0 和 比较模块 2 ,所对应的内部信号分别是 EQUO 和 EQU2 ,标示 TAIFG 处,表示中断标志位 被置 1 。 以上介绍了关于定时器结构原理和工作状态,下面将介绍如何操作定时器。 OFFFFh TACCRO 1----------- ……-户 Oh 第6章解剖 MSP430单片机 99 EQU2 I EQU2 EQU2 I EQU2 TAIFG EQUO TAIFG EQUO 图 6-19 Up/down 模式下输出状态示意图 Interrupt Events 6.5.2 TIMER 操作及寄存器配置 定时器的操作也是通过定时器相关的配置寄存器来完成的,下面将介绍 Timer A 的寄 存器组成。 Timer A 的配置寄存器主要包括 Timer A 控制寄存器 TACTL ,计数器 TAR ,捕 获比较控制寄存器 TACCTLx 、捕获比较寄存器 TACCRx 和中断向量寄存器 TAIV 。其中 TACCTLx 和 TACCRx存在多个,因此编号为 0 、 1 、 2 ,这是因为定时器具备多个比较捕获 模块。下面详细介绍 Timer A 寄存器,如表 6-15 ~表 6-19 所示。 表 6-15 控制寄存器 TACTL Bit1 5 Bit8 Bit7 BitO TAIFG TACTL 寄存器主要是对定时器的基本属性进行操作, TASSELx 用于选择时钟源, IDx 100 第一部分预备篇 用于配置定时器时钟的分频系数, MCx 配置定时器的工作模式,这些内容在介绍定时器中 计数器时已有介绍。 TACLR 是定时器的清零位,当 TACLR 置 1 后,定时器的计数值会复位到 0; 分频系 数 IDx 会被复位为 0 ,分频系数变为 1 ;定时器的计数方向也会被复位。 TACLR 在计数器 完成复位后会自动复位为 0 。 TAIE 是 Timer A 的中断使能位,当 TAIE = 1 时, Timer A 中断使能; TAIE = 0 时, Timer A 中断禁止。 TAIFG 是 Timer A 中断标志位,如果该位置 l 表示发生定时器中断。 该寄存器是定时器在使用的时候需要首先配置的寄存器。 表 6-16 计数器 TAR Bitl5 Bit8 TARx Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO TARx TAR 即为 Timer A 的计数器。 表 6-17 捕获比较寄存器 TACCRx Bit15 Bit8 TACCRx Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO TACCRx TACCRx 在捕获和比较模式下分别代表不同的意义:在捕获模式下,当捕获条件满足 TACCRx 捕获发生的时候将 TAR 的值复制过来;在比较模式下, TACCRx 存储着与 TAR 相比较的值。 表 6-18 捕获比较控制寄存器 TACCTLx M Bitl5 Bit7 TACCTLx 用于控制捕获或者比较模式。 -m-M一叫 CMx 是捕获模式下,捕获沿配置位。 CMx=OO ,不捕获; CMx=OI ,上升沿捕获; CMx=10 ,下降沿捕获; CMx= l1 ,上升沿和下降沿都捕获。 CCISx 捕获或者比较模式下的输入选择位。 CCISx =00 ,输入为 CClxA , CClxA 会 根据不同的 MSP430 连接到外部管脚; CCISx =01 ,输入为 CClxB , CClxB 会根据不同的 MSP430 连接到外部管脚; CCISx =10 ,输入为 GND; CCISx =11 ,输入为 Vcc 。 第61段解~J MSP430单片机 101 SCS 同步捕获信号 。 SCS= l ,会将捕获信号与定时器的时钟源同步,避免竞争风险,捕 获工作在同步状态 ; SCS啡,捕获 工作在异步状态 。 SCC I 捕获输入 。 该位锁存了 CCI 的值,同时 CCI 位的值会被内部信号 EQUx 锁存, 所以该位实际上的作用是读取当前 EQUx 的值 。 CAP 捕按比较模式选择位 。 当 CAP= l ,工作在捕获状态;当 CAP=O ,工作在比较状态 。 OUTMODx 输出模块的输 出模式的选择,在前面的介绍中介绍了其对应的 8 种 状态 。 CC I E 捕获或者比较中断使能 。 CCIE= l ,则使能 CCIFG 标志位的中断;反之,则禁止 。 CCI 捕获输入位,读取该位可以知道当前捕获信号的状态 。 OUT 输出控制位 。 在输出模块工作在模式 。 下,该位可直接控制输出 。 OUT=O ,则输 出为低; OUT= l , 则输出为高 。 COV 捕获溢出位 。 该位置 1 ,则表示捕获溢出 。 CCIFG 捕获或者比较中断标志位 。 该位置 1,则 表示对应的捕获或者比较中断发生 。 袋 6-19 中断向量寄存器 TAIV 川 一o -M一。 TAIV 可用于快速解析中断标志 。 TAIVx= 02h ,则表示 TACCR l 的 CCIFG 置 1 ; TAIVx=04h ,则 表示 TACCR2的 CCI FG f1. 1 ; TAIVx= OAh ,则表示发生溢出中断 TAIFG 宜 1 ,而且 芝者的优先级是由高到低 。 介绍完了 Timer A 相 关的寄存器,下面将通过三个实验分别练习定时器工作在普通定 时模式、比较模式和捕获模式下的使用 。 6.5.3 TIM ER 操作示例 第 一 个例子中 Timer A 工作在最典型的定时状态,按照 50000 个 SMCLK 周期的时间 间隔产生中断 。 代码中 SMCLK 的频率为 DCO 默认工作频率,约为 lMHz 。 每次定时中断 都会翻转 P 1.3 管脚的输出电 平,所以 P 1. 3 管脚会 出现 10Hz 左右的方波信号。 ' include void main(void) 1/ 关 闭着 门狗 IfDTCTL - WDTP帽 + WDTHOLO; 1/ 设置 P1. 3 ".为 4自由 PIOIR 1- Ox08; 11 设置定时暴 CCRO 中断t:能 CCTLO - CCIE; 1/ 设置中断间隔 102 第一部分预备篇 CCRO ~ 50 000; 11 设置 Timer ~的时钟源为 SMCLK ,工作模式为 Continuous 模式 TACTL = TASSEL 2 + MC 2; IIMSP430 进入低功耗模式 LPMO ,并使能会局中断 BIS SR(LPMO bits + GIE); 11 Timer AO 中断服务函数 'pragma vector2 TlMERO_AO_VECTOR __interrupt void Timer_A (void) 11 翻转 P1. 3 管脚输出电平 P10UT ^~ Ox08; 11 由于工作在 Continuous 模式,比较值增加 50000 CCRO += 50000; 第二个例子介绍定时器工 作在比较模式,.利用 Tímer A 从 TAl ( P I. 2 ) 输出占空比为 75% 的 PWM 信号。 tinclude void main(void) 1/ 关闭着门狗 WDTCTL = WDTPW + WDTHOLD; //设置 P1. 2 为输出 PIDIR 1- Ox04; 1/ 设置 P1. 2 为 TAO.1 输出功能 P1SEL 1= Ox04; //设置 P阳周期 CCRO = 512-1; 11 CCRl 工作在 reset/set 模式 CCTLl 罩 OUTMOD 7; 11 设置 PWM 占空比 384/512 -0.75 CCRl a 384; 1/ Timer_A 的时钟源为 SMCLK, 工作模式为 Up 模式 TACTL = TASSEL 2 + MC 1; //关闭未使用的 CPU BIS SR(CPUOFF); 6.6 通用异步串行接口 UART MSP430 系列微控制器提供了 3 种串行通信外设,它们分别是 USI 、 USART 和 USCI。 USI (Universal Serial Interface ,通用串行接口)主要提供同步的串行接口功能,能实 现 SPI 和 I2C 通信的硬件功能 。 USART ( Universal Syncbronou s/Asyncbronous Receive/Transmit ,通用同步异步收发器 ) 第6章解~JMSP430单片机 103 可以支持 UART 和 SPI 两种串行模式, MSP430F15x/Fl 侃的 USARTO 还能够支持 eC 通信 模式。 USCI (Universal Serial Communication Interface ,通用串行接口)是 MSP430 串行接口 的新标准,支持使用单个硬件模块实现多种串行通信模式。 USCI 支持所有异步通信模式和 一个 SPI 。异步模式包括了 UART 、 IrDA 和LlN ,其中 IrDA 和LlN 只提供了其物理层的 支持。 MSP430 中可以有两个独立的 USCI 模块: USCI A 和 USCI B ,二者可以同时工作。 USCI 有中断驱动功能,部分 MSP430 还有 DMA 功能。在 MSP430 的后续型号中,推出了 eUSCI 模块,即为增强型 USCI ,对 USCI 的功能进一步丰富。根据这个趋势, USCI 将作 为 MSP430 串行接口的主流外设,所以本书对 UART 、 SPI 和 12C 接口的介绍将基于 USCI 外设展开。 6.6.1 UAR丁介绍 UART 其实是满足 RS232 、 RS422 和 RS485 等接口标准规范的一系列异步串行通信接口的总 TX RX 称。其基本通信结构如图 6-20 所示。 TX 表示发 生端, RX 表示接收端,两个设备间最基础的通 信可以只通过收发两根线来完成。 设备 A RX 设备 B TX UART 的工作原理就是将传输的有效数据按 照统一规定的格式一位接一位地传输,其字符格 图 6-20 UART 通信结构 式如图 6-21 所示。 UART 最简单的帧包括 3 个部分,分别是起始位、数据位和停止位。根据使用情况的不 同又可以增加一些可选位,主要包括地址位和校验位。下面将分别介绍这些位代表的意义: 古半: ••• D田6 1问D町阳7 I血ADI问盹 l 吐2」『…-喃 抽SD口a ~~口口:工口;立:口T巳T1lJ;1;]J] [OPtiona1 Bit , Condition] 图 6-21 UART 字符格式 起始位用来表示→次 UART 发送的开始,在 UART 中规定起始位是 1 个数据位宽的 0 。 数据位是 UART 字符中传输的有效数据位,数据位的宽度可选,在 MSP430 中可以选 择数据位为 7 位或者 8 位。 MSP430 的 UART 可以工作在多机通信的模式下,地址位用于表示数据位是传输数据 的位地址值。该位是可选位,在 UART 字符中不是必须的。 校验位用于校验数据位在传输中是否出错。校验位可以设置为两种模式:奇校验和偶 104 第一部分预备篇 校验。奇校验就是数据位中的 "1" 加上校验位上的"}"的个数为奇数个,那么数据传输 没有出错;反之, "1" 的个数为偶数个,则传输出错。偶校验就是数据位中的 "1" 加上校 验位上的 "1" 的个数为偶数个,那么数据传输没有出错;反之, "1" 的个数为奇数个,则 传输出错。校验位也是可选位,可以设置为奇校验、偶校验或者无校验。 停止位表示 UART 字符传输结束,一般是 1 位、1. 5 位或者 2 位宽的高电平。收发端必 须保证停止位的位数一致。 UART 作为异步通信,收发两端的时钟大多数情况下是不同步 的,停止位其实也能够用于收发端的同步校正,一般停止位位数越多,对收发端不同步的 容忍程度就越大。停止位是 UART 字符格式中必须具备的部分。 UART 除了字符格式以外还有一个非常重要的指标 波特率。波特率是用来衡量数据 传输速率的指标,表示在 ls 的时间内可以传输符号的个数。需要强调的是波特率不是比特 率,比特率指的是每秒可以传输二进制比特的个数,波特率的单位是波特 (baud ),比特率的 单位是比特每秒( bps 或者 b/s)。在 UART 中波特率就代表了可以 ls 可以传输的位的个数。 具备了 UART 的基本知识,下面来介绍 MSP430 内部 USCI 外设实现 UART 功能。 USCI 实现的 UART 可以在多种模式下工作,包括通用的 UART 模式、闲置线路多处理器 模式、地址位多处理器模式和 LIN (Local Interconnect Network ,内部互联网络,是一种基 于 UART 的低成本串行通信网络,用于实现汽车中的分布式电子系统控制)的自动波特率 检测模式。后面的介绍主要以最通用的 UART 模式为主。闲置线路多处理器模式和地址位 多处理器模式实际是 UART 在多处理器通信的应用,在 UART 通信的基础上规定了多处理 器的通信协议。 LIN 的自动波特率检测模式主要提供了一种波特率检测的方式。 在 USCI 中只有 USCI A 具备 UART 功能,通信通过 MSP430 外部的 UCAxRXD 和 UCAxTXD 两个管脚完成,其中 UCAxRXD 是接收数据线, UCAxTXD 是发送数据线。 USCI 在 UART 模式下具备以下特点: ·数据位 7 位或者 8 位可选。 ·校验位奇校验、偶校验或者无校验可选。 ·发送移位寄存器和接收移位寄存器相互独立。 ·发送缓冲寄存器和接收缓冲寄存器相互独立。 ·发送过程中最高有效位在先或者最低有效位在先可选。 ·波特率可编程并支持波特率小数位。 ·支持闲置线路多处理器模式和地址位多处理器模式的多机通信。 ·支持起始位沿检测,可在低功耗状态下自动唤醒。 ·具备独立的发送中断和接收中断。 下面将逐一介绍 USCI 在 UART 模式下的各模块。首先是 UART 的时钟模块,其结构 如图 6-22 所示。 第6章解由IjMSP430单片机 105 UCSSELx UCOCLK ACLK SMCLK SMCLK UCABEN Receive Baudrate Generator UCOBRx 噩 16 因 6-22 UART 时钟模块 UART 的时钟源有多个可选,可以是 UCAOCLK 、 ACLK 或者 SMCLK 。但是一般情况 下, UART 的时钟源是 MSP430 本身的 ACLK 或者 SMCLK ,时钟源的选择由 USCI A 的 控制寄存器 UCAxCTLl 来选择,控制位是 UCSSELx o 被选中的时钟源就作为 UART 模块 的波特率发生器的输入时钟 BRCLK o BRCLK 经波特率发生器的分频和调整功能可以获得 需要的波特率,由于调制功能的存在还可满足波特率的小数部分。波特率的产生则需要配 合波特率控制寄存器 UCAxBRO , UCAxBRl 和调整寄存器 UCAxMCTL 来完成。 根据输入时钟频率的不间,波特率的产生有两种模式,分别是低频率模式和过采样模 式。模式的选择由调整寄存器 UCAxMCTL 的过采样使能位 UCOS16 决定。 1.低频率模式 低频率模式可以利用低频时钟源产生所需要的波特率。由于使用低频时钟源,在这种 模式下可以降低 UART 模块的电流消耗。在这种模式下,波特率的设置由预分频模块和第 二级调整模块一起作用获得。分频系数为 16 位,其中最低位会配合二级调整模块一 起完成 BTCLK 的配置,其中 BTCLK 的频 BRCLK 率和波特率在数值上是相等的。频率调整 原理框图如图 6-23 所示,输入的时钟经预 BTCLK 分频模块和二级调整模块后得到 BTCLK , 其中二级调整模式由 UCAxMCTL 的 BRSx 位控制。分频系数则通过以下的计算获得: 图 6-23 低频率模式下 BTCLK 频率调整原理框图 N= f BRCLK BauRate 其中 , N 为分频系数 , N 的计算值可能包含小数。在低频模式下,寄存器的配置按照以 下步骤完成: 分频系数寄存器 UCBRl 和 UCBRO , UCBRl 的作为分频系数的高 8 位, UCBRO 作为 分频系数的低 8 位。将二者看做一个 16 位的整体,则 UCBRx=INT (N) ,即分频寄存器的 值取分频系数的整数位。 106 第一部分预备篇 小数部分用频率调整寄存器 UCBRSx 完成,计算方法为 UCBRSx= round 1[N-INT (N) ] x 8 f ,公式代表的意思是将小数部分循环乘 8 ,以获得舍人的整数作为 UCBRx的值。 而对应于 UCBRSx 的值有 8 种调整模式如表 6-20 所示,有 l 的位代表的 BTCLK 比有 0 的位代表的 BTCLK 长一个 BRCLK ,这样的解释不太容易理解。下面将以实际的案例来 解释频率调整模式所代表的意义。 表 6-20 BTCLK 频率调整模式 UCBRSx Bit 0 Bit 1 Bit 2 Bit3 Bit4 Bit5 Bit 6 Bit 7 。 。 。 。 。 。 。 。 。 。 2 。 3 。 4 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 5 。 6 。 。 。 。 7 。 」一 举一个在使用中很常见的案例, MSP430 使用 32 768 Hz 的时钟源作为其 ACLK ,并 将 ACLK 作为 UART 的时钟源,需要的 UART 波特率为 9600 。根据以上两个条件,可以 计算需要的分频系数为 32 768/9 600=3 .4 1 ,出现了小数分频系数。波特率寄存器的值应该 取整数,具体配置为: UCAxBR1=0 , UCAxBR1=3 ;调整寄存器的值配置为 (3 .4 1-3) x 8=3.28 ,舍人得到 3 ,所以 UCBRSx斗。根据以上计算可以知道,一个 BTCLK 相当于 3 .4 1 个 BRCLK ,实际上在 MSP430 的内部是无法对 BRCLK 做真正的 3 .4 1 分频,调整模块就开 始发挥作用了。从表 6-20 中查找 UCBRSx=3 的状态,可以看到有的比特位时间要长一些, 也就是对应表中的调整模式的值为 1 的位,在表中为 Bitl 、 Bit3和 Bit5 ,那么这些位对应 的 BTCLK 的宽度实际是 4 个 BRCLK; 调整模式中值为 0 的位所对应的 BTCLK 的宽度是 3 个 BRCLK 。为方便理解可绘制为示意图 6-24 ,调整以 8 个位为周期,所以对应于表格, 8 个位对应的宽度分别为 3 , 4 、 3 , 4 , 3 , 4 、 3 , 3 个 BRCLK 宽度。可以反过来计算其平 均的宽度为( 3 x 5+4 x 3) /8=3.375 ,与计算出来的 3 .4 1 分频系数接近。需要特别说明的是 在低频模式下,最大波特率必须小于输入时钟频率的 113 0 BITCLK =: ACLKl3 /4 /3 /4 /3 /4 /3 /3 /3 /4 ... |• IJ • I I I • I I • I I • I I I • I I • I I I • II • II • 一「 ST I DO I Dl I D2 I D3 I 阴阳 I D6 I D7 I 图 6-24 频率调整示意图 上面通过一个实际案例的方式解释了同频率调整的流程,下面介绍 UART 在接收过程 中的接收判决。 MSP430 的接收判决采用了多数表决的方式,会在 BRCLK 的 N/2-1/2 , N/2 第6意解~JMSP430单片机 107 和 N/2 + 112 周期处采样,如图 6-25 所示 。 随着输入时钟频率的升高,采样的间隔会变小, 导致多数表决的窗口变窄,对判决不利,所以在输入时钟频率比较高的情况不建议使用低 频模式 。 Bit Start\) I Majority Voω: (m斗)ζ亨3 ()~伊 l)f忑 BRCLK"JI V I I UI I VI I飞1" I口I I刊I I♂I ♂ I I 品 I 1.RIhf£L1 Counter iγN.I.2- N…/2-J' N‘ .I.2--2- 1 II o Ii NI2 N/2-1 1 ! 0 ! N尼 BITCLK~附~ rt Ii 刀 H" I H;←刷TM)+mi与)→1 •• 「 … M 叫叫M 刷尼问忡叫叫仨归1问)) J i NEVEN:剧T(NI2) 叫 ! 灿 NO∞ ω灿 ∞ DD:叫 剧叫叫刚阳m 即尼帆+咱 )R计川叫 }/ m ∞rr陀e附τ芭s创阳n叫dîngmo创duωl仙 au∞ b帧,itt R: Remaînder 仕om N/2 divisioD B剧i让t Pe创rriioωd 一,一~一←-一一一-→!卜一 叫 因 6-25 低频模式下 BTCLK 时序图 2. 过来样模式 在过采样模式下,对 UART 数据流 采 用更高的频率进行采样 。 多数表决的采样 间隔会一直保证为 BTCLK 周期的1I 16 , BRCLK 这样多数表决窗口宽度会随着 BTCLK 周 期而变化,不会因为 BTCLK 周期变化而 恶化 。 过采样模式的频率调整包括两级, 其 BTCLK 频率调整原理框图如图 6-26 所 示。由预分频模块和第 一 级频率调整模块 一 起获得 BTCLK16 , BTCLK16 的时钟频 率是 BTCLK 的 ]6 倍 。 BTCLK16 再由 16 分频模块和第 二 级频率调整模块共同 工作 获得 BTCLK。当 UCBRx寄存器的值设置 图 6-26 过来样模式下 BTCLK 频率调整原理框因 为 0 或者 1 时, BRCLK 直接通过第一级频率调整模块,使得 BTCLK16 和 BRCLK 的频率 相等 。 第一级频率调整模块的频率调整模式由 UCAxMCTL 的 BRFx 位决定,相对于第二级频 率调整模块 BRSx , BRFx 一共有 4 位宽,可以提供 16 种频率调整模式,用于对 BTCLK16 的频率进行调整,调整模式如表 6-21 所示,这种调整模式以 16 为周期 (BTCLK 对应于 16 个 BTCLK16 )对应于一个 BTCLK 周期重复一次 。 有 l 的位表示对应的 BTCLK16 比等于 0 的 BTCLK16 长一个周期的 BRCLK ,这一点 和第二级调整模块代表的意义是相似的 。 108 第一部分预备篇 表 6-21 BTCLK16 频率调整模式 BRFx 。 2 3 4 5 6 7 8 9 10 11 12 13 14 15 。 Oh 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 Olh 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 02h 。 。 。 。 。 。 。 。 。 。 。 。 。 。 03h 。 。 。 。 。 。 。 。 。 。 。 。 。 l 04h 。 。 。 。 。 。 。 。 。 。 。 。 05h 。 。 。 。 。 。 。 。 。 。 。 06h 。 l 。 。 。 。 。 。 。 。 。 。 07h 。 。 。 。 。 。 。 。 。 08h 。 。 。 。 。 。 。 。 09h 。 l 。 。 。 。 。 。 OAh 。 。 。 。 。 。 OBh 。 t 。 。 。 。 OCh 。 1 。 。 。 1 ODh 。 1 。 。 l OEh 。 。 OFh 。 在过采样模式下,寄存器配置值的计算与低频模式下相似,按照以下的步骤: 1 )计算分频控制寄存器的值, UCBRx = INT (NI1 6) ,其中 N 依旧为分频系数,这里 N 要除以 16 是因为第二级的频率调整有一个固定的 16 分频。 2 )计算第一级频率调整位的值, UCBRFx = round { [N/16 - INT (N116 )] x 16} , round 的意思跟前面一样都表示舍入。 3 )计算第二级频率调整位的值, UCBRSx 的值按照低频模式的方法进行计算,依旧是 8 种调整模式。 以上部分详细地介绍了 UART 在不同频率下的两种工作模式,对于两种模式下常见的 波特率,数据于册上已经将计算的值绘制成表格,可以非常方便地查阅。有了这些基础下 面详细介绍 UART 的使用过程。能够正确计算 UART 的波特率, UART 的使用就比较简单 了。按照以下的 5 个步骤使用 UART: 1 )置位 UCSWRST ,将 UART 保持在复位状态,便于后面的配置。 2) 初始化所有的 USCI 寄存器,完成 UART 功能配置。 3 )配置端口,便能复位1/0 日的 UART 端口功能。 4) 软件清除 UCSWRST , UART 进入工作状态。 5 )通过 UCRXIE 或者 UCTXIE 分别使能接受和发送中断(可选)。 关于 UART 的配置在 6.6.2 节中详细介绍,现在先介绍下 UART 中断功能和低功耗模 式下的唤醒功能。 UART 具备独立的发送中断和接收中断。当 UART 的发送缓冲 UCAxTXBUF 准备好 第6j言解~JMSP430单片机 109 接收数据的时候, UART 发送标志位 UCAxTXIFG 将置 1 。 如果同时便能了 UART 发送中 断使能位 UCAxTXIE 和全局中断使能位 GIE ,将触发一 次中断请求 。 UCAxTXIFG 位在 UCAxTXBUF 被写人数据后会自 动清零 。 需要特别注意, UART 发送标 志位 UCAxTXBUF = 在 PUC 和 UCSWRST 1 时会置 1 ,这就要求前面介绍的 UART 使用步骤中,如果使用到 了 UCAxTXIFG 位, UCSWRST 位在清零之前需要将 UCAxTXIFG 位也请零,避免产生不 必要的中断标志。 UART 如果接收到了数据 ,并且将数据已经移人接收缓冲寄存器 UCAxRXBUF ,接收 中断标 志位 UCAxRXIFG 会置 1 。 如果接收中断使能位 UCAxRXæ 和全局中断使能位 GIE 同时被使能,就会触发接收中断请求 。 接收中断标志位 VCAxRXIFG 在接 收缓冲寄存器被 读取后也 会自动清零 。 如果使能了校验位,并且校验出错( UCAxRXEIE = 0 ,表示接收的 数据错误), 在接收到错误数据的情况下,中断标志位不会置位 。 UART 在处于低功耗模式下 ,可以利用接收到的起始沿唤醒 MSP430。 当 UART 使用 SMCLK 作为时钟源 , 即 使 MSP430 处在低功耗模式下, SMCLK 已经处 于关 闭状态 。 唤醒 功能将自动激活对应的时钟源, VART 会被自动启动,而不需要 CPU 的 干涉,迅速 的时钟开 启保证了字符不会被丢失 。 在 ACLK 作为时钟源的时候不支持自动时钟唤醒。 配合下面这段 UART 回传代码进行理解,代码中的 SMCLK 使用 DCO 作为振荡器 , 由接收的起始沿唤醒 。 SetupUSCIA mov.b bis .b mov. b mov . b mov. b bic. b bis.b Mainloop bis . b USCIOIRX ISR 'UCSWRST ,晶。COCTLl 'UCSSEL1 ,品 UCOCTLl 'Ox09 ,晶。COBRO 'OxOO, &UCOBRl 'Ox08 , &UCOMCTL 'UCSWRST, &UCOCTLl 'UCORXIE, &IE2 'LPM3+GIE, SR bit.b 'UCOTXIFG, &If飞;2 jz TXO mov.b 矗 UCORXBUF , &UCOTXBUF TXO reti 1/ 配置 UA.RT 前,复位 USCI 模块 //选择时钟源为 SMCLK /1 配置分频控制寄存器 /1 配置分频控制寄存器 //配置分频调整寄存攀,波特事设置完毕 //使能 UART 模块, UART 进入工作状态 //便能 UART 接收中断 //进入{成功轮模式 LMP3 , 打开全局中断 //服务函数,起始沿唤醒,用于将接收到 /1 的数据回传回去 11 检测发送缓冲是否可以接收数锯 1/ 如果不行,跳转到 TXO /1 将接收缓冲的数据写入发送缓冲 11 中断返回 UART 的 工作原理和基本的 工作模式介绍完毕,下面将通过 UART 对应的控制寄存器 完成各种操作 。 6.6.2 UART 操你及寄存器配置 以 USCI_AO (编号为 0 ,表示在 MSP430 中 可能具备多个 USCI A 模块,以编号做区 分)为例,与 UART 相关的寄存器有 USCI AO 的控制寄存器、波特率控制寄存器、调整控 制寄存器、状态寄存器、接收缓冲寄存器、发送缓寄存器、中断使能寄存器、中断标志寄 存器,以及自动波特率控制寄存器 、 lrDA 发送控制寄存器和 IrDA 接收控制寄存器 。 其中 后三种寄存器不做详细介 绍 。 110 第一部分预备篇 ( 1 ) USCI AO 控制寄存器 UCAOCTLO 和 UCAOCTLl 控制寄存器 UCAOCTLO 和 UCAOCTLl用来完成 UART 接口功能性配置,分别如表 6-22 和表 6-23 所示。 Bit7 UCPEN 表 6-22 USCI AO 控制寄存器 UCAOCTLO BitO UCSYNC=O UCPEN: 校验使能位。用于使能 UART 的校验功能。 UCPEN啡,校验禁用。 UCPEN=l ,校验使能, UART 在发送的数据中会包含校验位,在接收的数据中校验位 也是必需的。 UCPAR: 奇偶校验选择位。校验功能开启的前提下,用于选择使用奇校验还是偶校验。 UCPAR=O ,使用奇校验。 UCPAR=l ,使用偶校验。 UCMSB: 发送顺序选择位。控制接收和发送移位寄存器的移位方向。 UCMSB=O ,最低有效位 LSB 先发送。 UCMSB=l ,最高有效位 MSB 先发送。 UC7BIT: 字符长度选择位。选择字符长度为 7 位或 8 位。 UC7BIT=0 ,字符长度为 7 位。 UC7BIT=1 ,字符长度为 8 位。 UCSPB: 停止位选择位。用于选择停止位的个数。 UCSPB=O ,停止位为 1 位。 UCSPB=l ,停止位为 2 位。 UCMODEx: USCI 模式选择位。当 UCSYNC=O 时, UCMODEx 选择不同的异步模式。 UCMODEx =00 , UART 模式。 UCMODEx =01 ,空闲线多机模式。 UCMODEx =10 ,地址位多机模式。 UCMODEx =11 ,自动波特率探测的 UART 模式。 UCSYNC=O: 同步模式便能。在 UART 模式下,该位必须设置为 0 ,设置 USCI 为异步模式。 表 6-23 USCI_AO 控制寄存器 UCAOCTL1 Bit7 BitO UCSWRST UCSSELx: USCI 时钟源选择位,用于选择 UART 工作时钟 BRCLK 的时钟源。 UCSSELx=OO ,时钟源为 UCLK o UCSSELx=Ol ,时钟源为 ACLK。 第6章解剖 MSP430单片机 111 UCSSELx=10 ,时钟源为 SMCLK 。 UCSSELx=ll ,时钟源为 SMCLK 。 UCRXEIE: 接收错误字符中断使能位。 UCRXEIE=O ,错误字符会被丢弃, UCAXR刃而不置位。 UCRXEIE=l ,错误字符接被接收, UCAXRXIFG 置位。 UCBRKIE: 接受暂停字符中断使能位。 UCBRKIE叶,接受暂停字符不会置位 UCAXRXIFG 。 UCBRKIE=l ,接受暂停字符会置位 UCAXRXIFG o UCDORM: 休眠使能位。用于将 USCI 休眠。 UCDORM=O ,非休眠态。接收的所有字符将置位 UCAxRXIFG o UCDORM=l ,休眠态。只有先于空闲态的带地址字符将置位 UCAXRXIFG 。在带自动 波特率监测的 UART 模式中只有暂停和异步域可以置位 UCAXRIFG 。 UCTXADDR: 发送地址使能位。用于选择被发送的下一帧是否为地址。 UCTXADDR=O ,下一帧发送的是数据。 UCTXADDR斗,下一帧发送的是地址。 UCTXBRK: 发送暂停位。下一个写入发送缓存的数据发送暂停。在带自动波特率监测的 UART 模式下,为了产生需要的暂停/同步域,必须将 Ox55 写到 UCAxTXBUF ,否则必须 将 OxOO 写到 UCAxTXBUF 。 UCTXBRK=O ,下一帧发送的不是暂停。 UCTXBRK=l ,下一帧发送的是暂停或者暂停/同步。 UCSWRST: 软件复位。 UCSWRST=O , USCI 被释放,将进入正常工作状态。 UCSWRST=l , USCI 被保持在复位状态。 (2) USCI AO 波特率控制寄存器 UCAOBRO 和 UCAOBR1 波特率控制寄存器 UCAxBRO 和 UCAxBR1 主要完成 UART 波特率的分频设置,分频系 数为 16 位,低 8 位为 UCAxBRO ,高 8 位为 UCAxBR10 两寄存器如表 6-24 和表 6-25 所示。 表 6-24 USCI_AO 波特率控制寄存器 UCAOBRO Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCBRx - low byte UCAxBRO: 分频系数低 8 位。 表 6-25 USCI AO 波特率控制寄存器 UCAOBR1 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCBRx - high byte UCAxBR1: 分频系数高 8 位。 112 第一部分预备篇 (3) USCI AO 调整控制寄存器 UCAOMCTL 调整控制寄存器 UCAOMCTL 完成对 UART 波特率的调整,可以让 UART 模块获得更 准确的波特率,寄存器如表 6-26 所示。 表 6-26 USCI AO 调整控制寄存器 UCAOMCTL Bit7 BitO UCOS16 UCBRFx: 第一级调整模式选择位。 UCBRSx: 第二级调整模式选择位。 UCOS16: 过采样模式使能位。 UCOS16斗,禁用过采样模式。 UCOS16=l ,使能过采样模式。 (4) USCI AO 状态寄存器 UCAOSTAT 状态寄存器 UCAOSTAT 用于反映 UART 模块的工作状态,寄存器如表 6-27 所示。 表 6-27 USCI AO 状态寄存器 UCAOSTAT Bit7 Bit2 BitO UC LISTEN UCRXERR UCBUSY UCLISTEN: 侦听使能。用于选择 UART 模块工作在发送端直接在内部连接到接收端的回 环状态。 UCLISTEN=O ,禁用回环侦听。 UCLISTEN=l ,使能回环侦昕。 UCFE: 帧错误标志位。 UCFE啡,无错误。 UCFE=l ,接收字符带有低电平停止位。 UCOE: 溢出标志位。 UCAxRxBUF 中当前数据在读取前,有新的数据进入,则该位置位。 必须软件清除。 UCOE=O ,未发生溢出。 UCOE=l ,溢出发生。 UCPE: 奇偶校验标志位。 UCPEN=O 时,奇偶校验禁用, UCPE 读出始终为 0 。 UCPEN=l 时, UCPE 为 0 ,奇偶校验结果正确; UCPE 为 1 ,接收到的数据奇偶校验出错。 UCBRK:- 暂停监测标志位。 UCBRK=O ,没有检测到暂停状态。 UCBRK=l ,暂停条件发生。 第6章解剖 MSP430单片机 113 UCRXERR: 接收错误标志位。该位表示出错字符被接收。当 UCRXERR=l 时,一个 以上的错误标志位,如 UCFE 、 UCPE 、 UCOE 也会被置位。 UCAxRxBUF 被读取时, UCRXERR 被清零。 UCRXERR=O ,接收字符正常。 UCRXERR斗,接收字符出错。 UCADDR: 在地址位多机通信模式中的地址数据标志位。 UCADDR=O ,接收的字符是数据。 UCADDR=l ,接收的字符是地址。 UCIDLE: 在空闲线多机通信模式的空闲状态检测标志位。 UCIDLE斗,未检测到空闲状态。 UCIDLE=l ,检测到空闲状态。 UCBUSY: UCSI 忙标志位。该位是否有发送或接收操作正在进行中。 UCBUSY=O , UCSI 不活动。 UCBUSY=l , UCSI 发送中或接收中。 (5) USCI AO 接收缓冲寄存器 UCAORXBUF UCRXBUFx 存储接收移位寄存器接收到的数据。数据采用右对齐的方式,在 UART 数 据为 7 位的状态下,寄存器的最高位无效,并一直保持清零状态,寄存器如表 6-28 所示。 读取该位会自动清零 UCADDR 、 UCIDLE 和 UCAxRXIFG 位。 表 6-28 USCI AO 接收缓冲寄存器 UCAORXBUF Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCRXBUFx (6) USCI AO 发送缓冲寄存器 UCAOTXBUF UCTXBUFx 存储将要发送的数据。数据采用右对齐的方式,在 UART 数据为 7 位的状 态下,寄存器的最高位无效,并一直保持清零状态。读取该位会自动清零 UCAxTXIFG 位。 寄存器如表 6-29 所示。 表 6-29 USCI AO 发送缓冲寄存器 UCAOTXBUF Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCTXBUFx (7) USCI AO 中断使能寄存器 IE2 USCI AO 中断使能寄存器 IE2 如表 6-30 所示。 表 6-30 USCI AO 中断便能寄存器 IE2 Bit7 BitO UCAORXIE 114 第一部分预备篇 VCAOTxæ: USCJ AO 发送中断使能位 。 UCAOTXIE=O , UART 发送中断禁止 。 UCAOTXIE= I , UART 发送中断使能 。 VCAORXIE: USCI AO 接收中断使能位 。 VCAORXIE=O , UART 接收中断禁止 。 UCAORXIE=l , UART 接收中断使能 。 (8) USCI AO 中断标志奇存器 IFG2 VSCI_AO 中断标志寄存辘 IFG2 如表 6-31 所示 。 褒 6-31 USCI AO 中断标志寄存哥哥 IFG2 Bit7 Bitl UCAOTXJFG UCAOTXIFG: USCI AO 发送中断标志位 。 UCAOTXIFG 斗,未发 生 UART 发送中断 。 UCAOTXIFG = 1 ,发生 VART 发送中断 。 UCAORXIFG: USCI_AO 接收中断使能位 。 UCAORXIFG 斗,未发生 UART 接收中断 。 VCAORXIFG = 1,发生 UART 接收中断 。 BitO UCAORXIFG 6.6.3 UART 操作示例 在下面 的示例中 MSP430 会将 UART 接收到的任何数据反馈回去,实现"回 声"的效 果 。 UART 的波特率被设置为标准 9600 ,并通过 MSP430 的频率调整功能使其波特率更为 精准 。 MSP430 在 一般情况下处于低功耗状态, UART 接收中断将唤醒 MSP430. MSP430 将接收到的数据写入发送缎存后会再次进入低功耗状态 。 'include "msp430g2553.h" void main(void) / 11 关闭看门狗 WDTCTL 5 WDTPW + WDTHOLD; 11 设置 DCO 领事为 lMHz ,将作为 MCLK 和 SMCLK 使用 BCSCTLl - CALBCl 1阳iz ; DCOCTL - CALDCO lMHz; 11 使能 Pl. l 的阳D 功篱, Pl . 2 的 TXD 功能 PlSEL - 81T1 + 81T2; P1SEL2 ~ BITl + B1T2; 1/ 设置 USCIAO 模块的时钟源为 SMCLK UCAOCTL1 I~ UCSSEL 2; /1 设置波特率为 lMHz/ 9600-104 UCMBRO - 104; 第6章解剖 MSP430单片机 115 UCAOBRl a 0; 11 频率调整设置,使波特率更为精准,数据手册上可参阅常用配置值 UCAOMCTL a UCBRSO; 11 释放 UART 状态机, UART 进入工作状态 UCAOCTLl 仨 -UCSWRST; 1/ 使能 UART 接收中断 IE2 1; UCAORX工 E; 1/ 进入低功耗模式 LP时,并使能全局中断 __bis_SR_register(LPMO_bits + GIE); I/UART 接收中断服务函数 'pragma vector~USCIABORX_VECTOR __interrupt void USCIORX_ISR(Voidl 11 检查发送缓得是否准备好,若未准备好则等待 while (! (IFG2&UCAOTXIFGll; //接收到的数据,写入发送缓存 UCAOTXBUF - UCAORXBUF; 6 .7 SPI 接口 SPI 接口( Serial Peripheral Interface ,串行外设接口),为微控制器和外设器件提供全 双工同步串行通信 。 SPI 作为标准同步串行接口获得了极为广泛的支持,目前大量的 A/D 转换器、 D/A 转换器、数字电位器等器件都是用 SPI 接口作为其标准通信接口 。 SPI 接口是一种 四管脚模式的串行接口,包括时钟 (SCK ) 、主 机输出从机输入 (MOSI) 、主机输入从机输出 ( MISO) 、 从设备使能 (CS ) 四个信号 。 通信示 SlMO MASTER SOMl SOMJ SLAVE SIMO 意图如图 6-27 所示 。 从信号定义中可以看出, SPI 通信是 一 种主 图 6-27 SPI 通信示意图 从模式。通信控制由主设备完成,通信按照下面的顺序完成: 1 )首先由主设备 (MASTER) 通过 CS 使能从设备 (SLAVE)。 2) 主设备通过 SCK 输出时钟,并同步通过 MOSI 输出数据,从设备在时钟的作用下 由 MI SO 向主设备传送数据 。 3 )数据传输完毕,主设备释放对从设备的使能,一次 SPI 通信完成。 MSP430 的 USCI A 和 USCI B 都能够支持 SPI 通信,下面详细介绍 MSP430 的 SPI 外设 。 116 第一部分预备篇 6.7.1 SPI 介绍 在 USCI 工作在 SPI 模式下时,通过四个管脚与外部实现通信,这四个管脚分别是 UCxSIMO 、 UCxSOMI , UCxCLK 和 UCxSTE 。其中, UCxSIMO 管脚是从机输入主机输 出管脚, UCxSOMI 是从机输出主机输入管脚, UCxCLK 是主机时钟输出管脚或者从机 时钟输入管脚, UCxSTE 是主机冲突监测或者从机使能管脚。对于 UCxSTE 需要特别注 意, UCxSTE 无论是工作在主机模式还是从机模式,都是一个输入管脚。在主机模式下, UCxSTE 用于检测从机的使能状态,若检测到从机在使能状态下,则表示从机被其他设备 占用,需要避免冲突;在从机模式下, UCxSTE 作为从机(从机为 MSP430 )的发送和接收 使能信号使用。 UCxSTE 在 SPI 通信中是一个可选信号,如果不使用 UCxSTE 管脚,则 SPI 模块工作在三管脚模式下;如果使用 UCxSTE 管脚 则 SPI 模块工作在四管脚模式下。 MSP430 的 SPI 模块提供了灵活的使用方式,其主要特点包括: ·数据长度 7 位或者 8 位可选。 ·最高有效位在先或者最低有效位在先可选。 ·主机工作模式或者从机工作模式可选。 ·时钟极性和相位可配置。 ·在主机模式下时钟频率可配置。 ,独立的接收和发送中断。 ·在 LPM4 下可以执行从机操作。 MSP430 的 SPI 模块结构框图如图 6-28 所示从图中可以看到 SPI 模块主要包括可配 置的时钟单元、接收电路单元和发送电路单元。其中时钟单元主要用于 SPI 模块工作在主 机模式下的时候为 UCxCLK 提供时钟,接收电路单元用于接收 SPI 总线上的数据并产生接 收中断,发送电路单元用于监测总线状态,发送缓冲数据以及产生发送中断。 首先,介绍 SPI 模块的时钟单元, SPI 模块的时钟可以在 ACLK 和 SMCLK 之间选择, 时钟源的选择由 UCSSELx 位确定。选中的时候作为 SPI 模块的时钟 BRCLK , BRCLK 再 经预分频模块分频产生所需要的特定频率时钟,分频系数由 N=!BRCLK / !BitRate 来确定,跟 UART 模式相似,分频系数的值即为波特率寄存器 UCxBRx 的值。但是在 SPI 模式下,不 支持频率调整功能。这主要是因为时钟单元为外设提供时钟,二者的时钟→定是同步的。 对于 SPI 通信,除了频率,时钟的相位和频率也是十分重要的。所以对于已经设置好频率 的时钟还需要经过时钟相位和调整模块来完成所需要的时钟状态。时钟相位和极性的控制 由 UCCKPH 和 UCCKPL 位来设置。其调整时序图如图 6-29 所示。 UCCKPH 位为 0 时, SPI 模块会在时钟的第一个沿上发送数据,然后在紧接着的时钟 沿上捕获收到的数据; UCCKPH 位为 1 时 SPI 模块会在时钟的第一个沿上捕获接收到的数 据,然后在紧接着的时钟沿上发送数据。为保证捕获接收数据的准确性,捕获应该在接收 数据稳定后发生,所以捕获收到的数据总是发生在时间上的中间位置(保证了建立时间和 118 第一部分预备篇 UC UC CKPH CKPL Cycle# o 0 UCxCLK 。 1 UCxCLK o UCxCLK UCxCLK UCxSTE o X UCxSIMO UCxSOMI X ~~x~~1!~ UCxSOMI Move to UCxTXBUF TX Data Shi位ed Out RX Sample Points 2 3 4 5 6 7 8 图 6-29 SPI 通信时序图 ( 1 )主机模式 三管脚模式实际使用的管脚是 4 个,包括 SPI 模块的 UCxSIMO 、 UCxSOMI , UCxCLK 以及 1 个用于从设备片选使能的通用 νo 口管脚。每次发起 SPI 通信,首先要通过通用 UO 口片选使能从机。然后检测发送中断标志位 UCxTXIFG ,如果发送标志位置位,则表示 SPI 发送缓冲寄存器 UCxTXBUF 能够接收数据,向 UCxTXBUF 中写入数据, SPI 通信就被 激活, UCxTXIFG 也会被清零。 UCxTXBUF 中的数据会被移入发送移位寄存器,依次发送 出去;与此同时,接收移位寄存器会在发送数据的时钟沿相反的那个沿上接收数据,接收 到足够的数据,接收移位寄存器的数据就被装载到接收缓冲寄存器 UCxRXBUF 。在主机模 式下,需要读取从机的数据就是通过向从机写入一个无效数据来完成的。传输完成后,通 用1/0 口释放对从机的片选, SPI 通信完成。 四管脚模式主要使用在多个主机控制一个从机的情况。这种情况下, MSP430 的 UCxSTE 管脚连接到能够表征从设备便能状态的管脚上,如果检测到从设备没有被使能, 则可以正常的占用从设备并发起通信;如果检测到从设备被使能则表示其他主机正占用从 设备,本次 SPI 通信就会被自动终止,终止包括以下动作: 1) UCxSIMO 和 UCxCLK 管脚自动设置为输入状态,避免对 SPI 总线产生影响。 2 )错位标志位 UCFE 会被置位,提供给用户处理本次通信冲突。 3 )内部状态机复位,移位动作终止。 当 UCxSTE 在写人之前 UCxTXBUF 已经检测到从机处于被占用状态,那么写入 UCxTXBUF 的数据会在 UCxSTE 检测到从机处于非占用状态后重发;如果是在发送数据的 第6章解fflJMSP430单片机 119 过程中, UCxSTE 检测到发生了冲突,那么发送的数据需要重新写入 UCxTXBUF 等待成功 发送。 在主机模式下, UCxTXIFG 标志位的置位仅仅代表 UCxTXBUF 能够接收数据, UCxTXBUF 寄存器的数据被移入了移位寄存器,而并没有发送完成。判断数据是否发生 完成要通过 UCBUSY 来判断, UCBUSY 置位则表示 SPI 模块正处在发送或者接收状态, UCBUSY 清零则 SPI 模块正处在空闲状态。 MASTER UCxSIMO SIMO SLAVE MSP430USCI UCxCLK COMMONSPI 图 6-30 SPI 通信主机模式 ( 2 )从机模式 从机模式下, MSP430 作为从机使用,时钟由 UCxCLK 管脚从外部输入, SPI 模块在 外部时钟的作用下串行输入/输出数据,如图 6-31 所示。 MASTER SIMO UCxSIMO SLAVE COMMONSPI MSP430USCI 图 6-31 SPI 通信从机模式 从机模式也分为三管脚模式和四管脚模式。三管脚模式下,通信使用 UCxSIMO , UCxSOMI , UCxCLK 兰个管脚,在时钟的作用下完成数据的收发操作。四管脚模式需 120 第一部分预备篇 要使用 UCxSTE 管脚,当 UCxSTE 检测到输入电平为便能状态,才会开始数据通信。当 UCxSTE 管脚检测到当前状态为非使能状态,则会马上暂停接收操作,并将输出管脚方向 变换为输入状态;当 UCxSTE 恢复使能状态,则移位寄存器恢复正常工作状态。在通信的 过程中,接收寄存器的数据如果没有被及时读取会被之后接收到的数据覆盖,相应的溢出 错误位 UCOE 将置位。 MSP430 工作在从机模式下时,因为时钟由外部提供,所以在 LPM4 模式下也可以正常 接收外部数据,并通过接收中断唤醒 CPU 。这个特性保证 MSP430 即使在低功耗的休眠状 态下,仍然能够完整的接收数据并及时处理接收数据。 有了以上的了解, SPI 接口初始化和使用就比较简单,由于是 USCI 的不同模式,基本 的操作依旧是: 1 )置位 UCSWRST ,将 SPI 保持在复位状态,便于后面的配置。 2) 初始化所有的 USCI 寄存器,完成 SPI 功能配置。 3 )配置端口,使能复位1/0 口的 SPI 端口功能。 4) 软件清除 UCSWRST , SPI 进入工作状态。 5 )通过 UCRXIE 或者 UCTXIE 分别使能接收和发送中断(可选)。 对 SPI 接口的配置或者重配置都应按照以上 5 步来完成。介绍完 SPI 接口的工作原理 和基本的工作模式,下面通过对 SPI 相关寄存器的配置完成各种操作。 6.7.2 SPI 操作及寄存器配置 USCI A 和 USCI B 模块都具备 SPI 接口,下面以 USCI A 为例进行介绍。与 SPI 相 关的寄存器有 USCI A 的控制寄存器、波特率控制寄存器、调整控制寄存器、状态寄存器、 接收缓冲寄存器、发送缓寄存器、中断使能寄存器、中断标志寄存器。 ( 1 ) USCI A 控制寄存器 UCAxCTLO 和 UCAxCTL1 UCAxCTLO 和 UCAxCTLl 主要完成 SPI 接口的功能性配置,表 6-32 和表 6-33 分别介 绍了 UCAxCTLO 和 UCAxCTL1寄存器各位代表的意义。 表 6-32 控制寄存器 UCAxCTLO Bit7 UCCKPH BitO UCSYNC=l UCCKPH: 时钟相位控制位。若该位为 0 ,则数据在每个时钟周期的第一个沿上发送数 据,在下一个时钟沿捕获接收的数据;若该位为 1 ,则在每个时钟周期的第一个沿上捕获接 收的数据,在下一个时钟沿上发送数据。 UCCKPL: 时钟极性控制位。若该位为 0 ,则非活动状态下时钟为低电平;若该位为 1 , 则非活动状态下时钟为高电平。 第6章解~JMSP430单片机 121 UCMSB: 移位寄存器方向控制位。该位用于控制发送或者接收串行数据的顺序,若该 位为 0 ,则发送或者接收数据最低有效位在前;若该位为 1 ,则发送或者接收数据最高有效 位在前。 UC7BIT: 字符长度选择位。 SPI 接口可以选择 7 位或者 8 位模式。若该位为 0 ,则字 符长度为 8 位;若该位为 1 ,则字符长度为 7 位。 UCMST: 主从模式选择位。若该位为 0 ,则 MSP430 工作在从机模式下;若该位为 1 , 则 MSP430 工作在主机模式下。 UCMODEx: USCI 工作模式选择位。若 UCMODEx=OO ,则 USCI 工作在兰管脚 的 SPI 模式;若 UCMODEx=OI ,则 USCI 工作在四管脚模式, UCxSTE 有效状态为高电 平;若 UCMODEx=10 ,则 USCI 工作在四管脚模式, UCxSTE 有效状态为低电平;若 UCMODEx= l1 , USCI 工作在 eC 模式。 UCSYNC=I: 同步模式使能位。当 USCI 工作在 SPI 接口模式下,该位必须设置为 1 。 表 6-33 控制寄存器 UCAxCTL 1 Bit7 BitO UCSWRST UCSSELx: 主机模式下,时钟源选择位(从模式下时钟来自外部 )0 UCSSELx=OO ,无 时钟源; UCSSELx=OI ,时钟源为 ACLK; UCSSELx=10 或者 UCSSELx=ll ,时钟源为 SMCLK 。 UCSWRST: USCI 软件复位位。该位为 1 , USCI 被复位;该位为 0 , USCI 被释放, 处于正常工作模式。 (2) USCI A 波特率控制寄存器 UCAxBRO 和 UCAxBRl 波特率控制寄存器 UCAxBRO 和 UCAxBRl 主要完成 SPI 时钟的分频设置,分频系数为 16 位,低 8 位即为 UCAxBRO ,高 8 位为 UCAxBRl 。两寄存器如表 6-34 和表 6-35 所示。 表 6-34 波特率控制寄存器 UCAxBRO Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCBRx - low byte UCAxBRO: 低 8 位分频系数。 表 6-35 波特率控制寄存器 UCAxBR1 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCBRx - high byte UCAxBR1: 高 8 位分频系数。 (3) USCI A 状态寄存器 UCAxSTAT 状态寄存器 UCAxSTAT 包含 SPI 接口的工作状态标志位,如表 6-36 所示。 122 第一部分预备篇 表 6-36 状态寄存器 UCAxSTAT Bit7 UCLISTEN BitO UCBUSY UCLISTEN: 回环选择位。该位为 0 , SPI 工作在正常模式下;该位为 1 ,则数据发送 端口和数据接收端口在 MSP430 的内部相连,主要用于调试。 UCFE: 帧错位标志位。在四管脚模式下,如果发送了通信冲突,该位置位。 UCOE: 接收溢出标志位。当接收缓冲寄存器 UCxRXBUF 的数据在被读取前有新的数 据被转入,则该位置位。读取 UCxRXBUF 后自动清零,不得使用软件清零,否则会引起工 作异常。 UCBUSY: USCI 工作标志位。该位为 0 ,则 USCI 处在非活动状态;该位为 1 ,则 USCI 正在接收或者发生数据。 (4) USCI A 接收缓冲寄存器 UCAxRXBUF 接收缓冲寄存器 UCAxRXBUF 用于存储接收到的数据,在 8 位模式下,该寄存器 8 位 都有效;在 7 位模式下,则低 7 位有效,最高位一直为 0 。寄存器如表 6-37 所示。 表 6-37 接收缓冲寄存器 UCAxRXBUF Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCRXBUFx (5) USCI A 发送缓冲寄存器 UCAxTXBUF 发送缓冲寄存器 UCAxTXBUF 用于存储发送的数据,在 8 位模式下,该寄存器 8 位都 有效;在 7 位模式下,则低 7 位有效,最高位一直为 0 。寄存器如表 6-38 所示。 表 6-38 发送缓冲寄存器 UCAxTXBUF Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCTXBUFx (6) USCI A 中断使能寄存器 IE2 中断使能寄存器 IE2 实际是与其他模块共用的特殊功能寄存器,与 USCI 相关的是该寄 存器的低 4 位,如表 6-39 所示。 表 6-39 中断便能寄存器 IE2 Bit7 BitO UCAORXIE UCBOTXIE: USCI_BO 模块发送中断使能位。若该位为 0 ,则 USCI_BO 模块发送中断 被禁用;若该位为 1 ,则 USCI BO 模块发送中断被使能。 UCBORXIE: USCI_BO 模块接收中断使能位。若该位为 0 ,则 USCI_BO 模块接收中断 被禁用;若该位为 1 ,则 USCI BO 模块接收中断被使能。 第6章解'äiJMSP430单片机 123 UCAOTXIE: USCl_AO 模块发送中断使能位 。 若该位为 0 ,则 USCJ_AO 模块发送中断 被禁用;若该位为 1 ,则 USCI_AO 模块发送中断被使能 。 UCAORXJE: USCI_AO 模块接收中断使能位 。 若该位为 0 ,则 USCI AO 模块接收中断 被禁用;若该位为 1 ,贝IJ USCI_AO 模块接收中断被使能 。 (7) USCI_A 中断标志寄存器 IFG2 中断标志寄存器 IFG2 也是与其他模块共用的特殊功能寄存器,与 USCI 相关的是该寄 存器的低 4 位,如表 6-40 所示 。 表 6-40 中断标志寄存普普 IFG2 Bit? Bit3 Bit2 Bitl BitO UCBOTXIFG I UCBORX1FG I UCAOT泪FG I UCAORXlFG UC80T泪FG: USCI_BO 模块发送中断标志位 。 当 UCBOTXBUF 为空时,该位置位 。 如果该位为 0 ,则 USCI 80 模块无发送中断请求;如果该位为 1 ,则 USCI_80 模块发送发 送中断挂起。 UC80RXIFG : USCI 80 模块接收中断标志位 。 当 UCBORXBUF 接收到 完整的字符, 该位置位 。 如果该位为 0 ,则 USCI BO 模块无接收中断请求;如果该位为 1 ,则 USCI_80 模块接收中断挂起 。 UCAOT刀FG: USCl AO 模块发送中断标志位 。 当 UCAOTX8UF 为空时,该位置位 。 如果该位为 0 ,则 USCI_AO 模块无发送中断请求;如果该位为 1 ,则 USCI_AO 模块发送中 断挂起 。 UCAORXIFG: USCI AO 模块接收中断标志位 。 当 UCAORXBUF 接收到完整的字符, 该位置位 。 如果该位为 0 ,则 USCI AO 模块无接收中断请求;如果该位为 1 ,则 USCI_AO 模块接收中断挂起 。 6.7.3 SPI 操作示例 下面将介绍两个例子,介绍 MSP430 分别工作在主机状态和从机状态的操作。第一个 例子是 MSP430 工 作在主机状态,首先配置片上 USCIAO 模块 工作在 SPI 模 式 。 初始化 P l.l为 SOMI , P 1. 2 为 SIMO , P 1. 4 为 SCLK , P l. O 和 P 1. 5 管脚配置为输出 。 主机在初始 化完毕后通过 P 1. 5 管脚输出控制电平,告知从机初始化完毕,之后延时等待从机初始化 。 主机通过 SPI 发送数据 给从机,在接收中断中比较从机回传的数据是否出错,并由 P 1.0 管 脚的输出电平来表示比较的结果 。 finclude R msp 430g2553.h. unsiqned char MST_Data, SLV_Data ; void main(voíd) { volatile unsigned int í; 11 关闲看门狗 124 第一部分预备篇 WOTCTL ; WOTPW + WOTHOLO; IIPl 蜷口编出寄存 &7青零 II 停止看门掬定'才嚣 PIOUT ; OxOO; II 设置 P l. O 和 P 1. 5 为输出 .BITO(OxOl).BIT5(Ox20) ,头文件中定义 PIOIR I~ BITO + B1T5; II 开启 1/0 口管脚的 SPI 功能, Pl.l (UCAOSOMI) , Pl.2 (UCAOS1MO) , Pl.4 (UCAOCLK) P1SEL = B1Tl + B1T2 + BIT4; PlSEL2 s BITl + BIT2 + BIT4; 1/ 设置 USCIAO 模块工作在主机模式下 II 时钟无效状态为高,.t.作在 3 线 tl 主机模式下,数锯最高有效位在前 UCAOCTLO 1- UCCKPL + UCMSB + UCMST + UCSYNC; II 设置 USCIAO 时钟源为 SMCLK, S眈LK 默认时钟为民0 约为 lMHz UCAOCTLl 1& UCSSEL_2; II 设置时钟分'贸系数为 2 UCAOBRO 1= Ox02; UCAOBRl - 0; II 没有频率调整 UCAOMC1'乙 = 0; II 初始化 USCIAO 状态机 。CAOCTLl 伊- UCS刷RST; II 使能 USCIAO 接收中断 1E2 1- UCAORXIE; IISP1 接口初始化完毕,向}Á机发送控制电平 PIOUT &; - B1T5; PIOUT l% BIT5: II 延时等待从机初始化 __delay_cycles(75); II 数据赋值 MST Oata z OxOl: SLV Oata - OxOl; II 发送缓存写入发送数据 UCAOTXBUF - MST Oata; II 进入低功耗模式 LPMO ,使能会局中断 __bis_SR_register(LPMO_bits + GIE); I I SPI 接收中断服务函数 'pragma vector=USCIABORX_VECTOR __interrupt void USC1AORX_lSR(VOid) volatile unsigned int i; II 判断 SPI 发送缀得是否就绪 while (! (1FG2 晶 UCAOTXIFG) ) ; II 判断接收到的数据是否正确 i~ (UCAORXBUF -- SLV_Oata) PIOUT 1= BITO; else PIOUT 矗= - BITO; H 数据加 1 MST Oata++; SLV Oata++; 第6章解'fttJ MSP430单 片机 125 //发送新的数据 UCAOTXBUF s MST Data; //延时,造免发送速度过快,从机没有足够的时间响应 __delay_cycles(50); 下面的这个例子是 MSP430 工作于从机模式下的代码,从机在接收到主机的控制电平 (高有效)后开始初始化 S PI 接口为 SLAVE 模式,初始化完毕后进人低功耗模式等待接 收 数据 。一旦接 收到主机发送的数据立 即在接收中断中回传 。 #include "msp430g2553.h" void main(void) //关闭。 f1 狗 WOTCTL = WDTPW + WOTHOLO; / /P1. 5 设置为输入 FIOIR 晶= - BIT4; /1 等待主机初 SPI 接口初始化完毕,发送控制电平 while (! (PlIN & BIT4)); /1 开启 1/0 口管脚的 SF1 功能, Pl.l P1SEL ~ BITl + BIT2 + BIT4; P1SEL2 ~ BITl + BIT2 + B1T4; 11 复位 USCIAO 状态机 (UCAOSOMI) , Pl.2 (UCAOSIMO) , Pl.4 UCAOCTLl = UCSWRST; 11 设置 USClAO 模块工作在从机模式下 //时钟无效状态为高,工作在 3 线制主机模式下,数据最高有效位在前 UCAOCTLO 1- UCCKPL + UCMSB + UCSYNC; //停放 USC1AO 状态机复位状态 UCAOCTLl &- - UCSNRST; //使能 SF1 接收中断 IE2 15 UCAORXIE; //进入低功耗状态 LPM4 ,使能全局中断 __bis_SR_register(LPM4_bits + G1E); (UCAOCLK) /1 接收中断服务量数 fpragma vector=USC1ABORX_VECTOR __interrupt void USCIORX_ISR (void) //检查发送缓存是否准备好,若未准备好则等待 while ( ! (IFG2 & UCAOTXIFG)); //:将接收到的数据立即发送回去 UCAOTXBUF - UCAORXBUF; 6.8 1 2C接口 I2C 串行总线是由飞利浦公司于 1992 年(推出标准规范1.0 版本)推出的两线制串行总 126 第一部分预备篇 线。 eC 总线仅占用两根信号线,在微处理器系统中极大地节约了1/0 接口,因而得到了大 量的器件支持,现已成为标准串行接口。 I2C 总线的两根信号线分别是串行时钟线 (SCL) 和串行数据线 (SDA ),标准 fc 总线结构如图 6-32 所示。从图中可以看到,支持 fc 总线 的器件其串行时钟线和串行数据线都是开漏的,所以两根信号线都需要上拉电阻 Rp 才能正 常使用,上拉电阻在 1 ~ 10k !1之间选取。总线支持多器件的互联,每个连接到总线上的 器件可通过唯一的地址被识别,但是总线的上总的负载电容不能超过 400pF 。 +VDD SDA(Serial Data Line) SCL(Serial Clock Lin晴) 广 DATANl _j OUT lr\牛?!芒JI」 DEVICEl 囱 6-32 I2C 总线结构 DEVICE2 I2C 总线的通信也是一种主从模式,由主机发起并控制整个通信流程,从机对主机做出 响应,其基本的时序如图 6-33 所示。 同门 D AC L C M J 口U 出 789 2 叫 RIW ACK 图 6-33 I2C 通信时序 主机控制产生起始条件发起 eC 通信,起始条件是 SCL 置高的情况下, SDA 上产生一 个从高到低的跳变。紧接着起始条件主机会发送一个比特的数据。其中前 7 位是从机地址 数据,最后 11 位是读写位(即W)。从机会比对接收到的地址数据,只有地址匹配的从机 才会做出响应。读写位町W 是一个命令位,如果 RJW=O ,则表示后面的数据为主机向从机 发送的数据,可以看做是主机向从机写数据;如果 RJW= l,则表示后面的数据为主机接收 从机发送的数据,可以看做是主机读取从机的数据。第一个比特的数据发送完之后,主机 会释放 SDA 信号线,等待从机的应答信号 ACK 。如果在第 9 个时钟脉冲周期内 SDA 被拉 低,则表示从机接收到数据,正常地给出了应答;反之,则认为从机未给出正常应答。从 第6章解~JMSP430单片机 127 第二个比特开始,根据R/W 的值, SDA 上会出现两种数据流向。当R/W=O ,主机向从机 传输数据,从机提供 SCL 时钟脉冲, SDA 上的数据流向是由主机流向从机;当R/W=l ,主 机接收从机传输的数据,那么主机提供 SCL 时钟脉冲, SDA 上的数据流向是由从机流向主 机。数据传输完毕, SDA 的控制权回到主机,在 SCL 为高的情况下,主机在 SDA 上产生 一个由低到高的跳变,则构成了停止条件 , eC 通信结束。 eC 通信为保证通信的可靠性,每一个比特传输完成后,发送端都会等待接收端给出应 答信号。关于发送端和接收端的概念需要与主机和从机的概念区分开。主机和从机都既可 以是发送端也可以是接收端,发送端和接收端的概念是根据 SDA 上的数据流向来区分的。 主机向从机写人数据的时候,发送端是主机,接收端是从机,主机等待从机的应答信号; 主机做读取操作,接收从机发送的数据的时候,主机是接收端,从机是发送端,从机等待 主机的应答信号。 在 eC 通信中还有一点需要特别 DataLine ! Stable Data ! 注意,在 SCL 为高的情况下, SDA 必 SDA 须保持稳定,否则会产生错位的起始 条件或者停止条件; SCL 为低的条件 SCL 下, SDA 才能发生变化。 • 4 」→~ Change of Data Allowed 6.8.1 1 2C 介绍 图 6-34 eC 比特传输 MSP430 中 USCI B 模块支持 I2C 接口, USCI A 模块不支持 eC 模式。 USCI B 模块 工作在 eC 模式下具备以下特点: ·兼容飞利浦发布的最新的 2.1 版本 eC 接口标准。 • 7 位或者 10 位寻址模式。 ·支持多主机收发模式。 ·支持从机收发模式。 ·标准模式下通信速率可以达到 100kbps ,快速模式通信速率可达到 400kbps 。 ·主机模式下发送时钟可编程。 ·在从机模式下可检测起始位从低功耗模式唤醒。 工作在 eC 模式下的 USCI B 结构框图如图 6-35 所示,从图中可以清楚地看到此 时的数据线 UCxSDA 和时钟线 UCxSCL 都是开漏的。对于 USCI B ,输入的数据由接 收移位寄存器 (receive Shi自 Register) 接收,并将接收完毕的数据载入到接收缓冲寄存 器 (UC1RXBUF) 中;如果接收的数据为地址数据,还能够与自身地址( Own Address UC10A) 相比对。发送数据则由发送移位寄存器( Transmit Shi位 Register) 通过反相器 驱动开漏的 MOS 管,进而驱动 UCxSDA 。发送移位寄存器的数据可以由发送缓冲寄存器 (UC1TXBUF) 或者从机地址寄存器 (UC1SA) 载入。 时钟模块只有 MSP430 工作在主机模式下才会启用,时钟源可以是 UC1CLK (外部时 128 第一部分预备篇 钟)、 ACLK 和 SMCLK ,选中的时钟源经分频模块分频后作为位时钟,通过与非门驱动开 漏的场效应管,进而驱动 UCxSCL 。 UCAI0 UCGCEN UCxSDA 12C State Machine UCSSELx UCxSCL UCICLK ACLK SMCLK SMCLK 16 PrescalerlDivider 图 6-35 eC 模式下 USCI B 结构框图 上面介绍完了 USCI B 模块在 eC 模式下的结构,下面介绍 MSP430 支持的两种 I2C 接 口寻址模式。 ( 1 )寻址模式 eC 寻址模式分为 7 比特模式和 10 比特模式两种,结构分别如图 6-36 所示和图 6-37 所 示。在图 6-36 所示的 7 位寻址模式中,从机地址在起始条件之后的第一个字节总被发迭, 该字节的高 7 位即为 7 位地址值。在图 6-37 所示的 10 位寻址模式中,地址在起始条件之 第6章解ÑlJMSP430单片机 129 后紧接着的两个字节中发送。其中第一个字节的高 7 位为二进制序列 11110 加上地址值的 最高 2 位,第二个字节的 8 位为 10 位地址值的低 8 位。 l l j"-一一一 7 一一→I 11 1 ~…一-8 一一一→I 1 j"-一-8 …一-----+j 1 1 1 1 l IS Slave Address I 丽 I ACK Data I ACK I Data I ACK Ip I 罔 6-36 I2C 模块 7 位寻址模式 I I !1 I←一一 7 一…→I 1 1 j"-一一-8 一一一一叫 1~一一 8 一一一叫 1 1 1 i I I I I I S Slave Address 1 的yte 川JW ACK Slave Address 2nd byte ACK Data I ACK Ip I 11 1 1 1 0 X xl 罔 6-37 eC 模块 10 位寻址模式 ( 2 )工作模式 MSP430 的 fc 模块可以T今作在从机和主机两种工作模式下。在从机模式下,由外部的 主机提供通信的时钟;在主机模式下,由 MSP430 发送通信时钟。下面分别介绍两种工作 模式。 USCI B 工作在 12C 从机模式下,首先要设置 fc 模块工作在从机模式,还需要确 定 12C 模块的地址模式, MSP430 作为从机,地址模式可以设置为 7 位或者 10 位,由 UCBxCTLO 寄存器的 UCAI0 位确定。自己的地址值通过配置本地地址寄存器 UCBxI2COA 完成; UCBxI2COA 寄存器还有一个广播响应位 UCGCEN ,该位决定 12C 模块是否对主机 发送的广播响应。 MSP430 作为从机在接收到起始条件并接收到与本地地址相匹配的地址后,根据 R/W 位的状态会进入发送状态(接收的 R/W=O) 和接收状态(接收的 R1W=1 )。 接收的 R/W=O , MSP430 会自动将 12C 发送接收选择位 UCTR 位和发送中断标志位 UCBxTXIFG 置位, 12C 模块进入发送状态,发送缓冲寄存器 UCBxTXBUF 可以接收数 据。与此同时强制将 SCL 线拉为低电平,直到 CPU 将发送的数据写人发送缓冲寄存器 UCBxTXBUF , 12C 释放 SCL 线,给出 ACK 信号。 UCBxTXBUF 的数据会被载入输出移位 寄存器,在外部主机时钟的驱动下,输出移位寄存器的数据发送到 SDA 线上。 接收的 R/W=I , MSP430 会自动将 12C 发送接收选择位 UCTR 位清零,进入接收 模式。 12C 模块的移位寄存器会依次接收 SDA 线上的串行数据,并将接收到的数据载 入 UCBxRXBUF ,接收中断标志位 UCBxRXIFG 置位, fc 模块的移位寄存器继续接收 数据。 UCBxRXIFG 置位后, CPU 应该读取 UCBxRXBUF 的数据,并在移位寄存器向 UCBxRXBUF 载人数据前完成。如果 UCBxRXBUF 的数据没有被读取,移位寄存器又完成 了一次接收过程,这个时候 SCL 线会被 MSP430 强制拉低, MSP430 不会继续接收数据。 在接收的过程中可以控制发送 NACK 信号(与 ACK 相反,表示应该信号前一个字节的数 据没有正常接收)。控制寄存器 UCBxCTLl的 UCTXNACK 位置位,会在下一个确认环节 130 第一部分预备篇 发送 NACK 信号。若执行了 UCTXNACK 位的置位操作,无论 UCBxRXBUF 是否准备好 接收数据,都会启动接收操作,并将移位寄存器的数据载入 UCBxRXBUF ,之前未被读出 的数据会因此丢失。 MSP430 作为主机同样将 USCI B 控制寄存器 UCBxCTLO 的模式控制位 UCMODEx 置 为 11 ,并将 eC 主从选择位 UCMST 设置为 1 。从机地址由从机地址寄存器 UCBxI2CSA 设 置;地址模式也支持 7 位和 10 位两种模式 UCBxCTLO 寄存器从机地址选择位 UCSLA10 设置地址模式。在主机模式下, MSP430 可选择作为发送端或者接收端工作。 作为发送端, I2C 发送接收选择位 UCTR 位置位,设置从机地址寄存器 UCBxI2CSA , 将控制寄存器 UCBxCTL1的起始条件 UCTXSTT 位置位。 eC 模块会检测 eC 总线是否空 闲,如果空闲,将作为主机发送起始条件,紧接着发送从机地址,从机响应地址信号后, UCTXSTT 位清零。当产生起始条件后,发送中断标志位 UCBxTXIFG 置位,表示发送的 数据可以写入发送缓冲寄存器 UCBxTXBUF 。每当 UCBxTXBUF 的数据被载入发送移位 寄存器, UCBxTXIFG 就会置位,表示新的数据可以写入 UCBxTXBUF 。如果在发生移位 寄存器的数据发送完毕之后, UCBxTXBUF 依旧没有被写入新的数据 , eC 模块会在从机 发送 ACK 的那个时钟周期内一直将 SCL 线置低,直到新的数据被写入 UCBxTXBUF 。为 完成一个完整的发送操作 , eC 模块将在接收到最后一个来自从机的 ACK 信号之后产生停 止条件。停止条件通过将 UCBxCTL1的停止条件 UCTXSTP 位置位实现。 UCTXSTP 位 需要在发送最后一个数据的过程中就置位,或者在数据发送开始之后置位,并且不再向 UCBxTXBUF 写入数据。在发送的过程中可能从机并不响应 eC 模块,这个时候 NACK 中断标准位 UCNACKIFG 会置位。可根据该标志位再次产生起始条件,重启传输,或者 发送停止条件。在此之前写入 UCBxTXBUF 的数据会被忽略,发送的数据要重新写人 UCBxTXBUF 。 作为接收端,设置完从机地址之后,需要将 eC 模块发送接收选择位 UCTR 位清零, 设置 eC 模块为接收模式。紧接着将控制寄存器 UCBxCTL1 的起始条件 UCTXSTT 位置 位,发送起始条件。起始条件之后会发送从机地址,在从机响应地址之后, UCTXSTT 位 清零。从机在 eC 模块发送的时钟信号驱动下,将数据传输到 SDA 线上。 I2C 模块的移位 寄存器在接收到完整的数据后,就会将数据载入接收缓存寄存器 UCBxRXBUF ,接收中断 标志位 UCBxRXIFG 置位。 CPU 应该及时地读取 UCBxRXBUF 的数据,否则接收移位寄 存器就会接收新的数据,但是 UCBxRXBUF 的数据仍未被读取, eC 模块会保持 SCL 线状 态,不再发送时钟。在将 eC 模块的停止条件控制位 UCTXSTP 或者起始条件 UCTXSTT 置位之前, I2C 模块会不断地读取数据。当 UCTXSTP 置位,当接收到最后一个数据后, eC 模块产生一个 NACK 信号并产生停止条件。对于从机没有响应 I2C 模块的情况,同样 UCNACKIFG 标志位会置位, I2C 模块可以采取发送起始条件,重启通信;或者发送停止条 件,停止通信。 有了以上 fc 模块工作原理的介绍,下面通过寄存器的配置操作完成 I2C 模块的使用。 第6章解青rjMSP430单片机 131 6.8.2 1 2C 操作及寄存器配置 只有 USCI B 模块都具备 eC 接口,下面以 USCI B 为例进行介绍。与 eC 相关的寄存 器有 USCI B 的控制寄存器、波特率控制寄存器、调整控制寄存器、状态寄存器、接收缓 冲寄存器、发送缓冲寄存器、本地地址寄存器、从机地址寄存器、中断使能寄存器、中断 标志寄存器。 1) USCI B 控制寄存器 UCBxCTLO 和 UCBxCTL1 表 6-41 和表 6-42 分别是控制寄存器 UCBxCTLO 和控制寄存器 UCBxCTL1。 表 6-41 控制寄存器 UCBxCTLO Bit7 UCAI0 BitO UCSYNC=l UCA10: 本地地址模式选择。 UCA10=0 , 7 位本地地址。 UCA10=1 , 10 位本地地址。 UCSLA10: 从设备地址模式选择。 UCSLA10啡, 7 位从设备地址。 UCSLAI0=1 , 10 位从设备地址。 UCMM: 多主设备的环境选择。 UCMM=O ,单主设备环境。在这个系统中没有其他主机,其地址匹配单元禁用。 UCMM=l ,多主设备环境。 UCMST: 主设备模式选择。在多主设备环境中 (UCMM=l ),当主设备仲裁释放后, UCMST 位自动被清 0 ,同时其模式变为从设备模式。 UCMST=O ,从设备模式。 UCMST=l ,主设备模式。 UCMODEx: USCI 模式。当 UCSYNC=l 时, UCMODEx 位用于选择同步模式。 UCMODEx=OO , 3 线 SPI 。 UCMODEx=Ol , 4 线 SPI ( STE=l 时,主从模式使能)。 UCMODEx=02 , 4 线 SPI (STE=O 时,主从模式使能)。 UCMODEx=03 , fc 模式。 UCSYNC: 同步模式使能。 UCSYNC啡,异步模式。 UCSYNC=l ,同步模式。 表 6-42 控制寄存器 UCBxCTL1 Bit7 Bit3 BitO UCTXNACK UCSWRST 132 第一部分预备篇 UCSSELx: USCI 时钟源的选择。这些位选择 BRCLK 时钟源。 UCSSELx=OO , UCLKI o UCSSELx=01 , ACLK 。 UCSSELx=02 , SMCLK 。 UCSSELx=03 , SMCLK 。 UCTR: 发送/接收选择位。 UCTR=O ,接收。 UCTR=1 ,发送。 UCTXNACK: 发送一个 NACK 信号。该位在 NACK 信号发送后自动清 0 。 UCTXNACK=O ,正常响应。 UCTXNACK=1 ,产生 NACK 信号。 UCTXSTP: 在主设备模式中发送 STOP 条件,在从设备模式中该位被忽略。在主设备接收 模式中, NACK 信号在 STOP 条件之前,当 STOP 条件产生后,该位自动清 0 。 UCTXSTP=O ,不产生 STOP 条件。 UCTXSTP=1 ,产生 STOP 条件。 UCTXSTT: 在主设备模式中发送 START 条件,在从设备中该位被忽略。在主设备接收模 式中, NACK 信号在 START 条件重发之前。当 START 信号和地址信息被发送后,该位自 动清 0 0 UCTXSTT=O ,不产生 START 条件。 UCTXSTT=1 ,产生 START 条件。 UCSWRST: 软件复位使能。 UCSWRST=O ,则禁止。 USCI 复位使操作释放。 UCSWRST=1 ,则使能。在复位状态中, USCI 的逻辑被保持。 2) USCI B 波特率控制寄存器 UCBxBRO 和 UCBxBR1 ,表 6-43 和表 6-44 分别为控制 寄存器 UCBxBRO 和控制寄存器 UCBxBR10 表 6-43 波特率控制寄存器 UCBxBRO Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCBRx - low byte 表 6-44 波特率控制寄存器 UCBxBR1 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCBRx - high byte 波特率控制寄存器 UCAxBRO 和 UCAxBR1 主要完成 I2C 波特率的分频设置,分频系数 为 16 位,低 8 位为 UCAxBRO ,高 8 位为 UCAxBR1 。 3) USCI B 状态寄存器 UCBxSTAT ,如表 6-45 所示。 第6章解'tfIJMSP430单片机 133 表 6-45 状态寄存器 UCBxSTAT Bit7 Unused BitO UCALIFG UCSCLLOW: SCL 低电平。 UCSCLLOW吨, SCL 没有被拉为低电平。 UCSCLLOW=l , SCL 被拉为低电平。 UCGC: 广播地址接收。接收到 START 信号后,该位自动清 0 0 UCGC=O ,没有接收到广播地址。 UCGC=l ,接收到广播地址。 UCBBUSY: 总线繁忙位。 UCBBUSY=O ,总线空闲。 UCBBUSY=l ,总线忙。 UCNACKIFG: 没有响应中断标志位。接收到二个 START 信号后,该位自动清 0 。 UCNACKIFG=O ,没有中断请求。 UCNACKIFG=l ,有中断请求。 UCSTPIFG: 停止条件中断标志位。接收到一个 START 条件后该位自动清 0 。 UCSTPIFG=O ,无中断请求。 UCSTPIFG=l ,有中断请求。 UCSTTIFG: 开始条件中断标志位。接收到一个 STOP 条件后该位自动清 0 。 UCSTTIFG=O ,无中断请求。 UCSTTIFG=l ,有中断请求。 UCALlFG: 仲裁失效中断标志位。 UCALIFG=O ,无中断请求。 UCALIFG=l ,有中断请求。 4) USCI B 接收缓冲寄存器 UCBxRXBUF ,如表 6-46 所示。 表 6-46 接收缓冲寄存器 UCBxRXBUF Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCRXBUFx UCRXBUFx 存储接收移位寄存器接收到的数据。读取该位会自动清零 UCBxRXIFG 位。 5) USCI B 发送缓冲寄存器 UCBxTXBUF ,如表 6-47 所示。 表 6-47 发送缓冲寄存器 UCBxTXBUF Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO UCTXBUFx 134 第一部分预备篇 UCTXBUFx 存储将要发送的数据。读取该位会自动清零 UCAxTXIFG 位。 6) USCI_B 本地地址寄存器 UCBxI2COA ,如表 6-48 所示。 表 6-48 本地地址寄存器 UCBxl2COA Bit15 Bit8 UCGCEN Bit7 BitO 12COAx UCGCEN: 广播响应使能。 UCGCEN=O ,不响应广播。 UCGCEN=l ,响应广播。 12COAx: I2C 模式本地地址。 I2COAx 包含了 USCI Bx 中 fc 控制器的本地地址。该地址 应该是正确合理的。在 7 位寻址方式中,第 6 位为最高位, 9~7 位忽略。在 10 位寻址方 式中,第 9 位为最高位。 7) USCI B 从机地址寄存器 UCBxI2CSA ,如表 6-49 所示。 表 6-49 从机地址寄存器 UCBxl2CSA Bit15 Bit8 0 Bit7 BitO 12CSAx 12CSAx: 位 9 ~ 0 I2C 从设备模式的地址。 I2CSAx 包含了被 USCI Bx 模块寻址的扩展设 备的从地址。 I2CSAx 只有在主机模式才有效。该地址应该是正确合理的。在 7 位寻址方式 中,第 6 位为最高位, 9~7 位忽略。在 10 位寻址方式中,第 9 位为最高位。 8) USCI_B 中断使能寄存器 UCBxI2CIE ,如表 6-50 所示。 表 6-50 中断使能寄存器 UCBxl2CIE Bit7 Unused BitO UCALIE UCNACKIE: 未响应中断使能位。 UCNACKIE=O ,中断功能禁止。 UCNACKIE=l ,中断功能使能。 UCSTPIE: 停止条件中断使能位。 UCSTPIE=O ,中断功能禁止。 UCSTPIE斗,中断功能使能。 UCSTTIE: 开始条件中断使能位。 UCSTTIE=O ,中断功能禁止。 UCSTTIE=l ,中断功能使能。 第6意解剖 MSP430单片机 135 UCALIE: 仲裁失效中断使能位 。 UCALIE吨,中断功能禁止 。 UCALlE= l ,中断功能使能 。 9) 中断使能寄存器 IE2 ,如表 6-51 所示 。 表 6-51 中断便能寄存器 IE2 Bit7 Unused UCBOTXIE: USCI bO 发送中断使能位 。 UCBOTXIE吨 , 12C 发送中断禁止 。 UCBOTXIE= 1, 12C 发送中断使能 。 UCBORXIE: USCI_BO 接收中断使能位 。 UCBORXIE=O , 12C 接收中断禁止 。 UCBORXIE= 1, fc 接收中断便能 。 10 )中断标志寄存器 IFG2 ,如表 6- 52 所示 。 BitO Unused B-1-wB·U-m -nu s-o 表 6-52 中断标志寄存器 IFG2 Bit3 Bit2 UCBOTXIFG I UCBORXIFG BitO Unused UCBOTXIFG: USCI BO 发送中断标志位 。 UCBOTXIFG =0 ,未发生 12C 发送中断 。 UCAOTXIFG = 1 ,发生 I2C 发送中断 。 UCBORXIFG: US CI_BO 接收中断使能位 。 UCBORXIFG =0 ,未发生 I2C 接收中断 。 UCBORXIFG = 1,发生 12C 接收中断 。 6.8.3 1 2C 操作示例 下面两个例子分别介绍 fc 工作在主机模式 和从机模式下的操作,两个例 子配合使用, 可以实现两个 MSP430 通过 12C 通信 。 第一个例子如下代码所示,实现主机功能,读取从 机的数据,并与设置的比对值比较,如果比对不符,则 P l. O 输 出高电平, CPU 进入死循环 。 'include "msp430g2553 . h " unsigned char RXDatai unsigned char RXComparei void main(void) //关闭着门掬 WDTCTL = WDTPW + WDTHOLDi 136 第一部分预备篇 / /P1. 0 设置为输出管脚,输出寄存器消零 P10UT &2 - B1TO; P1D1R 1- BITO; / /P1. 6 、 P1. 7 设置为 1 2C 管脚, P1.6(SCL) , P1.7(SDA) P1SEL I~ BIT6 + B1T7; P1SEL21 z B1T6 + B1T7; /1 复位 USC1BO 状态机 UCBOCTL1 1= UCSWRST; //USC1BO 工作于工~C 主机模式 UCBOCTLO = UCMST + UCMODE 3 + UCSYNC; //选捺时钟源为 SMCLK UCBOCTL1 = UCSSEL 2 + UCSWRST; //设置 SCL 时钟分频系数,1. 2阳 z/12= - 100kHz UCBOBRO = 12; UCBOBRl = 0; //设置将要通信的从机地址为 Ox048 // fSCL = SMCLK/12 a - 100kHz UCB012CSA = Ox048; //消除复位状态 UCBOCTLl &= - UCSWRST; //使能 1 2C 接收 .þ 断 1E2 1= UCBORX1E; RXCompare = 0; whi1e (1) //如果已经发生过结束条件,则发送起始条件 while (UCBOCTL1 & UCTXSTP); UCBOCTL1 1= UCTXSTT; //发送接结束条件 while(UCBOCTL1 & UCTXSTT) UCBOCTL1 1= UCTXSTP; //进入低功耗模式 LPMO ,使能全局中断 __bis_SR_ register(CPUOFF + G1E); //比对接收到的数据,如果与比对值不同则 P1. 0 置高,并让 CPU 进入死循环 if (RXData !- RXCompare) PIOUT 1= B1TO; wh i1e (1); RXCompare++; / / 1句中断服务函数 Ipragma vector - USCIABOTX_VECTOR __interrupt void USC1ABOTX_1SR(void) 11 读取接收到的数锯 RXData - UCBORXBUF; //推出低功轮模式 LPMO -…bic_SR_register_on_exit(CPUOFF)i //退出 LPMO 第 61挺解!IJ MSP430单片机 137 第 二 个 例 子是 MSP430 工作 于从机模式下的代码,从机每次接收到 主 机发送的起始条 件则将数据增 1 , 并通过 ec 发送 中断至主机 。 finclude "msp430g2553.h" unsigned char TXData; void main(void) //关闭着门拘 WDTCTL - WDTPW + WDTHOLD; PIDIR 1- B1TO; I! P 1. 6 、 P 1. 7 设置为 r Zc 管脚, Pl .6(SCL) , P1.7(SDA) P1SEL 1- B1T6 + B1T7; P1SEL21- B1T6 + B1T7; 11 复位 USC1BO 状态机 UCBOCTLl I ~ UCSWRST; IIUSCIBO 工作子 1 2C )J...机模式 UCBCCTLOιUCMODE 3 + UCSYNC; 1/ 设置自蹄地址为 Ox48 υCBOI2COA ~ Ox48; UCBOCTLl &.. ~ UCSWRST; H 使能起始条件中断 。CBOI2CIE 1- UCSTT1E; 11 使健发送中断 1E2 1- UCBOTXIE; 11 发送数据,可更改 TXData - Oxff; 11 进入 f成功耗模式,使能全局中断 while (1) _bis_SR_ register(CPUOFF + G1E); 11I 2C 发送中断服务ilI数 'pragma vector - USC1ABOTX_VECTOR interrupt void USC1ABpTX_ISR{void) I! 发送 TXData UCBOTXBUF - TXData; 1/ 退出 LPMO 模式 _bic_SR_register_on_exit(CPUOFF); I! 退出 LPMO 1I1 2C 起始条件中断服务函数 'praqma vector ~ USC1ABORX_VECTOR __interrupt void USCIABORX_ISR(void) 11 清除中断标志位 UCBOSTAT &- ~UCSTT1FG; 11 发送徽据加 1 TXData+t; 138 第一部分预备篇 6.9 硬件乘法器 MPY 乘法运算是非常耗费 CPU 运行周期的 一 种运算类型,所以在一些专门用于大数据量处 理的处理器中,如 DSP (数字信号处理器)、 FPGA (可编程逻辑门整列)等都集成了硬件 乘法器。硬件乘法 器对乘法运算做了优化处理,以硬件电路处理乘法运算,可以在较短的 时间内获得运算结果。 MSP430 也在内部集成了硬件乘法器,这在 16 位的微控制器中并不 多见。 MSP430 内部集成的硬件乘法器有两种: 1 系列、 2 系列和 4 系列的部分器件型号集 成有 16 x 16 的硬件乘法器;在 4 系列的部分器件型号、 5 系列和 6 系列的全部型号集成有 32 x 32 的硬件乘法器,这里提到的 16 和 32 指的 是乘法器操作数的最大位宽。乘法器可以 完成有符号和无符号的乘法运算和乘加运算,下面以 16 x 16 的乘法器为例进行介绍 。 6.9.1 硬件乘法器介绍 MSP430 内部的乘法器模块属于片上外设,和 CPU 是相互独立,不会介入 CPU 的运 行,所以乘法器和 CPU 可以并行运行 。 1 6 x 16 硬件乘法器可以配置成四种运行模式,分别 是 16 x 16 模式 、 16 x 8 模式、 8 x 16 模式和 8x8 模式 。 硬件乘法器的结构框图如图 6-38 15 rw 。 MPYI30b MPYS 132b MACI34b MACSI36b OP1 号 15 rw 。 OP2 138b 万 16 川 6 Multipiler D 战?!le MPY=∞00 MACSMPYS 32-bit Multiplexer 丈夫 SUMEXTI3Eh 15 l 也| RESHl l3Cb 。 31 rw RESLO 13Ah rw 。 困 6-38 硬件乘法器的结构框图 第6章解剖 MSP430单片机 139 所示,乘法器可以执行的操作包括:无符号的乘法计算、有符号的乘法运算、无符号的乘 加运算和有符号乘加运算。操作的类型由第一个操作数 OP1 决定 如图 6-38 所示 OP1 有 4 个地址,分别是 Ox130 (MPY) 、 Ox132 (MPYS )、 Ox134 (MAC) 和 Ox136 (MACS)。向 这 4 个寄存器中写入数据,分别执行无符号的乘法计算、有符号的乘法运算、元符号的乘 加运算和有符号乘加运算。 OP2 的地址为 Ox138 ,向该寄存器写人数据则开始乘法计算。 计算结果需要 3 个 MCLK 周期, 32 位的计算结果被自动写入寄存器 RESLO 、 RESHI 和 SUMEXT 。 寄存器 RESLO 用于存储计算结果的低 16 位。对于 4 种操作类型,寄存器 RESHI 中 16 位数据代表的意义如表 6-53 所示。 SUMEXT 寄存器用于表示计算结果的状态,其代表的意 义如表 6-54 所示。 操作类型 无符号乘法 (MPY) 有符号乘法 (MPYS) 元符号乘加 (MAC) 有符号乘加 (MACS) 表 6-53 RESHI 寄存器的内容 RESHI 代表的意义 32 位乘法计算结果的高 16 位 最高有效位是 32 位乘法计算的符号位,低 15 位是 32 位乘法计算结果的高 15 位 32 位乘加计算结果的高 16 位 最高有效位是 32 位乘加计算的符号位,低 15 位是 32 位乘加计算结果的高 15 位 乘法器在进行有符号乘加运算的时候,可能发生溢出的情况。累加器可以计算的正 数范围是 o ~ Ox7FFFFFFF ,可以计算的负数范围是 OxFFFFFFFFh ~ Ox80000000 ,当两 个负数相加的时候产生的结果进入了正数的范围内,便发生了下溢出,这个时候寄存器 SUMEXT=OxOOOO; 当两个正数相加的时候产生的结果进入了负数的范围内,便发生了上溢 出,这个时候寄存器 SUMEXT=OxFFFF 。两个负数相加出现 SUMEXT=OxOOOO 的情况或者 两个正负数相加出现 SUMEXT=OxFFFF 的情况,可以作为判断溢出的标准。 操作类型 无符号乘法 (MPY) 有符号乘法 (MPYS) 无符号乘加 (MAC) 有符号乘加 (MACS) 表 6-54 SUMEXT 寄存器的内容 SUMEXT 代表的意义 SUMEXT 一直为 0 SUMEXT 代表运算结果符号标志位扩展: SUMEXT=OxOOOO ,计算结果是 0 或者正数; SUMEXT=OxFFFF ,计算结果是负数 SUMEXT 代表运算结果进位标志位: SUMEXT罕 OxOOOO ,计算结果没有进位; SUMEXT=OxOOO 1 ,计算结果发生进位 SUMEXT 代表运算结果符号标志位扩展: SUMEXT=OxOOOO ,计算结果是 0 或者正数; SUMEXT=OxFFFF ,计算结果是负数 乘法器在使用的过程中如果出现刚写入的操作数 OP1 ,但还未来得及写入 OP2 ,就被 中断打断,而且中断服务函数中也使用了乘法器,那么之前选择的操作类型就会丢失,而 1 40 第一部分预备篇 且原来的计算结果是不可预知的 。 为避免这种情况,建议在使用乘法器之前关闭中断,使 用完之后打开中断 。 可以按照下面的步骤操作: DINT(J;// 关闭会局中断使能 _nop() ; / /等待中断关闭 MPY = Ox12; //写入第 1 个操作数 OP2 z Ox56;// 写入第 2 个操作数 EINT (J ; / /打开会局中断使能 Xxxxxxx ; // 操作计算结果 6.9.2 硬件乘法器配置及使用 硬件乘法器的操作通过上面介绍的寄存器配置实现,寄存器分为操作数寄存器和结果 寄存器 。 操作数 OPl 针对 4 种运算,对应 4 个寄存器 MPY 、 MPY S , MAC 和 MACS; 操 作数 OP2 只对应 1 个寄存器 OP2; 计算结果对应 3 个寄存器 RESLO. RESHI 和 SUMEXT o 下面对这些寄存器做总结性的介绍 。 操作数 OPl 对应的 4 个寄存器如表 6- 55 、表 6-56 、表 6-57 和 表 6-58 所示 , 全部为 16 位字宽 ,不同的计算操作需要向对应的寄存器写人数据 。 表 6-55 操作数 OP1 无符号乘法寄存器 Bitl5 - BitO MPY 表 6-56 操作数 OP1 有符号乘法寄存器 B- -m~ 表 6-57 操作数 OP1 无符号乘加寄存器 Bit15 - BitO MAC 表 6-58 操作数 OP1 有符号乘加寄存器 Bitl 5 - BitO MACS 操作数 OP2 对应的 l 个寄存器如表 6-59 所示,该寄存器写人数据后,乘法器立即开始 计算操作 。 计算结果寄存器如表 6-60 、表 6-61 和表 6-62 所示,分别存储计算结果的低 16 位、高 16 位和符号扩展。 表 6-59 操你数 OP2 表 6-60 计算结果低 16 位寄存器 Bitl5 - BitO OP2 Bitl5 - BitO RESLO 表 6-61 !计算结果高 16 位寄存器 BitI 5 - BitO RESH1 表 6-62 计算结果符号扩展寄存器 Bitl5 - BitO SUMEXT 第6章解部IJMSP430单片机 141 6.9.3 硬件乘法器操作示例 下面这个例子用于介绍使用硬件乘法器计算有符号数的乘法,首先判断操作数是否需 要扩展符号位,然后分别向乘法器的两个操作数寄存器赋值 。 计算结果存储在 RESLO 和 RESHI 中, SUMEXT 记录符号扩展位 。 'include void main(void) //关闭着门狗 unsigned char valuel, value2; . / /关闭肴门狗 WDTCTL = WDTPW+WDTHOLD; //两个操作数 valuel ~ Ox04; value2 雪 OxS4; //有符号数扩展符号位 if (valuel >~OxSO) MPYS = OxFFOO I valuel; else MPYS - valuel; if (value2 >-OxSO) OP2 & OxFFOO I value2; else OP2 = value2; //无须 CPU 介入,进入低功貌模式 BIS SR(LPM4 bits); 下面的这个例子用于介绍 MPY 的有符号乘加运算,代码中首先进行了一次无符号乘法 运弈,从 RESLO 和 阳SHI 中得到计算值;然后 MACS 与 OP2 相乘后的结果再与 RESLO 和 RESHI 中的值相加 。 lincluòe void main(void) unsigned char valuel , value2; //关闭看门狗 WDTCTL = WDTPW+WDTHOLD; H 镜入第-个操作数 MPY = Ox1234; //键入第二个操作数 = 。P2 Ox567S; //有符号乘加运算的两个操作数 valuel - Ox12 ; value2 - Ox96; //判断符号扩展位 i f (valuel >幅Ox80) MACS = OxFFOO I valuel; 1 42 第一部分预备篇 else MACS ~ valuel; If (value2 >~OxBO) OP2 : OxFFOO I value2; else OP2 : value2; //OP2 载入操作数后, MACS 与 OP2 相乘后的结果再与之前阻SLO 和阻SHI 中的值相加 _BIS_SR(LPM4_bits); 6.10 直接内存存取 DMA DMA 用 于 CPU 不介入的情况下 ,不同 地址空间的数据的传输访问 。 DMA 的引人大大 减轻了 CPU 在数据搬运过程中的负载,并且加快了数据搬移的速度 。 MSP430 也集成了该 片上外设, 1 系列 、 2 系列和 4 系列的部分型 号具备 3 个独立通道的 DMA , 5 系列和 6 系列 的所有型号都具备 DMA 功能,其中还有部分型号 能够支持 6 个独 立通道的 DMA 。 6. 10.1 DMA 介绍 MSP430 内部集成的 DMA 外设能够支持多个独立 通道的多地址模式传输,下面以最常 见的能够支持 3 个独 立 通道的 DMA 为例进行介绍 。 MSP430 内部的 DMA 每次传输耗费两 个 MCLK 周期,能够有效提高传输效率 。 其主要特点如下: · 通道之间相互独立 。 · 通道优先级可配置 。 · 触发源和触发模式可选 。 · 支持字传输、字节传输以及字和字节混合传输 。 . 支持 4 种地址模式 。 · 支持单字或者单字节传输、块传输和突发块传输 3 种传输模式 。 DMA 的结构框图如图 6-39 所示,在结构上主要分为 3 个部分:触发谦、优先级仲裁和 通道控制器 。 从图中可以看到 3 个独立的通道具备独立的触发源选择器,每个触发源选择 器有 1 6 个触发源可选 。 当触发事件发生后,优先级仲裁电路给予最高优先级的通道 DMA 传输控制权 , 最终由对应的 DMA 通道完成传输任务 。 下面将从地址模式、传输模式、传输 优先级和 DMA 中断的角度对 DMA 基本工作原理进行介绍 。 1. 地扯模式 DMA 支持 4 种地址模式,分别是固定地址到固定地址 、 固定地址到块地址、块地址到 固定 地址 、块地址 到块地址 。 4 种地址模式的示意图如图 6-40 所示。 固定地址到固定地址的地址模式用于两个固定地址间的数据互传 。 可以用于将某一外 设的寄存器数据传输到一个固定地址的内存上,比如,将 USCI 模块的接收寄存器数据传输 到某 一 固定地址供 CPU 处理 。 -DMAOTSELx 4 DMAREQ TACCR2 CCIFG TBCCR2 CCIFG USCI AO data "白白.ve USCI AO data transmit DAC120IFG ADC12 IFGx TACCRO CCIFG TBCCRO CCIFG USCI A1 data Rx USCl A1 data Tx Multiplier ready USCIBOd皿ar田elve USCIBO 由国首田lsmit DMA2IFG DMAEO 第6章 解部IjMSP430单片机 143 ITAGActive NMlln阳πuptRequ回t ENNMI DMAREQ TACCR2 CCIFG TBCCR2 CCIFG USCIAOdata 自由l.ve USCIAOdata 位ansmit DAC120IFG ADC12 IFGx TACCRO CCIFG TBCCRO CCIFG USCI A I data Rx USCI A I data Tx Multiplier ready USCl BO data recei.ve USCIBOda跑回nsrmt DMAOIFG DMAEO DMAREQ TACCR2 CCIFG TBCCR2 CCIFG USCIAOda国rece!.ve USCI AO data transmit DAC1201FG ADC12 IFGx TACCRO CCIFG TBCCRO CCIFG USCIAl data Rx USCI A1 data Tx Multiplier ready USCI BO data receive USCIBOda跑回lSmit DMAIIFG DMAEO DMADSTINCRx DMADTx DMADSτllYTE DMA Channell 一 DMAlSA DMAIDA DMAlSZ DMASRSBYTE DMASRCINCRx DMAEN DMADSTINCRx DMADTx !p DMADSTBYTE 3 DMAChanne12 DMA2SA -DJv队2DA DMA2SZ Address Sp田e 图 6-39 DMA 原理结构框图 144 第一部分预备篇 Address Space 固定地址到固定地址 Address Space 同定地址到块地址 Address Space Address Space 块地址到同定地址 块地址到块地址 图 6-40 DMA 地址模式 固定地址到块地址模式,是将固定地址的数据按照一定的地址顺序,如递增、递减, 传输到另一个块地址上去。比如,按照固定帧格式的数据需要 USCI 多次接收,则 DMA 会 将依次接收到的数据传输到另一个地址块上重新拼接成完整的帧。 块地址到固定地址模式,可以用于将一个地址块上的数据按照地址递增或者递减的顺 传输到固定地址上去。比如,可以将 FLASH 一个地址块的数据依次传输到内存的固定地址 中,或者传输到 USCI 模块的发送寄存器。 块地址到块地址的地址模式可以用于两块大数据直接的搬移,比如,将 FLASH 地址块 的数据搬移到内存的地址块中,大数据量操作能够最大化地发挥 DMA 的能效。 地址模式的选择通过 DMA 通道控制寄存器 DMAxCTL 的 DMADSTINCRx 位和 DMASRCINCRx 控制。 DMADSTINCRx 位配置源地址的模式. DMASRCINCRx 位配置目 标地址的模式。 DMA 支持字节到字节、字节到字、字到字节和字到字的传输。字节到宇节的传输和宇 到字的传输,因为源数据的位宽和目标数据的位宽是相等的,不存在对齐的问题。字到字 节的传输,源数据位宽为 16 位,目标地址数据位宽仅为 8 位,在传输过程中,洒、数据的高 字节会被丢弃,只有字节会被传输到目标地址。字节到字的传输,源数据宽度为 8 位,目 标地址数据为 16 位,目标地址的低字节为源数据的内容,高字节会被清零,所以可以近似 认为这种情况下源数据在高位补。后传输。字节和字传输的模式由 DMA 通道控制寄存器 DMAxCTL 的 DMADSTBYTE 位和 DMASRCBYTE 位配置。 DMASRC 位配置源地址的字 或者宇节模式. DMADST 位配置目标地址的字或者字节模式。 2. 传输模式 DMA 可以支持 6 种 DMA 传输模式,分别是单次传输、块传输、突发块传输、重复单 第6章解 ifiJMSP430单片机 145 次传输、重复块传输、重复突发块传输。 6 种模式的主要区别在于触发和 DMAEN (通道控 制寄存器的 DMA 传输使能位)上,下面分别介绍这些传输模式的特点和区别。 ( 1 )单次传输 单次传输每次传输都需要一次触发,并且由 DMA 通道传输次数寄存器 DMAxSZ 确定 传输进行的次数。传输按照以下顺序: 1 )配置 DMADSTINCRx 位和 DMASRCINCRx 设置地址模式,配置 DMADSTBYTE 位和 DMASRCBYTE 位设置字节和字模式。设置 DMAxSA 的值确定传输次数,配置 DMAxSZ 和 DMAxDA 寄存器分别确定源地址和目标地址。 2 )使能 DMA 通道传输使能 DMAEN 位, DMAxSA 、 DMAxSZ 和 DMAxDA 的值会被 载入内部寄存器(不可见),进入空闲状态,接着等待触发的到来。 3 )触发到来, CPU 被暂停, DMA 发起传输,传输可以使一个字节或者一个字,都算 作一次传输。 4) 传输完成,传输次数寄存器 DMAxSZ 会被自动减 1 ,内部源地址和目标地址寄存器 (这两个寄存器不可见)根据配置做相应自动修改。 5) DMA 再次进入等待触发状态,并不断完成 DMA 传输 直到 DMAxSA 寄存器递减 为 0 ,这个时候 DMA 内部传输次数寄存器会将之前暂存的值载入 DMAxSA ,对应的 DMA 中断标志位 DMAIFG 置位,通道传输使能 DMAEN 位自动清零。 如果在重复单次传输中,在 DMAxSA 递减到 0 之后, DMAEN 不会自动清零,它将一 直置位,在新的触发到来后会发起一次新的传输。 ( 2 )块传输 块传输在触发到来后一次传输可以完成整块数据的传输,并在传输过程中忽略触发。 在块传输中, DMAxSA 寄存器被用来定制传输块的大小。在块传输过程中,随着每次传输 完成(传输一个字节或者宇), DMAxSA 会自动减 1 。当减至 0 的时钟,则认为传输完成, 内部传输次数寄存器会将之前暂存的值载入 DMAxSA , DMA 中断标志位 DMAIFG 置位 通道传输使能 DMAEN 位自动清零。传输过程与单次传输相似,但是整个过程中 CPU 会一 直处于暂停状态,暂停的时间为 2 倍的 DMAxSZ 个 MCLK 时钟周期。 在重复块传输的模式下,一次块传输完成后 DMAEN 会一直保持置位状态,新的触发 到来后又会发起一次新的块传输。 ( 3 )突发块传输 突发块传输在每完成 4 次传输( 8 个 MCLK) 之后,会释放 CPU 工作 2 个 MCLK 的时 间,在传输完成后会完全释放 CPU o 跟块传输相似,在触发到来后一次传输可以按照 DMA 工作 8 个 MCLK , CPU 工作 2 个 MCLK 的模式,完成整块数据的传输,并在传输过程中 忽略触发。在块传输中, DMAxSA 寄存器被用来定制传输块的大小。在块传输过程中,随 着每次传输完成(传输一个字节或者字), DMAxSA 会自动减 l 。当减至 0 的时钟,则认 146 第一部分 预 备 篇 为传输完成,内部传输次数寄存器会将之前暂存的值载人 DMAxSA , DMA 中断标志位 DMAIFG 置位,通道传输使能 DMAEN 位自动清零。 在重复突发块传输的模式下,一次传输完成后 DMAEN 会一直保持置位状态,并且会 立即开始第二次传输,不再需要触发。 以上介绍了 6 种传输模式,与传输模式直接相关的是 DMA 传输的触发和停止机制。 DMA 不同通道之间在地址模式、传输模式和触发机制上是完全独立的,每个通道的触发源 也可以独立配置。 DMA 不同通道的触发源由 DMACTLO 控制寄存器的 DMAxTSELx 位选 定。对 DMAxTSELx 的更改只能在 DMAEN 清零的情况下完成,即修改的时候 DMA 传输 不能被使能。 DMAxTSELx 位可为每个通道选择 16 种触发源中的一种。 触发源的触发方式可选择为上升沿触发或者高电平触发,由通道控制寄存 !till器 DMAxCTL 的 DMALEVEL 位选择。高电平触发只能使用在外部触发模式下 ( DMAxTSELx=1111 ),当外部为高电平, DMA 传输会被不断触发。在块传输模式和突发 块传输模式中,需要保持整个传输过程中触发电平一直为高,否则 DMA 会被暂停在当前状 态,直到外部电平重新变高或者使用软件的方式给出触发。 当触发源到来后视 DMAONFETCH 位的配置, DMA 对 CPU 执行两种暂停操作。若 DMAONFETCH 位置高,则 CPU 会执行完当前指令,然后暂停;如果 DMAONFETCH 清 零,则 DMA 会立即暂停 CPU 操作。 如果需要暂停 DMA 传输,可以采用非屏蔽中断 (NMI) 的方式暂停任何一种传输;突 发块传输还能够通过清零 DMAEN 位完成。 3. 传输优先级 DMA 传输通道优先级有两种模式,默认模式下优先级的顺序是 DMAO 、 DMAl 、 DMA2 。在这种优先级顺序下,当触发源同时达到,会优先完成 DMAO 通道传输,接着是 DMAl 通道,最后是 DMA2 通道。 如果将 DMA 控制寄存器 DMACTL1的 ROUNDROBIN 位置位,优先级顺序为刚刚完 成传输的通道优先级最低。如果是 DMAO 通道完成了传输,则当前通道优先级为 DMAl 、 DMA2 , DMAO; 如果是 DMAl 通道完成了传输,则当前通道优先级为 DMA2 , DMAO , DMA1; 如果是 DMA2 通道完成了传输,则当前通道优先级为 DMAO , DMAl 、 DMA2 。 一般来讲完成一次 DMA 传输首先需要耗费 1 ~ 2 个 MCLK 周期完成时钟同步,然后 2 个 MCLK 时钟周期的时间完成一次传输,传输完毕后会有 1 个 MCLK 周期的等待时间。 在不同的情况下, DMA 完成一次传输的最大时钟消耗如表 6-63 所示,表中附加的 6阳是 DCO 用来启动的时间。 表 6-63 CPU 工作模式 Active mode Active mode Low-power mode LPMO/l CPU 不同工作状态下单次 DMA 传输最大时间消耗 时钟源 MCLK=DCOCLK MCLK = LFXTl CLK MCLK = DCOCLK -c-c-C 4-M4--M-5E最-k-k-v l--M-」『J-cdc-cE』、-v二VLVd Ln-nw t"u-"Lp副『-s-s-s uIlw -·周一emlPm E 期一L·-PeLlV-e h 第6章解部UMSP430单片机 147 (续) CPU 工作模式 Low-power mode LPM3/4 Low-power mode LPMO/l Low-power mode LPM3 Low-power mode LPM4 时钟源 MCLK = DCOCLK MCLK = LFXTl CLK MCLK = LFXTl CLK MCLK = LFXTl CLK 最大时间周期 5 MCLK cycles + 6μs 5 MCLK cycles 5 MCLK cycles 5 MCLK cycles + 6μs 4.DMA 中断 DMA 每个通道都有独立的中断功能,当 DMAxSZ 寄存的值减到 0 时,对应通道的 DMAxCTL 寄存器的 DMAIFG 标志位就会置位。如果通道中断使能并且全局中断使能,则 会产生一次中断请求。 DMA 的不同通道的中断都指向同一个中断向量,所以需要通过软件的方式区分具体的 中断通道。一种办法是遍历不同通道的 DMAxCTL 寄存器的 DMAIFG 标志位,发现置位, 则完成该通道的中断服务, DMAIFG 标志位需要软件复位。 MSP430 还提供了一个更为有 效的方式,利用中断向量寄存器 DMAIV ,中断向量寄存器如表 6-64 所示。寄存器中的中 断标志位具备优先级, DMAOIFG 优先级最高, DMA2IFG 优先级最低。利用 DMAIV 可以 一次操作即明确中断通道。任何对 DMAIV 的访问操作都会让当前具备最高优先级的标准 位自动复位。 表 6-64 DMA 中断向量寄存器 Biti5 Bit8 0 。 Bit7 BitO 0 O 以上各部分介绍了 DMA 的工作机制,下面主要介绍 DMA 的配置及使用。 6.10.2 DMA 配置及使用 DMA 的配置寄存器主要包括两个部分,一部分是用于整个 DMA 功能配置的 DMA 控 制寄存器 DMACTLO 和 DMACTL1以及前面介绍过的 DMA 中断向量寄存器;另一部分 是每个通道独立拥有的通道配置寄存器,主要包括 DMAxCTL 、 DMAxSA 、 DMAxDA 和 DMAxSZ 。 DMA 控制器的 DMACTLO 用于 3 个通道的触发源选定, DMACTL1控制寄存器用于 DMA 运行机制的配置,两个寄存器分别如表 6-65 和表 6-66 所示。 表 6-65 DMA 控制寄存器 DMACTLO Biti5 Bit8 Bit7 BitO 148 第一部分预备篇 DMA2TSELx 、 DMA1TSELx 、 DMA1TSELx 分别是通道 2 、通道 1 和通道 0 的触发源 选择位。 DMAxTSELx=OOOO ,触发源为 DMAREQ 位,用于软件的方式触发 DMA 。 DMAxTSELx=OOOl ,触发源为定时器 Timer A 的捕获比较中断标志位 TACCR2 CCIFG 0 DMAxTSELx=OO 10 ,触发源为定时器 Timer B 的捕获比较中断标志位 TBCCR2 CCIFG 。 DMAxTSELx=OOll ,触发源为 USCI AO 的接收中断标志位 UCAORXIFG 位。 DMAxTSELx=O 100 ,触发源为 USCI AO 的发送中断标志位 UCAOTXIFG 位。 DMAxTSELx=0101 ,触发源为 DAC12 模块中断标志位 DAC12IFG 位。 DMAxTSELx=0110 ,触发源为 ADC12 模块中断标志位 ADC12IFGx 位。 DMAxTSELx=0111 ,触发源为定时器 Timer A 的捕获比较中断标志位 TACCRO CCIFG 。 DMAxTSELx= 1000 ,触发源为定时器 Timer B 的捕获比较中断标志位 TBCCRO CCIFG 。 DMAxTSELx=1001 ,触发源为 USCI A1 的接收中断标志位 UCA1RXIFG 。 DMAxTSELx= 10 10 ,触发源为 USCI A1 的发送中断标志位 UCA1TXIFG o DMAxTSELx=1011 ,触发源为乘法器就绪。 DMAxTSELx= 11 00 ,触发源为 USCI BO 的接收中断标志位 UCBORXIFG 。 DMAxTSELx=1101 ,触发源为 USCI BO 的发送中断标志位 UCBOTXIFG 。 DMAxTSELx= 111 0 ,该状态用于通道间的相互触发, DMAOIFG 置位会触发通道 1 , DMA lIFG 置位会触发通道 2 , DMA2IFG 置位会触发通道 0 。 DMAxTSELx=1111 ,触发源为来自外部管脚的电平触发信号 DMAEO 。 Bitl5 。 Bit7 。 Bitl4 。 Bit6 。 表 6-66 DMA 控制寄存器 DMACTL1 Bit13 。 Bit5 。 Bit12 。 Bit4 。 Bitll 。 Bit3 。 BitlO 。 Bit2 DMAON FETCH Bit9 。 Bitl ROUND ROBIN Bit8 。 BitO ENNMI DMAONFETCH :该位置位的情况下,触发发生后 DMA 不会立即终止 CPU 的运行。 CPU 会将当前指令运行完之后, DMA 才会暂定 CPU; 若该位清零,触发发生后 DMA 会立即暂 停 CPU 。 ROUNDROBIN: DMA 通道优先级循环位。若该位置位,执行完操作的 DMA 通道优先级 会降到最低;若该位清零,则 DMA 通道优先级从高到低一直保持为 DMA 0 、 DMA 1 、 DMA 2 。 ENNMI: 非屏蔽中断使能位。若该位置位,则非屏蔽中断发生,当前的 DMA 传输会 正常完成,但是之后的传输会暂停,并且 DMAABORT 位置位;若该位清零,则非屏蔽中 断不会打断 DMA 传输。 第6章解膏IjMSP430单片机 149 下面的寄存器是每个通道都具备的通道配置寄存器, DMAxCTL 寄存器完成对每个通 道的功能配置, DMAxSA 寄存器设置 DMA 传输源地址, DMAxDA 寄存器设置 DMA 传输 目标地址, DMAxSZ 寄存器设置 DMA 传输次数。具体代表的意思如表 6-67~ 表 6-70 所示。 Bit15 Reserved Bit7 DMADST BYTE Bitl4 Bit6 DMASRC BYTE 表 6-67 通道控制寄存器 DMAxCTL Bit13 DMADTx Bit5 DMA LEVEL Bitl2 Bit4 DMA EN Bitll BitlO DMADSTINCRx Bit3 Bit2 DMA DMA IFG IE Bit9 Bit8 DMASRCINCRx Bitl BitO DMA DMA ABORT REQ DMADTx: 传输模式选择位。 DMADTx=OOO: 单次传输模式。 DMADTx=OOl :块传输模式。 DMADTx=OlO , 011: 突发块传输模式。 DMADTx=100: 重复单次传输模式。 DMADTx=lOl :重复块传输模式。 DMADTx=l lO, 111: 重复突发块传输模式。 DMADSTINCRx :目标地址递增位。该位用于选择传输的目标地址的地址模式,目标地址 的递增和递减情况还与目标端字和字节选择相关,如果目标端选用字节模式,则目标地址 以 l 递增或者递减;如果目标端选用宇模式,则目标地址以 2 递增或者递减。 DMADSTINCRx=OO ,目标地址不变化。 DMADSTINCRx=Ol ,目标地址不变化。 DMADSTINCRx= 10 ,目标地址递减。 DMADSTINCRx=ll ,目标地址递增。 DMASRCINCRx: 源地址递增位。与 DMADSTINCRx 意义相似,用于源端地址模式设置。 DMASRCINCRx =00 ,源地址不变化。 DMASRCINCRx =01 ,源地址不变化。 DMASRCINCRx =10 ,源地址递减。 DMASRCINCRx =11 ,源地址递增。 DMADSTBYTE: 目标端字或者字节选择位。用于选择目标端以字节或者字的方式接收。 DMADSTBYTE=O ,宇模式。 DMADSTBYTE=l ,字节模式。 DMASRCBYTE: 源端字或者字节选择位。用于选择源端以字节或者字的方式发送。 DMASRCBYTE =0 ,字模式。 DMASRCBYTE =1 ,字节模式。 150 第一部分预备篇 DMALEVEL: 通道触发方式选择位,用于选择使用上升沿触发或者高电平触发。 DMALEVEL啡,上升沿触发。 DMALEVEL=l ,高电平触发。 DMAEN: 通道使能位。 DMAEN啡,通道禁用。 DMAEN=l ,通道使能。 DMAIFG: 通道中断标志位。如果该通道的 DMA 传输完毕,该位置位。 DMAIE: 通道中断使能位。该位置位,则对应 DMA 通道中断使能。 DMAABORT: DMA 传输中止标志位。 DMAABORT叶, DMA 传输没有被中止。 DMAABORT=O , DMA 传输被非屏蔽中断中止。 DMAREQ: DMA 传输请求位。该位用于用软件的方式触发 DMA 传输。 DMAREQ=O , DMA 不被发起。 DMAREQ=l , DMA 传输发起。 表 6-68 通道源地址寄存器 DMAxSA Bìt1 5 Bit8 Reserved Bit7 BitO Bit15 Bit8 DMAxSAx Bit7 Bit6 Bit5 Bìt4 Bit3 Bìt2 Bìt1 BitO DMAxSAx DMA 传输源地址寄存器,在单次传输中用于设置源数据的地址,在块传输或者突发块 传输中设置起始地址。 表 6-69 通道目标地址寄存器 DMAxDA Bitl5 Bit8 Reserved Bit7 BitO Bitl5 Bit8 DMAxDAx Bit7 Bit6 Bìt5 Bìt4 Bit3 Bit2 Bìtl BitO DMAxDAx 第6章解ftIJ MSP430单片机 151 DMA 传输目标地址寄存器,在单次传输中用于设置目标地址,在块传输或者突发块传 输中设置目标块起始地址 。 表 6-70 通道传输次数寄存器 DMAxSZ Bitl5 Bit8 DMAxSZx Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO DMAxSZx 通道传输次数寄存器 DMAxSZ 用于设置 DMA 传输的次数 。 DMAxSZ斗,则 DMA 传 输被禁用;如果 DMAxSZ=N ( Oa FirstADCVal + ADCDeltaOn) PIOUT 1= OxOl; else PIOUT &"" - OxOl; fpragma vectormTlMERO_AO_VECTOR __interrupt void taO_isr(void) { 1/ 停止定时暴 TACTL - 0; 1/ 退出 LPMO 模式 LPMO EXIT; 第 三个例子用于介绍 ADCIO 的 DTC 功能和多重采样工作模式 。 代码设置 ADCI0 工作 于多通道序列采样模式,每次转换完成之后立即进行下 一次 。 Al 和 AO 采样的 32 组数据自 动搬移到 Ox200 到 Ox240 的地址空间 。 'include "msp430g2553.h" void main(void) 11 关闭看门狗 WDTCTL = WDTPW +阳DTHOLD; /1 设置工作模式为序列通道多次采样,使用 Al_ AO 、 Al...... 的采样顺序 ADCIOCTLl = INCH 1 + CONSEQ 3; 11 工作于多重采样模式,采样保持时 I司为 8 个 ADCI0CLK , 开启 ADCIO 和中断使能 ADCIOCTLO m ADCIOSHT 2 + MSC + ADCIOON + ADCIOIE; 1/ 模拟通道输入使能 ADCIOAEO - Ox03; I/DTC 传输次数 ADCIODTC1 - Ox20; for (;;) //关闭转换俊tIt ADCIOCTLO 归 ~ENC; 1/ 等待 A民 10 内核就绪 while (ADCIOCTLl & BUSY); //设置数据传输起始地址 ADCIOSA s Ox200; //使能数据转换,启动采样 ADCIOCTLO 1= ENC + ADCIOSC; 1/ 进入低功耗模式 LPMO __bis_SR_register(CPUOFF + GIE); 11 调试及查看结果的空操作指令 NOP () ; NOP () ; 第6章解~J M SP430单片机 167 1/ ADCI0 中断服务函数 tpragma veetor- ADCI0_VECTOR __interrupt void ADCIO_ ISR (void) //退出 LPMO 模式 __bic_SR_register_on_exit(CPUOFF); 6.12 增强型比较器 Comparator_A+ 增强型比较器 Comparator_A+ 是 MSP430 提供的 一 个非常有特色的模拟电压比较器, 该模拟外设可以用于外部模拟信号的检测或者电源电压的监测 。 Comparator_A+配合内部 的定时器还可以方便地构建积分型模数转换器 。 总的来讲 Comparator_ A+具备 以下特点 : · 比较器的同向输入和反向输人都可通过多路选择器选择输入通道 。 · 比较器输出 具备可选的 RC 滤波器 。 · 比较器输出可以直接作为定时器 A 的捕获输入 。 · 比较器内部具备可选的基准电压 。 · 比较器具备中断功能。 下面详细介绍 Comparator_A+的结构和使用 。 6.12.1 Comparator_A+ 介绍 Comparator_A+的结构框图如图 6-45 所示,主要包括同向和反向输入端的输入多路选 择器部分、比较器部分 、 RC 滤波器部分和基准电压发生器部分 。 输人端的多路选择器可以选择比较器同相端和反相端的输入通道 。 对于同相端和反相 端输人信号可以来自外部通道,也可以是内部基准电压 。 同相端和反相端的输人通道通过 比较器控制寄存器 CACTLl 的 CAEX 位可置换同相端和反相端的输入通道,相应的输出会 反转 。 在 CAEX 清零的情况下,同相端输入通道由比较器控制寄存器 CACTL1的 P2CAO 和 P2CA4 位选择,从图 6-46 中可以看出同相端的输入通道可以是 CAO 、 CAl , CA2 和 内部基准电压;反相端的输入通道由 P2CA 1, P2CA2 和 P2CA3 三 位控制,输入通道为 168 第一部分预备篇 CAl 到 CA7 以及内部基准电压。输入的两个多路选择器之间还有一个短路功能,通过 CASHORT 位配置,该位主要用于构建一个简单的采样保持器,示意图如图 6-46 所示。 ----------------r----町--------------------啡'句---------------,--------饷---------------------- P2CA4 : P2CAO: 比较器 RC 滤波器 CAC V ACACACACACA A 句 , " 斗 3 A 吨 , 、 v l 基准电压发生器 r o 句 , , Tau-2.0ns 。v CCI1 B CAOUT Set CAIFG 多 路 选 择 器 L________________L____ …·协-…--------------- 图 6-45 Comparator_A+ 结构框图 采样的时间和采样电容 C s 的容值成比例,已和外部信号源的输出电阻 Rs 以及比较器的 内部短路电阻 Rj 构成了 RC 电路,充放放电时间常数为几=c. x (Rj+Rs )。其中 Rs 由外部 信号源决定,内部短路电阻的阻值和供电电压相关,对应关系如图 6-47 所示,变化范围为 2 ~ 10k f!。采样电容的值在使用时必须大于 100pF 。采样时间应在 3 ~ 10 倍的时间常数 凡的范围变化,采样时间为 3 凡,电容上的电压能够充电到达 95% 的输人信号电压;采样 时间为 5 凡,电容上的电压能够充电到达 99% 的输入信号电压;采样时间为 10 几,电容上 的电压能够充电到达 99.9% 的输入信号电压。 基准电压发生器可以产生 3 种基准电压,分别是 0.5Vcc 、 0.25Vcc 和图 6-45 中 MOS 管 第6章解~JMSP430单片机 169 的漏源间的管压降,约为 O.55V 。输出的基准电压由 CACTL1的 CAREFx 位选择输出的电 压范围,再由 CARSEL 位选择基准电压输出到同相端还是反相端。 100 nu ou句 , , " AUA A LU 斗 υ VV 阳 AU OAU 图 6-46 比较器 ComparatorA+构建的采样保持器 图 6-47 短路电阻与民的/VCC 的关系 比较器电路完成核心的比较功能,需要置位 CACTLl 的 CAON 位来开启 ComparatorA+ , 输出可以直接连到内部定时器 TimerA 的捕获模块,也能够通过查询 CACTL2 的 CAOUT 位获得比较结果。 比较器的输出可以选择通过一个低通的 RC 滤波器来降低干扰。当同相端的电压非常接 近时,可能因为电源电压的抖动、信号直接的串扰等原因导致比较器输出不稳定,如 图 6-48 所示,同相端和反相端电压接近的时候比较器输出出现了明显的抖动,通过 RC 滤 波器后降低了这种抖动的干扰。 RC 滤波器通过 CACTL1的 CAF 开启或者禁用。 二二二二二二二二 - Terminal 川 Cornparator Inputs Cornparator Output Un直Itered at CSOUT Cornparator Output Filtered at CAOUT 。 图 6-48 ComparatorA+ 模块输出端 RC 滤波器响应 170 第一部分预备篇 在比较器使用的过程中还有一点需要特别注意,比较器的外部输入通道和 1/0 口管脚是 复用的,在使用的过程中建议使用比较器的 1/0 口禁用寄存器 CAPD 关闭普通1/0 口功能。 比较器的中断标志位会在比较输出的上升沿或者下降沿置位,沿选择由 CACTL1的 CAIES 控制,如果同时使能全局中断使能 GIE 和比较器中断使能 CAIE 即可使能比较器中 断功能。 有了以上原理性的知识,下面介绍比较器的寄存器配置。 6.12.2 Comparator_A+ 配置及使用 比较器 Comparator_A+的配置比较简单,一共只有 3 个寄存器,分别是两个控制器寄 存器以及一个 1/0 端口禁用寄存器,下面分别介绍。 1. Comparator_A+ 控制寄存器 Comparator_A+控制寄存器用于完成 Comparator_A+的功能性配置。其配置分别如 表 6-82 和表 6-83 所示。 表 6-82 Comparator_A+ 控制寄存器 CACTL1 Bit7 CAEX BitO CAIFG CAEX: 比较器置换位。该位可以置换比较器的同相端和反相端,并反转比较器输出。 CARSEL: 比较器内部基准电压输出选择端,用于选择将基准电压输出到比较器的同相端或 者反相端。跟 CAEX 的配置有关: CAEX=0 , CARSEL=O ,基准电压连接至比较器同相端; CAEX=O , CARSEL=l ,基准 电压连接至比较器反相端。 CAEX=l , CARSEL吨,基准电压连接至比较器反相端; CAEX=l , CARSEL=l ,基准 电压连接至比较器同相端。 CAREFx: 基准电压选择位,用于选择基准电压的电压值。 CAREFx=OO ,基准电压关闭; CAREFx=O 1 ,基准电压为 O.25Vcc 。 CAREFx=10 ,基准电压为 O. 5Vcc ; CAREFx= l1 ,基准电压为 MOS 管的源漏管压降, 约为 O.55V 。 CAON: 比较器开启位,该位用于开启或者关闭比较器,比较器在关闭状态下不消耗电流。 比较器电路和参考源电路是相互独立的,可以分别开启。 CAON=O ,比较器关闭; CAON=l ,比较器开启。 CAIES: 比较器中断沿选择位,用于选择将中断标志位置位的中断沿。 CAIES=O ,上升沿置位; CAIES=l ,下降沿置位。 CAIE: 比较器中断使能位。 CAIE=O ,中断禁用; CAIE=l ,中断便能。 CAIFG: 比较器中断标志位。当比较器输出沿符合中断触发条件时,该位置位。 第6章解青IjMSP430单片机 171 Bit7 CASHORT 表 6-83 Comparator_A+ 控制寄存器 CACTL2 BitO CAOUT CASHORT: 输入短路位,该位用于短路两个多路选择器。 CASHORT斗,输入独立; CASHORT=1 ,输入短路。 P2CA4 P2CAO :多路选择器输入通道选择位,与 CAEX 状态相关。当 CAEX = 0 ,用于选 择同相端输入通道; CAEX = 1 ,用于选择反相端输入通道。 P2CA4 P2CAO=00 ,不连接外部通道。 P2CA4 P2CAO=01 ,选择外部通道 CAO 。 P2CA4 P2CAO=10 ,选择外部通道 CA1 0 P2CA4 P2CAO=11 ,选择外部通道 CA2 。 P2CA3 P2CA2 P2CA 1 :多路选择器输入通道选择位,与 CAEX 状态相关。当 CAEX = 0 , 用于选择反相端输入通道; CAEX= 1 ,用于选择同相端输人通道。 P2CA3 P2CA2 P2CA1=000 ,不连接外部通道。 P2CA3 P2CA2 P2CA 1=00 1 ~ 111 ,依次连接 CA1 ~ CA7 。 CAF: RC 滤波器使能位,该位用于选择比较器输出是否通过 RC 滤波器。 CAF=O ,比较器输出不通过 RC 滤波器; CAF=1 ,比较器输出通过 RC 滤波器。 CAOUT: 比较器输出状态查询位,用于查询当前比较器的输出状态。 2. Comparator_A+ 比较器1/0 端口禁用寄存器 该寄存器用于禁用和比较器输人通道复用的1/0 端口功能,避免1/0 端口功能对比较器 输入产生影响。 CAPDO ~ CAPD7 分别对应比较器输入通道 CAO ~ CA7 的 1/0 端口管脚, 如表 6-84 所示。 Bit7 CAPD7 表 6-84 Comparator_A+ 比较器 110 端口禁用寄存器 CAPD BitO CAPDO CAPDx: 比较器端口禁用位。该寄存器的每一位都对应于比较器的输人缓冲。 CAPDO 可禁用 CAO , CAPD1可禁用 CA1 ,以此类推。 CAPDx 对应位为 0 ,则对应管脚的比较器 输人缓冲使能。 CAPDx 对应位为 1 ,则对应管脚的比较器输入缓冲禁用。 6.12.3 Comparator_A+ 操作示例 下面介绍的例子启用 MSP430 内部的比较器,比较器的同相端连接至外部的 CA1 ( P 1.l管脚),反相端连接到内部的参考电压,电压值为 0.25Vcc 。如果 CA1 输人电压高于 0.25Vcc , 则比较器输出为 1 , P 1. 0 管脚输出高电平;如果 CA1 输入电压低于 0.25Vcc , 则 172 第一部分预备篇 比较器输出为 0 , P 1.0 管脚输出低电平 。 'include void main (void) //关阅彷门绚 WDTCTL -刷DTPW + WDTHOLD ; 1/ 设置 P1. 0 为输出 PIDIR 1- OxOl; //参考电压连接到比较嚣的反相蝙,大小为 O.25 V,时,并开启比较器 CACTLl - CARSEL + CAREFO + CAON; //CAl(Pl . 1) 连接到比较霉的问相端 CACTL2 - P2CA4; while (1) //检测比较嚣的输出 i t ((CAOOT & CACTL2)) //如果比较..输出为高,则 Pl. 0 ~由出高电平 PIOUT 1= OxOl; else //如果比~.a编出为低,则 P1. 0 输出低咆平 PI0UT &= - OxOl; 6 .13 运算放大器 MSP43 0 内部集成了单电源轨到轨运放,该运放可编程配置反馈电阻网络,作为可编程 纳益运算放大器 ( PGA ) 使用;可针对模拟信号的特性选定合适的稳定时间,以降低运放 功耗 ; 可将输出口编程配置作为片上 A DC 输入 。 所以运算放大器外设的引人 ,极大地增强 了 MSP43 。这款混合信号微控制器作为模拟前端的能力 。 下面对运算放大器 ( OA ) 模块进 行详细介绍 。 6 .13.1 运算放大器介绍 运算放大器棋块主要由同相踹输人选择电路 、反相端输入选择电路、电阻反馈网络和 输出选择电路构成 。 运算放大器外设的原理框图如图 6-49 所示 。 同相端和反相端的输入选 择电路可选择运放输入端信号来向外部管脚或者是片内外设 。 电阻反馈网络能够配置运放 的闭环增益, 实现可编程增益功能。输 出端选择电路用于将运放输出信号输出到 ADC 的输 入端或者外部管脚 。 片上运放 有 8 种工作模式可选,分别是通用运放模式、三运放差分放大 器的单位增益 缓冲器模式、单位增益缓冲器棋式、比较器模式 、 同相可编程增益( PGA) 放大器模 式、 级联同相可编程增益放大器模式 、反 向可编程增益放大器模式和差分放大器模式 。 模式的 第6章解剖 MSP430单片机 173 选择由 OA 控制寄存器 OAxCTL1的功能选择位 OAFCx 选择。 在通用运放模式下,运算放大器和电阻反馈网络是相互独立的,从图 6-49 也可以看到 通用运放模式下 (OAFCx=OOO ),电阻网络的输入端和运放的输入、输出信号没有电气连 接。通用运放模式下,同相端和反相端的输入信号选择分别由 OA 控制寄存器 OAxCTLO 的 同相端选择位 OAPx 和反相端选择位 OANx 控制,输入信号可以是外部信号也可以是内部 信号。输出由 OAxCTLO 的输出控制位 OAADCx 位选择连接到外部管脚或者是内部 ADC 输入。 兰运放差分放大器的单位增益缓冲器模式下,从图 6-49 可以看到运放的输出信号直接 连接到了运放的反相输入端,运放构成了一个跟随器。这个时候同相输入端的输入信号由 OAPx 位选定,反相端输入信号的外部输入功能被禁用,同相端输入选择位 OANx 的配置 会被忽略。运放的输出连接到电阻网络,作为兰运放差分放大器的一部分。 单位增益缓冲器模式下,运放的输出直接被连接到运放的反相输入端,组成了一个跟 随器。同相端输入信号由 OAPx 位选定;反相端输入信号的外部输入功能被禁用,反相端 输入选择位 OANx 的配置会被忽略。运放输出可由 OAxCTLO 的输出控制位 OAADCx 位选 择连接到内部 ADC 输入。 比较器模式下,电阻网络和运放也是相互独立的,电阻网络可以用来分压获得比较器 门限电压。电阻网络实际是一个梯形网络,从图 6-49 中可以看到靠近电阻网络 RTop 的电阻 阻值较大,而靠近电阻网络 RBottom 的电阻阻值较小。 RTOp 和 RBo忱。m 可选择分别连接到 A f!毛c 和 A 几s ,由 OAxCTL1的输出控制位 OARRIP 位确定。当 OARRIP = 0 时 , RTop 连接到 AVss , RBottom 连接到 AVcc 。当 OARRIP = 1 时,梯形电阻网络的连接反相 , RTop 连接到 AVcc , RBottom 连接到 A 几s 。电阻网络分压值输出到 OAxTAP , OAxTAP 的输出值由 OAxCTL1的 OAFBRx 位选择输入分压值。 OAxTAP 会直接连接到运放的反相输入端,反相端输入信号 的外部输入功能被禁用,反相端输入选择位 OANx 的配置会被忽略。同相端输入信号由 OAPx 位选定。运放输出可由 OAxCTLO 的输出控制位 OAADCx 位选择连接到内部 ADC 输入。 同相可编程增益 (PGA) 放大器模式下,运放的输出连接到电阻反馈网络的 RTOpo 电 阻分压网络的 RBottom 端直接连接到 A 几s 。分压网络的输出 OAxTAP 连接到运放的反相输入 端。这种连接模式就组成了一个同相放大器,增益为( 1+0AxTAP 比例), OAxTAP 比例 由 OAFBRx 位确定。反相端输入信号的外部输入功能被禁用,反相端输入选择位 OANx 的 配置会被忽略;同相端输入信号由 OAPx 位选定。运放输出可由 OAxCTLO 的输出控制位 OAADCx 位选择连接到内部 ADC 输入。 级联同相可编程增益放大器模式允许以同相放大方式级联 2~3 个运放,基本的规则 是将前一级运放的输出连接到后一级运放的同相输人端。通过配置每个运放的同相端输 入选择位 OAPx=11 ,可配置 OA2 的输出 OA20UT 连接到 OAO 的同相端, OAO 的输出 OAOOUT 连接到 OAl 的同相端, OAl 的输出 OAI0UT 连接到 OA2 的同相端。运放输出 174 第一部分预备篇 可由 OAxCTLO 的输出控制位 OAADCx 位选择连接到内部 ADC 输入。 反相可编程增益放大器模式下,运放的输出直接连接到图 6-49 的电阻网络的 RTop 端, OAxlO OAPx OAPx=3 OAFCx=6 OANx=3 OAx lB OA20UT(OAO) OAOOUT(OAl) OAIOUT(OA2) OAx lO OAx ll OAx lA OAxlB 。 。 。 M川 剧 川 ooo ππ RRRUORRUORUOOMOrt、,, MOMAAV'1 AA . 、 , π, 句 , 飞 、 " 剧 OAxTAP Al(OAO) A3(OAl) A5(0A2) A l /OAOO A3/0AlO A5/0A20 A12(OAO) A13(OAl) A14(0A2) A12/0AOO A13/0AIO A14/0A20 OAxOUT ?~ OAxR BOTTOM OAxFB 图 6-49 运算放大器原理框图 第6章解ífIJMSP430单片机 175 电阻网络的 RBottom 端可以通过反相端输入选择位 OANx 连接到反相端外部输入管脚 OAxIO 、 OAxI ,内部信号 OAxIA (该信号跟器件的具体型号相关),或者其他运放的输出。如果本 运放是 OAO ,则可连接到 OA2 的输出 OA20UT; 如果本运放是 OAl ,则可连接到 OAO 的 输出 OAOOUT; 如果本运放是 OA2 ,则可连接到 OAl 的输出 OAI0UTo因而,提供了一 个负的 OAxTAP 比例系数的反相放大器。同相端输入信号由 OAPx 位选定。运放输出可由 OAxCTLO 的输出控制位 OAADCx 位选择连接到内部 ADC 输入。 差分放大器模式下, MSP430 允许使用 2 个或者 3 个运放构成差分运放。 由两个运放构成的差分运放示意图如图 6-50 所示。 V, V, 盯 ru diff 一 (V2-V,) X R, R, 图 6-50 两个运放构成的差分运放示意图 图 6-50 为 OAO 和 OAl 构成的两运放组成的差分示意图。其中, OAO 被配置为差分放 大器模式, OAl 配置为反相可编程增益放 表 6-85 OAO 和 OA1 构成差分放大器的寄存器配置 大器模式。 OAl 的输出连接到了 OAl 电 阻网络的 RTop , OAO 输出连接到了 OAl 电阻网络的 RBottom 。具体的配置如表 6-85 所示。 差分增益由运放 OAl 模块的电阻反 寄存器 二进制配置 OAOCTLO xx xx xx 00 OAOCTL1 000 111 Ox oA1CTLO I 11 xx xx xx OA1CTL1 I xxx 1100 x 馈网络决定,电阻网络输出的分压点到 RBO屹立om 间的阻值为图 6-50 中的 R J , 电阻网络输出的 分压点到 RT'叩间的阻值为图 6-50 中的 Rzo OAFBRx 的值确定了分压点到 RBottom 之间电阻和 整个电阻网络的比值,即 Rd (RJ+Rz )。据此可以汁算不同的 OAFBRx 对应的差分放大器的 增益,对应的表格如表 6-86 所示。 表 6-86 OAFB Rx对应的两运放差分放大器增益 OA1 的 OAFB Rx配置 R1 R2 000 16 。 001 12 4 010 8 8 011 6 10 100 4 12 101 3 13 110 2 14 111 15 增益 (R21R 1 ) o ) (输出为 V,-V, 1/3 5/3 3 13/3 7 15 176 第一部分预备篇 3 个运放组成的差分放大器必须在具备 3 个运放的器件中才能实现,三运放构成的差分 放大器原理框图如图 6-51 所示。 OAO 配置兰运放差分放大器的单位增益缓冲器模式, OAl 配置为差分运放模式, OA2 配置为反相可编程放大器模式。 v, H (几 V, )xR, v, 刊,何一一丁「一 图 6-51 3 个运放构成的差分运放示意图 3 个 OA 外设的具体配置连接框图如图 6-52 所示,增益由 OAO , OA2 的 OAFBRx 位确 定。 OAO , OA2 的 OAFBRx 位的设定必须相同。 OAFBRx 的值对应的增益与表 6-86 相同。 介绍完 OA 外设的多种工作模式,下面通过 OA 外设寄存器介绍 OA 的具体使用。 6.13.2 OA 配置及使用 OA 外设每个外设都具备两个控制寄存器, OAxCTLO 和 OAxCTLl,其中 x 用于区别 片上多个 OA 外设。两个控制寄存器如表 6-87 和表 6-88 所示。 表 6-87 OA 控制寄存器 OAxCTLO Bit7 BitO OANx: 反相输入端选择位,用于选择 OA 反相输入端的输入信号。 OANx=OO ,输人信号为来自外部管脚的 OAxIO 。 OANx=OI ,输入信号为来自外部管脚的 OAxIl 。 OANx=10 ,输入信号为片内信号 OAxIA , OAxIA 的信号视具体器件型号而定。 OANx=ll ,输入信号为片内信号 OAxIB , OAxIB 的信号视具体器件型号而定。 OAPx: 同相输入端选择位,用于选择 OA 同相输入端的输人信号。 OAPx=OO ,输入信号为来自外部管脚的 OAxIO OAPx=OI ,输入信号为来自外部管脚的 OAxIl 。 OAPx=10 ,输入信号为片内信号 OAxIA , OAxIA 的信号视具体器件型号而定。 OAPx=ll ,输入信号为片内信号 OAxIB , OAxIA 的信号视具体器件型号而定 c OAPMx: 摆率选择位。在满足信号调理要求的情况下,选择较低的摆率可以降低 OA 模块 的功耗。 OAPx 第6章解剖 MSP430单片机 177 OAPMx OAPMx 100 101 110 111 OAPx 100 101 110 111 图 6-52 三运放构成差分放大器连接框图 178 第一部分预备篇 OAPMx=OO ,运放关闭,输出高阻态。 OAPMx=O l,运放工作在低速状态(摆率 0.3V/μs)。 OAPMx=10 ,运放工作在中速状态(摆率 0.8V/μs)。 OAPMx=ll ,运放工作在高速状态(摆率 1.2V/μs)。 OAADCx: 输出选择位,该位和工作模式选择位 OAFCx 相关,用于选择输出路径。 在 OAFCx=O 的情况下, OAADCx=OO , OAxOUT 连接到外部引脚和 ADC 输入通道的 Al 、 A3 或 A5 。 OAADCx=O 1, OAxOUT 连接到外部引脚和 ADC 输入通道的 A12 、 A13 或 A14 。 OAADCx=10 , OAxOUT 连接到外部引脚和 ADC 输入通道的 Al 、 A3 或 A5 0 OAADCx=ll , OAxOUT 连接到外部引脚和 ADC 输入通道的 A12 、 A13 或 A14 。 在 OAFCx>O 的情况下, OAADCx=OO , OAxOUT 只用在内部连接。 OAADCx=Ol , OAxOUT 连接到外部引脚和 ADC 输入通道的 A12 、 A13 或 A14 。 OAADCx=10 , OAxOUT 连接到外部引脚和 ADC 输入通道的 Al 、 A3 或 A5 0 OAADCx=ll , OAxOUT 内部连接到 ADC 输人通道的 A12 、 A13 或 A140 A12 、 A13 或 A14 通道的外部连接断开连。 表 6-88 OA 控制寄存器 OAxCTL1 Bit7 BitO OARRIP OAFBRx: 电阻反馈网络选择位,用于选择抽头位置到 RBottom 之间的电阻与电阻网络总电阻 的比例。 OAFBRx=OOO ,抽头比例为 OR/16R 。 OAFBRx=OOl ,抽头比例为 4R/12R 。 OAFBRx=010 ,抽头比例为 8R/8R 。 OAFBRx=Oll ,抽头比例为 10R/侃。 OAFBRx=100 ,抽头比例为 12R/4R 。 OAFBRx=101 ,抽头比例为 13R/3R 。 OAFBRx=1l 0 ,抽头比例为 14R/2R 。 OAFBRx=l11 ,抽头比例为 15R/1R 。 OAFCx: 运放工作模式选择位。 OAFCx=OOO ,通用运放模式。 OAFCx =001 ,三运放差分放大器的单位增益缓冲器模式。 OAFCx =010 ,单位增益缓冲器模式。 OAFCx =011 ,比较器模式。 第6章解~JMSP430单片机 179 OAFCx = 100 ,伺相可编程增益 ( PGA) 放大器模式 。 OAFCx = 101 ,级联同相可编程增益放大器模式 。 OAFCx = 110 , 反相可编程增益放大器模式 。 OAFCx = 111 ,差分放大器模式模式 。 OANEXT: 反相端外部输入使能位 。 在使用电阻网络时,该位用 于选择是否将运放的反向 输人端接到外部管脚 。 OANEXT =O ,反相输入端不能从外部输入 。 OANEXT = I ,反相输人端可以从外部输入 。 OARRIP: 比较器模式下,电阻 网络电 压连接反相位。 OARRIP吨, 当 OAFCx = 3 , RTop 连接到 AVss , RBottom 连接 AVcc。 OARRIP= I ,当 OAFCx = 3 , RTop 连接到 A Vcc , RBotlom 连接 AVss 。 6.13.3 OA 操何示例 在这个例子中将使用 MSP430FG461x 实现一个差分放大器,差分信号分别从 OA2 运放 的 OA2IO 和 OAO 运放的 OAOIO 输入,从 OAl 的输出管脚 OAIO 输出,增益为 R2/R1 。 实 , 现的电路示意图如图 6-53 所示 。 VOUT/OAIO 图 6-53 差分运放电 路示意图 实现代码如下: linclude void l114in(void) 1/ 关闭 .n. IID'l'CTL - 1ID'1'PW+胃D'l'HOLD; II000 工作在低..模式 OAOCTLO '" OAPM 1; 1/ 差分放大模式 OAOCTLl = OAFC 7+0ARRIP; 180 第一部分预备篇 //OAl 工作在低摆率模式,同相端和反相精信号都来自内部 , 放大器输出至外部管脚 OAICTLO = OAN 3+0AP 3+0APM l+OAADCl; //反向可编程增益放大. .模式 , 电阻反馈网络抽头比例为 12R/4R OA1CTLl = OAFC 6+0AFBR 4+0ARRIP; //OA2 工作在低摆事模式 OA2CTLO = OAPM 1 ; //OA2 工作在三运放差分放大器的单位增益缓冲 . .模式 //电阻反馈网络抽头比例为 12R/4R OA2CTLl = OAFC 1+0AFBR 4+0ARRIP; //进入低功耗模式 LPM3 __bis_ SR_ regis t er(LPM3_bits + GIE); 6.14 电源电压监控svs 为保证微控制器工作的稳定性,在应用中会监测微控制器的供电电压 ,若发现电压不足 将 复位保护,避免供电不足造成错误动作 。 MS P43 0 内置了电源电压监控模块 SVS 来 完 成 这个工 作 。 svs 可 以用来监测 MSP43 0 的模拟电源电 压 或者外部电 压 , 当 发现电压低于设 置 的阔 值 时, 可 以通过设置标志位以供 CPU 查询或者直接触发 P OR o SVS 模块的 主要特 点为 · 直接监测模拟供电电压 AVcc 或者通过外部通道监测外部电压。 · 可选择产生 PORo · 低电压状态锁存并可通过软件访问 。 • 14 级阔值电压可选 。 下 面详细介绍 SVS 模块的基本结构和原理 。 6.14.1 SVS 基本结构及原理 SVS 基本的 工作原理是将模拟供电电源分压后的电压或者外部通道输入的电压与内部 的1. 25V 基准电压通过迟滞比较器做比较,根据比较结果判定监测电 压状态,其基本结构 如图 6-54 所示 。 监测的电压通过一个多路选择器输入到迟滞比较器的反相端,输入的电压 可以是模拟供电电源的电压或者是外部通道 SVSIN。 从图 6 -54 中可以明显地看到模拟电源 AVcc 通过了电阻分压网络将分压后的电压作为迟滞比较器的反相端输入 , 根据分压比例的 不同实现不同阑值的电压监测 。 而外部通道输入的电压则直接输入到迟滞比较器的反相端 和 1. 25V 的基准电压做比较,所以想监测不同阑值的外部电压可以在 M SP43 0 外部使用电 阻分压的形式来完成 。 选择外部通道作为监测目标或者设置不同的模拟电源监测阔值通过 设置 SVS 控制寄存器 SVSTCL 的 VLDx 位来完成 。 如 果模 拟 电摞 电压低 于 阔值或者外部通 道 电 压小 于 1. 25V , SVS 比较器输出为 高 ,判断 第6章解~JMSP430单片机 181 出现低电压状态。 SVSFG 位会置位,只要出现低电压状态 SVSFG 位一定会置位,并且会 锁存该结果,并需要使用软件清零。在使用的过程中可以根据 SVSFG 位的状态判断是否在 之前运行的过程中出现过低电压状态。 SVSFG 置位后,如果 PORON 是置位状态,会触发 形成一次 POR; 如果 PORON 为 0 ,则不会有其他动作。 Vcc AVcc VLD 图 6-54 SVS 模块框图 在使用中有一点需要特别注意,当设置 VLDx 的值从 0 到其他任何值的过程中, SVS 电路大约需要 50阳的时间稳定,在此时间段中 SVS 不会对任何低电压状态响应,既不会 记录低电压状态,也不会触发 POR。在此期间, SVS 模块是否稳定可以通过 SVSON 位查 询( SVSON 位不是用来开启 SVS 模块)。 在 SVSON 为 0 的状态下, SVS 电路还没有稳定,不能够向 VLDx 写人数据。 VLDx 的 值在非零值之际改变的时候,比如改变监测的阔值电压,大约需要 12 阳的时间稳定。在此 期间, SVS 的标志位和 POR 功能(如果开启)依然工作,可能产生误复位,所以建议在此 期间关闭 SVS 功能。可以按照以下的顺序操作: 1 82 第一部分预备篇 SVSCTL = Ox60;// 设置监测闽值为 2.5V( 阀值电压参考后面的寄存器配置} SVSCTL = OxOO;// 暂时关闭 SVS SVSCTL = Ox80;// 设置监测闽值为 2.8V( 闽值电压参考后面的寄存器配置} SVS 的电压比较都是迟滞比较,下面用图 6-55 进行说明 。 电压从 0 开始上升,当上 升到 Vcc ($t3川的时候,开始进入掉电复位状态 。 电压上升到 V ( 止lT-) (掉电复位下限阔值电 压)时,因为是迟滞比 较,依然无法脱离掉电复位状态 。当电压大于 V ( 8_IT- ) + Vhys(B_IT-) ( Brownout 回 差电压) ,越过了迟滞比较的上限阔值电压, 再经过 Brownout 功能的延迟时 间 td ( BO肘, MSP430 脱离掉电复位状态 。 SVS 功能在软件设置 VLDx 大于 0 之后启动,正式工作还需 要开启稳定时间 td (SVSON )o SVS 功能开启 后 ,如果电压下降至 SVS 迟滞比较下限电 压 V void main(voidl 11 黛周看门狗 184 第一部分预备篇 WDTCTL ~ WDTPW + WDTHOLD; //设置 P 1. 0 为输出 PIDIR 1- OxOl; //使能 SVS 功能,并设置监测闽值为 2.5V SVSCTL = Ox60 + PORON; for (;;) volatile unsigned int i; //延时 i .. 50000; do (i--);while (i != 0); //翻转 P 1. 0 输出电平 PIOUT ^æ OxOl; 篇 第 7 幸技术进阶之一:熟练掌握 MSP430 单片机 第 8 章技术进阶之二:电子设计大赛 第 9 幸技术进阶之三:从零开始做心电图仪 熟练掌握 MSP430 单片机 7.1 触摸按键实 验 7.1.1 预备知识 触摸按键是基于板级设计上构成的 RC 振荡电路的振韵'情况变化来实现的 。 罔 7-1 是在 PCB 上实现的触摸按键示意图,触摸按键为图中所示的回l 形覆铜 。 该覆铜会与周围的接地 区域以及 PCB 下方层的地平面形成电容器 。 在没有外界干扰的情况下,如没有导体进入该 开放电容器的范围,此时的电容器被称为基准电容 。 触摸按键 GND 图 7-1 PCB 触摸按键示意罔 级饭多 当导体(比如手指)部近电容器的时候, 电场就会受到干扰,进而导致电容器的容值 发生变化。如图 7-2 所示,手指的靠近对基 准电容器产生影响,导致电容器的容值在基 准电容的基础上增大 。 正因为容值的变化, 该电容器与板上的其他电路组成的 RC 振荡 器的振荡频率发生变化,最终就是通过测量 振荡频率的变化判断按键动作;或者检测电 容辑的充电时间常数,根据时间常数的变化 判断按键动作 。 圈 7-2 手指指近触摸按键时对容值产生的影响 第7l言技术进阶之一 : 熟练掌握MS P430单片机 187 MSP430 的部分 G2 系列器件针对触摸按键的应用做出了优化设计,对于管脚增加了管 脚振商功能 ( PinOsc)。 利用管脚振荡功 能. MSP430 可以不使用任何外围辅助器 件的情况下快速构建触摸按键应用 。 具备 管脚振荡功能的管脚在没有外部电容负载 的情况下可以振荡在 1 --- 3MHz 的频率范 围,随着外部电容负载的引人会降低管脚 的振荡频率,其影响如阁 7-3 所示 。 振荡频率的变化可以通过 MSP430 片 上定时器完成,振荡信号作为定时器的输 入时钟直接送入定时器计数。 设置一 定的 1.50 1.35 1.20 g105 0.90 墨 0.75 露。 ω 罢 0.45 0.30 Vcx; =3.0V k \ \ r......性、 卜、民『 时间门限,捕获每个时间门限中的计数值, 。 .15 即可监测电容变化。 监测振荡频率的电路 框图如图 7-4 所示,管脚振荡通过 INCLK 通道( TASSELx=3 )作为定时器的时钟源 。 触摸按键实验将使用 LaunchPad 和 0.00 50 100 外部电容负载 IpF 图 7-3 PinOsc 管脚振荡频率和负载电容的关系 LaunchPad 的电容感应扩展板完成 。 电容感应触摸板由 6 个触摸感应区域和 9 个用于显示的 LED 组成 。实 物如图 7-5 所示, 最中间的圆形区域设置有 l 个触摸板,周围螺旋状环绕着 4 个触摸板,极上剩余部分为 i 个整体的感应区域 。 在最中间的触摸板 ( PAD5 )下方设置有 l 个 LED. 螺旋触摸板的四周则均匀分布着剩余的 8 个 LED 。 : L叶--r&L:毛妇, 抖气.:ft 半 图 7-4 触摸按键应用电路框图 188 第二部分修炼篇 图 7-5 电容感应扩展板 LaunchPad 与触摸感应区域对应 关系如表 7-1 所示,所有的触摸感 应区域都与 P2 端口相连 。 这主要是 因为 P2 端口没 有和模拟外设复用管 脚,因此内部电容 更小,与端口 Pl 相比, P2 端 口实现的触摸按键具有 更高的灵敏度 。 表 7-1 触摸饭感应区域与 LaunchPad 管剧对应关系 触摸饭感应区域 I MSP430 对应管脚 PADO P2.0 PADI P2.1 PAD2 PAD3 PAD4 P2.4 LaunchPad 驱动 LED 并没有采用每个 LED 独立驱动的方式,只有 DO 由管脚 P l. O 独立 驱动,其他 8 个 LED 则采取了扫描的方式, 连接电路如图 7-6 所示 。 当需要点亮 Dl ~ D4 中的 任何 。 一 个. LED 时 ,要将 P 1.3 管脚置低,同时置高要点亮的 LED 对应的管脚,此时 D5 ......... ‘ D 8 处于反偏状态不 会被点亮; §丰乡 5丰乡§丰乡 5太多 当需要点亮 D5 ......... D8 中 的任意 E 一 个 LED 时,需 要将 P 1.3 管 脚置高,同时置低要点 亮 LED 对应的管脚, Dl ..... D4 处于反 ß n~ 阳3 ~ r干1 ~ 。。 " 偏状态所以不会点 亮 。 本实验将通过 TI 提供的电 P13 容式触摸感应库完成 。 电容式 因 7-6 LED 电路 第7意技术进阶之一:熟练掌握 MSP430单片机 189 触摸感应库提供了 一 系列封装好的结构体以及函数,利用库可以快速地完成电容触摸按键 的实现 。 下面主要介绍本实验中使用的 RO ( 张弛振荡器)方法, RO 方法的核心原理是手 触碰电容按键的时候,由于电容容值的增大导致振荡频率降低,在一 定的门限时 间内 定时 器计数们减少,从而判断按键动作 。 电容式触摸感应库将触摸按倒被配 E 为两种结构,分别是元件 (element) 和传感器 (sensor )。 元件容值的变化就代表触缺事件, 一般指一个独立的按键 。 其结构如下 : struct. Element( fifdeí RO PINOSC TYPE volatile uint8_t *i nputPxs~lRegister ; volatile uint8_t 会 inputpxse12Register: f endif uin t1 6_ t inputbits; uint16 t threshold; uint16_t rnaxResponse ; El emeot 的定义包括一些预编译部分,目的是适应不同的测位方法,以上代码中省去 了无关的部分 。 其中在 RO_PINO SC_TYPE 定义后的部分代表本实验中用到的 RO 方法 。 .inputPxselRegister 和 .ioputPx sel2Register 两个变量用于配置电路中使用到的触摸按键对 应的管脚振荡的端口 。 比如使用 P2 端口,那么这两个变盘对应为 ( uint8 t . ) &P2SEL 和 ( uiot8_ t • ) &P2SEL2o ioputBits 配置使用的振荡管脚, threshold 配置触摸发生时电容变化 必须跑过的门限值, maxRespon se 配置传感器内的元件最大的预期响应 。 如果将电容变化 按照百分比衡址,电容达到阀值 threshold 时,其百分比为 0% ; 达到 maxResponse 时 ,百 分比为 100% 。 传感器表示一组独立元件的集合,元件数量可以是多个,也可以是 一 个,可以用作定 义滑盖或者像本实验中介绍到的滑轮的结构 。 传感器的具体结构如下: struct Sensor( 11 the method acts as the switch to determine which HAL is called uint8 t halDefinition: uint8 t numElements: u1nt8 t baseOffset: struct Element const *arrayPtrlMAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR); uint16 t measGateSource; u1nt16 t sourceScale; uint16_t accumulationCycles; 'ifdef SLIDER WHEEL uint8_t points: ulnt8 t sensorThreshold; 'endif ); halDefin ition 选定测量方法,本实验中将使用 RO_PINOSC_TAO_WDTp。 numElements 定义传感器中 元件的数症 。 190 第二部分修炼篇 baseOffset 用 于定义在所有的元件中的偏移盘 。 在库文件的 structure.b 中由 TOTAL NUMBER_OF_ELE队伍NTS 定义元件的总数,每个元件在数组 baseCnt[TOTAL_NUMBER_ OF_ELEMENTS] 中会有一个字的空间存储数据, baseOffset 就用来定义对应的元件在数据 中的偏移值 。 *arrayPtr[MAXIMUM_NUMBER_OF_ELEMENTS_PER_SENSOR] 指向传感器中所有 对应的元件,要求定义顺序与物理顺序相对应 。 measGateSource 在 RO 测盐中定义门控定时器的时钟源 。 sourceScale 用于定义非看门口定时器的其他定时器时钟糠分频系数 。 accumulationCycles 在使用卡门口定时器作为门控定时器的情况下用于选择门控时钟的 时钟间隔 。 points 是定义使用滑轮的情况下,滑轮识别的点个数 。 sensorThreshold 用于定义一次有效触碰发生的积累值 。 在认识了触摸库中关于元件和传感器的定义之后,再介绍实验中调用的电容触摸 API 函数 。 void TI_CAPT_Raw ( Sensor* , uint16_t*) 测 量传感器 内 每个元件的电容值 ,这个值会 被存储到对应的数组中 。 入口参数即为要测量的传感器指针以及测量值使用的存储数组 。 void TI CAPT Init Baseline ( Sensor * )函数用于首次测量传感器内每个元件对应的电 容值,该函数实际是调用了 Tl_CAPT_Raw (Sensor* , uint16_t*) 函数,由该函数初始化赋 值存储电容值的 baseCnt 数组 。 void TI_CAPT_Update_Baseline (Sensor 飞 uint8_t ) 与 TI_CAPT_Init_Baseline ( Sensor * ) 的作用相似,但是该函数可以多次测量后求平均,求平均次数由人口参数指定 。 void TI_CAPT_Custom (Sensor *, uint16_t * )用于测量传感器内每个元件相对于之前 电容值的变化,可以将容值变化作为判断触摸动作的依据 。 uint8 t TI CAPT Button (Sensor * )用于测量电容按键动作,返回值为 0 或者 1 0 返 回值为 0 ,则表示电容变化没有超过定义的阔 值;返回值为 1 ,则表示电容按键的容值变化 超过定义的阔值 。 uint16 t TI CAPT Wheel (Sensor * ) 用于测量滑轮传感器上的位置,返回值为 ILLEGAL SLIDER WHEEL POSITION 则表 . 示没有触摸动作;返回值在 0 到定义的最大值 之间,则表示当前触摸位置,最大值由传感器 pointsl4 中的 points 定义。返回值与滑轮位置的关系如 图 7-7 所示 。 有了以上预备知识,下面来完成本章的实验 。 图 7-7 函数返回值与 滑轮的位置关系 第7章技术进阶之一:熟练掌握MSP430单片机 191 7.1 .2 实验目的 实验目的主要有以下三 点: · 理解电容式触摸按键的基本原理 。 • 1革握利用管脚振荡功能完成触摸按键的功能 。 · 学挝I10 口的使用 。 7.1.3 实验设计 本实验将利用触摸板上的接近传感器判断是否有手指接近状况发生,如果有手指接近 则使用前轮周边的 8 个 LED 完成一 次顺时针和逆时针循环点亮过程,之后手指触碰触摸板 上的滑轮以及中间触摸按键会点亮对应位置的 LED ; 如果没有 手指挥近 ,整机回到低功耗 状态,并定时利用接近传感器检测 手指接近状态。 软件上首先需要完成对触摸按键的 元件以及传感器的定义 。 这部分内容在库文件的 structure.c 文件中 完成,下面的代码是以中间的触摸按键定义的 元件 。 const struct E1ement middle_element 2 { //定义对应地口 .inputPxselRegister - (uint8_t *)&P2SEL, . inputPxse12Register - (uint8_t *)&P2SEL2, //定义具体的管脚 .inputBits .8IT5, //最大响应值 .maxResponse - 350+655, //阑值 .threshold z 350 将滑轮的 4 个元件定义为 l 个传感器,具体代码如下: const struct Sensor whee1 - //定义测试方法 .ha1Definition - RO_PINOSC_TAO_WDTp, //传..中元件个1: . numE1ements - 4, //滑轮识别的位置点数 .points - 64 , //闸值 .sensorThreshold - 75, //数组偏移量 .baseOffset • 0, 1/ 指向四个元'非 .‘r1 .arrayptr(O] • 'vol四Ie_UP , 11 指陶 .1 个元'非 .arrayPtr(1) qht, .arrayPtr[2) - 晶vOlume_down , .arrayPtr[3j -晶 1eft , /1 配置门控时间间隔 192 第二部分修炼篇 .accumulationCycles- WDTp_GATE_8192 以 上 的定义要求使用的 CCS 软件支持 GCC ,在 工 程的 prope句中选择 MSP430 Compiler , 点击 SetAddi凶ti∞ on础a剖叫1 Flags 插人"飞.一-gc♂c" 触摸按键实验的软件流程图如图 7-毛8 所示,在没有按键动作的情况下, MSP430 大部分 时间处于休眠状态 。 图 7-8 触摸按键实验软件流程图 MSP430 与触摸按键相连的 P2 端口需要配置为 PINOSC 状态,而与 LED 相连的 P l 端 口需要配置为输出 。管脚的 PINOSC 功能要求配置 P2SE L 的对应位为 0 , PxSEL2 的对应位 为 1 ,这部分工作由库自动完成 。 1/0 口配置代码如下: void InitLaunchPadCore(void) //ACLK 分频系数为 1 BCSCTLl 1- DIVA 0; //ACLK 时钟源为 VLO BCSCTL3 1- LFXT1S 2; //初始化精口 //PIOUT 对应位清零 PIOUT &= -- (BIT3+BIT4+BIT5+BIT6+BIT7+BITO) ; //设置方向为输出 PIDIR 1- BIT3+BIT4+BIT5+BIT6+BIT7+BITO ; //设置 P2 袖口功能 P2SEL s OxOO;//设置 P2 端口与触摸按键相连的管脚为输出 第7章技术进阶之一:熟练掌握MSP430单片 机 193 P2D1R 1= (B1TO+BIT4+B1T2+B1T3+B1T1+BIT5); 11 设置 P2 满口与触摸按键相连的管脚输出寄存暴清零 P20UT &= - (BITO+BIT4+BIT2+BIT3+BIT1+BIT5); 然后调用触摸感应库提供的 API 函数即可完成实验的操作,软件的主函数如下: void main(void) { 11 关闭看门狗 WDTCTL - WDTPW + WDTHOLD; 11 初始化 MSP430 lnitLaunchPadCore(); 11 设置 DCO 频率为 1MHz , SMCLK 分频系数为 8 BCSCTL1 = CALBC1 1 悦目Z; DCOCTL = CALDCO 1悦目 Z; BCSCTL2 1- DIVS 3; 11 测量接近传感器基线值 T1_CAPT_lnit_Baseline(&proximity_sensor) T1_CAPT_Update_Baseline(&prox imity_sensor, 5) while (1) 11 空间状态等待接近动作触发 CapTouch1dleMode(); 11 接近动作发生后测量滑处和按键的基线{t MeasureCapBaseLine(); 11 接近动作发生后显示 LED 跑马灯效果 LedStar tUpSequence(); 11 判断触摸动作并使用 LED 显示 CapTouchActiveMode(); 7.2 LCD显示 实验 7.2.1 预备知识 点阵液晶显示模块以描点的方式完成字符和图形的显示 。点 阵液晶模块一 般由两部分 组成,分别是液晶面板和液晶控制器 。 液晶面板就是用于显示点阵的部分,液晶控制器即 为驱动和控制液晶面板的芯片,这种芯片通常以简易的黑胶封装 。控制液晶显示 字符或者 图形,实际就是与液晶控制器通信,配置液晶控制器完成对应的任务 。 实验中采用了 128 x 64 点阵的液晶模块,该液晶控制器为常见的 ST7920 液晶控制器 。 ST7920 内置 8 1 92 个中文汉字( 16 x 1 6 点阵) 字库 和 128 个字符 (8 x 1 6 点阵)符号字库 。 对于 MSP43 0G2553 这种经济型 MSP430 ,本身自带的 FLASH 空 间比较小,液晶控制器自 带字库可以让 MSP430 不再需要使用内部的 FLASH 存储字库,这样节约了自身的 FLASH 资源 。 ST7920 还带 有 64 x 256 点阵显示 GDRAM 用于绘制图形,以及 64 个字的字符显示 194 第二部分修炼篇 CGRAM 用于造字 。 控制液晶模块通过液晶模块的控制总线完成,其控制总线的定义如表 7-2 所示 。 液晶的 控制总线可以是并行的也可以是串行的,通过 PSB 引脚的信号定义 。 在本实验中使用 8 位 并行总线的方式,所以 PSB 引脚接至 Vcc , 选择为高电平 。 褒 7-2 液晶模块引脚定义 号 1. RS R/W ElC L K DBO DBI DB2 DB3 DB4 DB5 DB6 DB7 PSB MSP430 连接管脚 PI.5 PI.6 P1.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 . P2.6 P2.7 与 YCC 相连 功能 并行的指令/数据选择信号 }f行的读写选择信号;$行的数组口 并行的便能衍号;$行的阔步时钟 数据位。 数据'位 l 数据位 2 徽i\!i位 3 数据位 4 数据位 5 数据位 6 数~位 7 并 1:和行接口选择: H- 并行; L- 呼1 行 与液晶模块通信需要满足对应的读写时序,液晶棋块的写时序如图 7-9 所示 。 RS R/W E DBO-DB7 图 7-9 液晶模块写时序 向液晶模块写数据,首先需要做两个操作, RS 信号线选择写人的是指令还是数据, RIW 信号拉低表示执行写操作 。 在这两步执行完毕后,需要延迟 TAS 才能将使能信号 E 拉 高 , TAS 为地址锁存时间。在使能信号拉高之后,数据线可以开始写人有效数据 。 在数字电 路中存在一个建立时间和保持时间的要求。建立时间表示在时钟信号的时钟沿到达前,数 据必须保恃稳定不变的最短时间;保持时 间表示在时钟信号的时钟沿到达之后,数据必保 第7章技术进阶之一:熟练掌握MSP430单片机 195 持稳定不变的最短时间 。 液晶模块的写操作也属 于数字电路的范围,所以对应的在使能信号 E 的下降沿之前, 数据总线上的数据至少要保持稳定不变 Tosw • Tosw 即为数据建立时间;使能信号 E 的下降 沿之后数据需要保持不变时间 TH • TH 即为数据保持时间 。 在使能信号 E 的下降沿之后 • RS 信号和 W/R 信号必须保持不变时间 TAH • TAH 为地址保持时间 。 在时序图中还规定了使能信号 E 的最小脉冲宽度 Tpw • 即使能信号保持高电平的最短时 间;以及使能信号的周期凡,即使能信号变化的最小周期 。 时序阁中还规定了使能信号 E 的上升时间凡,上升时间用来规定信号由低电平变化为高电平的最短时间。提及的各时间 参数的具体值如表 7-3 所示。 表 7-3 LCD 写时序时间参敛 (单位: ns) 时间参戴 TAS TAH TDSW TH Tpw Tc TR TDDR 说明 地址建立时间 地址保持时间 数据建立时间 数据保持时间 使能信号脉冲宽度 便能信号周期 上升时间 数据延迟时间 最小值 10 20 40 20 160 1800 200 典型值 一 一 一 最大值 一 一 260 与写时序相对应的液晶模块读时序如图 7-10 所示 。 读操作的第一步是将 RIW 置高以及 RS 选择读指令还是读数据 。 经过地址建立时间 TAS • 使能信号 E 拉高;在时序图中可以看 到并不是使能信号拉高之后有效数据马上出现在液晶模块的数据总线上,这是因为从使能 信号 E 开始拉高到有效数据出现在数据总线上要经历时间 TOOR • 这个 TOOR 就是数据延迟时 间或者说是数据准备时间,具体数值见表 7-3 0 后面的时序与写操作是完全一样的 。 RS RJW E OBO-OB7 图 7-10 液晶模块读时序 构建了正确的读 写 时序 ,只要按照读写时序 向液晶写人指 令和数据即可控制液晶完成 196 第二部分修炼篇 对应的显示操作 。 7.2.2 实验目的 实验目的主要有以下 三点 : · 掌握使用 MSP430 完成并行数据的传输 。 · 掌握并行数据传输的基本时序 。 · 熟悉液晶模块的使用 。 7.2.3 实验设计 实现 LaunchPad 和液晶模块通 信的第一步是使用软件的方式控制 1/0 口 实现液晶模块 的读写 时序 。 首先,定义与操作相关宏以便于读写时序代码的实现 。 //用于 RS 、 RW 、 EN 的 1/0 口定义为输出 'define LCOCTLPIN OUTPUT //指令操作 PIDIR 1= OxEO 'define LCD12864 RS DATA //数据操作 PIOUT 1= Ox20 'define LCD12864 RS CMD //读操作 PIOUT &= OxDF 'define LCD12864 RW REAO //写操作 PIOUT 1= Ox40 'define LCD12864 RW WRITE PI0UT &- OxSF //使能信号为高 'define LCD12864 EN ENABLE PIOUT 1= Ox80 //使能信号为低 fdefine LCD12864 EN DISABLEPI0UT &= Ox7F //设置 P2 管脚为工 /0 口功能 'define LCDDATA P1N GP10 //数据端口方向为输入 P2SEL ~ OxOO fdefine LCDDATA DIR 1N //数据端口方向为输出 P2D1R - OxOO fdefine LCDDATA D1R OUT P2D1R - OxFF //定义数据精口输入数据寄存器 fdefine LCDDATA DATA 1N P2IN //定义数据蝙口编出数据寄存蕃 fdefine LCDDATA DATA OUT P20UT 按照图 7-9 所示的液晶写时序图,可以编写下面的代码分别实现写数据和写指令的 时序 。 /食写数据*/ void LCD12864_writedata (unsigned char Data) //检查 LCD 模块是否处于忙状态 LCD12864_checkbusy (); //设.. MSP430 数据竭口方向为输出 第7章技术进阶之 一 :熟练掌握MSP430单片机 197 LCDDATA DIR OUT; //RS 拉高,表示发送数据 LC012ð64 RS DATA; //RW 拉低,表示写操作 LC012864 RW WRITE; //使能信号拉低 LC012864 EN OISABLE; //延时以保证时序要求 Delay_40US (); //MSP430 数据端口发送数据 LCOOATA OATA OUT - Data; //使能信号拉低 LC012864 EN ENABLE; //延时以保证时序要求 Oelay_40US () ; //使能倍号拉高 LCD12864 EN OISABLE; /*写指令*/ void LC012864_ write command (unsigned charαnd Code) //检查 LCD 模块是否处于忙状态 LC012864_checkbusy (); //设置 MSP430 数据蝙口方向为输出 LCOOATA OIR OUT; //RS 拉低,表示发送数据 LC012864 RS CMO; //RW 拉低,表示写操作 LC012864 RW WRITE; H 使能倍号拉低 LC012864 EN DISABLE; //延时以保证时序要求 Delay_40US (); //发送指令吗 LCDDATA OATA OUT - CmdCode; //使能馆号拉高 LCD12864 EN ENABLE; //延时以保证时Jt.要求 Delay_40Us (); //使能信号拉低 LC012864 EN OISABLE; 按照图 7- 10 所示 的液晶时序图,可以编写下面的代码分别实现读数和读指令 的时序 。 unsigned char LC012864_readdata (void) //定义返回值.冲 unsigned char Temp; //检查 LCO 模块是否处于忙状态 LC012864_ch eckbusy (); 198 第二部分修炼篇 //设置 MSP430 数据精口方向为镜入 LCDDATA DIR IN; //RS 拉低,表示该取数据 LCD12864 RS DATA; //RW 拔高,表示读操作 LCD12864 RW READ; //使能信号位高 LCD12864 EN ENABLE; //延时以保证时1t-要求 Delay_40US (); //读取 LCD 输出数. Temp ~ LCDDATA_OATA_IN; 1/ 使能信号拉低 LCD12864 EN DISA8LE; 1/ 返回读取值 return Temp; 完成了液晶读写时序的控 制,下一步 即可通过调用时序控制代码完成汉 字 和阁形的显 示 。 在液晶中显示汉字字符,需要向液晶的用于字符显示的 DDRAM 中 写人数据, DDRAM 包括 64 个字,每个字对应于液晶上一个 16 x 16 点阵的字符 。 16 x 16 的点阵需要 256 位 ( bit ) 数据来定义, DDRAM 每个字中存储的并不是直接用于液晶显示的点阵数据,而是编 码 。 这个编码对应到液晶的字库 (CGROM 和 HCGROM ) 或者造字 RAM (CGRAM ) 巾, 这些存储空间中存储着点阵显示数据 。 DDRAM 和液晶显示的对应关系如表 7-4 所示,液晶 可以显示 4 行,每行 8 个仅 字字符,这 32 个汉字字符对应的 DDRAM 地址是 80 H '- 9FH 。 映射项 ml 行 第2行 第3行 第4行 第1 列 80H 90H 88日 98日 亵 7-4 DDRAM 地址和液愚显示映射关系 第2 列 81 日 91 H 89 日 99 日 第3列 82H 92H 8AH 9AH 第4 列 83 日 93H 8BH 9BH 第5列 84日 94 日 8CH 9CH 第 6 J1J 85H 95 日 8DH 9DH 第7列 86H 96H 8EH 9EH 第8列 87 日 97H 8FH 9FH 为实现表 7-4 的映射关系,编写下面的地址设置函数来实现 。 户设置地址字符 , X 为行, Y 为列 V void LCD12864_setplace (unsigned char X, unsigned char Y) //DDRAM 地址 unsigned char pos; i f (X ~.. 1) //第 1 行首地址 80日 X : Ox80; else i f (X 霉5 2) 第7意 技术进阶之一:熟练掌握MSP430单片机 199 //第 2 行首地址 90H X = Ox90; else if (X e= 3) //第 3 行首地址 88日 X '" Ox88; else if (X == 4) //第 4 行首地址 98H X a Ox98; //DDRAM 地址值 pos - X + Y; //发迭地址 LCD12864_writecommand (pos); 完成地址的设置,接着写入显示 字符即可完成汉字显示 。 /*在 X 行, Y 列,显示字符 111 str 的内容*/ void LCD12864_displaystring (unsigned char x , unsigned char y , unsigned char *Str) //LCD 工作在基本模式下 , 指令 30H LCD12864 writecommand (LCD BASIC COMMEND); //超出范圆则返回 if (( x > 4) 11 (y > 8)) return; //设置地址映射关系 LCD12864_setplace (x, y) ; //字符'来到达末尾且没有超过一行显示范回 wh i le ( (*Str > 0) 晶晶 (y <- 8) ) //写入字符数据 LCD12864 writedata (*Str) ; //字符串指针累加 Str++; //累加记录位置 y++ ; 液晶上绘制图片,则是通过向液晶的绘图内存 GDRAM 中写人数据的方式来 实 现的 , 这一点和 DDRAM 相类似 。 但是, GDRAM 的每一位数据对应于液晶上的 一 个点 。 使用 到的 GDRAM 块行地址为 0 """ 3 1 ,列地址为 0 """ 15 ,每个地址对应 l 个字的数据 。 向 GDRAM 内发送数据,则是按照先发行地址,再发列地址的方式完成的 。 GDRAM 与 液晶 的映射关系如 表 7-5 所示 。 200 第二部分修炼篇 曲曲射项 m。 行 绵 行 ...... ~ 31 行 货J 32 行 ...... 货~ 63 衍 第 0 - 16 列 行地址 O. 5日j 地址。 行地址 1. 列地址。 ...... 行地址 31 , 列地址。 行地址 O. 列地址 S ...... 行地址 31 , 列地址 8 袋 7-5 GDRAM 与液晶显示映射关系 第 17 - 31 列 ...... 第 96 - 111 列 行地址。, 列地址 l ...... 行地址。, :y11地址 6 行地址 1 , 列地址 l ...... ...... 行地址 1 , ~l地址 6 ...... ...... 行地址 31 , ...... 行地址 31 , 列地址 1 列地址 6 行地址 O. 列地址 9 ...... ...... 行地址。, 列地址 14 ...... ...... 行地址 31 , 列地址 9 ...... 行地址 31 , 列地址 14 第 112 - 127 列 行地址。' 如j地址 7 行地也1: 1. 列地址 7 ...... 行地址 31 , 列地址 7 行地址。' 列地址 15 ...... 行地址 3 1. 如l地址 1 5 下面这段代码则是为 f 实现在 y 行 , x 歹u 绘制 一个像点 。 I"y 表示行, X 为列, color 为显示点或者空白../ void LCD12864_writepixe1 (unsigned char x, unsigned char y, unsigned char color) unsigned char row, column, cbite; unsigned char tempH, tempL; //关闭绘图模式 LCD12864_graphsetmode (0); /1 列数除 16 co1umn ~ x >> 4; //获取列地址 cbite e X 晶 OxOf; if (y < 32) 11 行数在 0-31 行的范圃,行地址不变 row ~ y; else 11 行数在 32 - 63 的范园 , 行地址被 32 row s y 幽 32; 11 列地址加 8 column +- 8; 11 写行地址 LCD12864 writecommand (Ox80 + row) ; /1 写列地址 LCD12864 writecommand (0皿80 .. column); /1 读之前雷要空读 1 次 LCD1286 4 readdata () ; 11 读出 (x , y) 像意点的健 tempH = LCD12864_readdata () ; 1116bits 数据需要通过 8 位後口读两次 tempL = LCD12864_readdata (); 第7章技术进阶之一:熟练掌握MSP430单片机 201 //根据现在显示的状态做与或操作后重新写入 GDMM 中 LCD12864 writecommand (Ox80 + row); LCD12864 writecommand (Ox80 + co1umn); if (color) if (cbite < 8) ( tempH 1= (1 << (7 - cbite) ); ) else { tempL 1= (1 << (15 - cbite) ); ) else if (cbite < 8) {tempH 伊- (1 << (7 - cbite)) ;} else {tempL &z - (1 << (15 - cbite)); } LCD12864_writedata (tempH); //写入绘制数据高位 LCD12864_writedata (tempL); //写入绘制数据低位 LCD12864_graphsetmode (1); //显示绘制图像 LCD12864 writecommand (LCD BASIC COMMEND); //退出绘图模式 通过调用以上函数即可完成液晶显示功能 。 7.3 PS/2键盘实验 7.3.1 预备知识 PS/2 键盘采用标准 PS/2 协议与主机完成通信,该协议是一种双向同步I$l行通信协议 。 通信的两端通过时钟信号 C lock 同步,并通过数据 Data 数据信号交换数据 。 PS/2 设备的时 钟线和数据线在电路上都是集电极开路的,主机可以通过拉低 CLK 信号实现抑制通信 。 在 MSP430 与 PS/2 设备的通信中 , MSP430 为 主 机,可以通过拉低 CLK 时钟线,抑制 PS/2 设备发送数据 。 PS/2 设备向主机发送数据的时序结构如图 7-12 所示,总共包括 11 个位 。 每 一 帧数据 都是以 一 个低电平的起始位开始,紧接着是 8 个有效数据位,有效数据位最低有效位在最 前 。 有效数据位之后是一个奇校验位,最后以高电平的停止位结束一 帧数据的发送 。 图 7-1 1 •"< O〈 』 LFm 迹 。 『 〈 , 』 N〈LF〈。 〈 Q 2LF < O 寸 LF〈。 〈 的 〈LH〈。 咱 〈LF〈。 怀 LF〈。 〈 LF H刀 万 忘 " 。' 严 的 PSI2设备向主机发送数据时序结构这个图需要重新绘制 在 PS/2 设备向主机发送数据的过程中,时钟信号由 PS/2 设备产生 。 在时钟信号的下 202 第二部分! 修炼篇 降沿 , 主设备读取每个位的数据 。 时钟频率最高不能超过 33旺恒,大多数 PS/2 设备工作在 10 ""-' 20kHz的范围 。 推荐值在 15 kHz 左右,也就是说, CJock (时钟脚 ) 高、低电平的持 续时间都为 40闷 。 并且在时序中要求时钟上升沿到数据位变化的时间不小 子 5 阳,数据位 变化到时钟下降沿的时间也不得小子 5 闷,但是也不能超过 25 闷 。 PS/2 键盘的标准接插件如图 7- 12 所示 ,接插件有 6 个引脚,但是实际有效的引脚只有 4 个 。 表 7 -6 列举了每个引脚的定义 。 a ) 公头 (maJe ) b) 母头( femaJe ) 图 7-12 PS/2 键盘接插件示 意 图 PS/2 键盘对每个按键做了特定的编码,向 主机传输的数据即为这些编码 。 目前键盘使用 的编码集为标准第 二套扫描码 。 每个键盘码分 为通码 ( make) 和断码 (break)。 通码是按键 按下时所发迭的编码 ; 断码通常是按键释放时 所发送的编码 。 比如按下按键 "A" 的时候发 送的编码为 Ox l C ,当按键 HA" 被释放的时候 发送编码为 OxFO IC 。 组合按键的扫描码发送 引脚 2 3 4 5 6 表 7-6 PS/2 引 脚 定义 名称 DATA N/C GND Vcc CLK N/C 编述 数据统 保留,来使用 地 电源 Vcc 时钟线 保留,未使用 则是按照按键动作顺序来实现的,比如以按下左 "Sh ift" + "A" 键为例 。 1 )按下左 "Shift" 键; 2) 按下 " _A" 键; 3) 释放 UA" 键 ; 4 ) 释放左"铀 的 "键 。 计算机上接收到的 一 串 数据为 Ox 1 2 (左 "Shift" 键通码)、 Ox l C (" A" 键通码)、 OxFO 和 OxlC ("A" 键断码)、 OxFO 和 Ox12 (左 "Shift " 键断码)。 在 PS/2 设备等待发送数据时,首先检查 C10ck (时钟线)电平状态 。 如果是低电平 , 则认为是主机抑制了通信, 此 时它必须缓冲需要发送的数据直到重新获得总线的控制权 。 如果 C l ock (时钟脚)为高电平 , PS/2 设备便开始将数据发送到主机 。 本实验将使用 MSP43 0 作为主机 , 完成与 PS/2 键盘的通信 。 MS P43 0 读取键盘按下的 键值,并把按下的按键对应的字母显示在 LCD 上,完成一个简易的打字机 。 MSP430 的管脚与 LCD 模块及 PS/2 键盘的连接如表 7-7 所示 。 第7章技术进阶之一:熟练掌握 MSP430单片机 203 百| 脚 RS RJW E/CLK DBO DBl DB2 DB3 DB4 DB5 DB6 DB7 PSB CLK DATA 表 7-7 PS/2 实验管脚连接 MSP430 连接管脚 P 1.5 P1.6 Pl.7 P2.0 P2.1 P2.2 P2.3 P2 .4 P2.5 P2.6 P2.7 高电平 Pl.O P 1.3 功 能 LCD 并行的指令/数据选择信号 LCD 并行的读写选择信号 LCD 并行的使能信号 LCD 数据位。 LCD 数据位 l LCD 数据位 2 LCD 数据位 3 LCD 数据位 4 LCD 数据位 5 LCD 数据位 6 LCD 数据位 7 LCD 并/串行接口选择: H- 并行; L- 串行 PS/2 键盘的 CLK 管脚 PS/2 键盘的 DATA 管脚 7.3.2 实验目的 实验目的主要有以下 4 点: ·了解使用嵌入式微控制器完成人机交互的基本方法。 ·掌握使用软件的方式控制微控制器 1/0 口管脚模拟通信时序。 ·掌握使用 MSP430 的1/0 口中断功能。 ·了解 PS/2 接口的通信协议。 7.3.3 实验设计 对于 PS/2 键盘发送的数据,主机要在 CLK 信号的下降沿接收。利用这个特点,可以 使用 MSP430 的I10 口中断功能完成每 1 比特数据的接收。 MSP430 在一般状态下处于低 功耗的休眠模式, 1/0 口管脚上检测到 PS/2 键盘的 CLK 下降沿时, CPU 被唤醒,并接收 DATA 信号线的数据;接收完 1 比特数据后, CPU 再次进入低功耗模式。反复这样的动作 直至接收到一个完整的 PS/2 数据帧,然后完成对帧数据的解码,并将按下的按键所代表的 字符显示在液晶上。实现代码的总体流程如图 7-13 所示。 在实验代码中,首先关闭看门狗、初始化时钟系统以及与 PS/2 键盘和 LCD 模块相连 的管脚,然后使能 1/0 口中断功能,并进入低功耗模式。每次1/0 口中断发生,都会接收 lbit 的数据。如果接收到完整的数据帧,则解码数据并在 LCD 上显示:反之,再次回到低 功耗模式,等待下一位的数据。 PS/2 比特位的接收过程如图 7国 14 所示,当发生每一帧的第 一次 1/0 口中断,则检查该中断是否为 CLK 信号触发的中断,以避免误触发。如果检查到 中断来自 CLK 信号,并且 DATA 信号为低,则认为 PS/2 数据帧开始。之后第 2 位到第 9 204 第二部分修炼篇 位的数据总共 8bit 有效数据,第 10 位是校验数据,接收到第 10 位数据后就开始解码字符, 在接收流程上直接忽略了最后的停止位。 荷 中断唤醒 是 图 7-13 PS/2 键盘实验软件流程图 是 第1 比特位 开始 第 10 比特位 错误 图 7-14 PS/2 比特位接收过程 第7章 技术进阶之 一: 熟练掌握MSP430单片 机 205 键盘编码采用 1/0 口中断处理的方式 ,中断服务函数以中断沿为触发处理 PS/2 比特位, 具体函数如下 : 'pragma vectora PORT1_ VECTOR __interrupt void PORT1_ ISR (void) { //检测如果为 clock 的中断 if (P1IFG & BITO) / /手动消除中断标志 Pl IFG &= ~ BITO; //中间 8 位数据的时钟中断,键值存储在 KeyValue 中 j f ((ClkNum > 0) && (ClkNum < 9)) //因键盘数据是低 》高,结合上一句所以右移一位 KeyVal ue ~ KeyValue >> 1; jf (PIIN & BIT3) //当键盘数据线为 1 时 KeyValue = KeyValue 1 Ox80; //存储一位 (011=1) , 数据为 0 时直接右移一位 e1se if (0 as ClkNum) if (P1IN & BIT3) //当键盘数据线为 1 时 return; ClkNum++ ; if (ClkNum > 10) ClkNum = 0; //当中断 11 次后表示一帧数据收完,清军变量准备下-次接收 Decode (KeyValue); 中断服务函数接收到完整的键盘码之后,需要将接收到的数据解码为对应的 ASCII 码, 具体字符解码过程如下: void Decode (unsigned char ScanCode) uns1gned char TempCy c ; H 当按键松开时 if ( !Key_UP) switch (ScanCode) case OxFO: 206 第二部分修炼篇 11 当收到 OxFO , Key_up 置 1 表示断码开始,也表 示 按键断开 Key_UP = 1; 11 跳出,不处理 OxFO break; case Ox12: 11 左 Shift shift ~ 1; break; case Ox59: 11 :右 Shift shift ~ 1; break; defau1t: 11 如果没按下 Shift 键 if ( !shift) for (TempCyc e 0; (unshifted(TempCyc] (0) !; ScanCode) 晶晶 (TempCyc < 67); TempCyc++) ; 11 如果编码袤的第一列有符合该按键编码,就将给编码的 ASCII 值赋给 IIKeyASCII 以便液晶显示 if (unshifted[TempCyc) (0) _5 ScanCode) KeyASCII - unshifted[TempCyc] (1) ; BF = 1; else //如果按下 Shift 键 for (TempCyc = 0; (shifted[TempCyc) (0) !- ScanCode) && (TempCy q < 67);TempCyc++) : if (shifted[TempCyc) [0] e_ ScanCode) KeyASCII - shifted[TempCyc] (1): BF - 1; b rea k; 第7章技术进阶之一 : 熟练掌握 MSP430单片机 207 else Key_UP 霍 0; //当 Shift 键松开时不处理判蜀,如 G 34H FOH 34日 那么第 二个 34 日不会被处理E switch (ScanCode) //左 Shift ,将 shift 的标识位归。 case Ox12: shift = 0; break; //右 Shift case Ox59: shift - 0; break; 具备以 上功能函数后 ,在 主函数中调用解码和显示功 能即 可实 现简单文本 编辑的 功 能 。 void main (void) / / x 为列, y 为行 8 叫 int x - 0, y - 1; //关闭看门狗 WDTCTL - WDTPW ~ WDTHOLD; U 设置民0 频率为 8MHz BCSCTL1 - CALBC1 8MHz; DCOCTL - CALDCO 8随iz; H 徊始化.鑫曲'口 In1t KB (); H 复位液晶 LCD12864 init(); //打开会属中断 EINT (); while (1) if (BF - - 1) // .如果一个接键的字符处理完了 if (KeyASCII -- 8) /1 接下Back Space 键 if (x < 1 ) /1 列为 0 ,行不为 0 if (y > 1) y--; 208 第二部分修炼篇 x = 7; else y = 1; x = 0; else x--; else if (KeyASCII == 13) //接下 Enter 键 y++; x ~ 0; else //列、行、字体颜色和背景颜色,需要显示的代码 LCD12864_sendascii (y, x, (KeyASCII)); //超出显示范困,重量初始化坐标 x++; if (x > 7) y++; X a: 0; //超出显示范围,清房后冲起始位置显示 if (y > 4) LCD12864 writecommand(Ox01) ; y = 1; LCD12864_sendascii(y, x, , ' ) ; BF ~ 0; 7.4 2 .4 G 无线传输实验 7.4.1 预备知识 2 .4GHz 无线频段是全球通用的 ISM 频段,免费开放给工业、科研和医疗应用 。 ZigBee 、 Wi-Fi 、蓝牙等标准都使用的该频段 。 本实验选用了 SPI 接口的 NRF24LOl 无线模 第7章技术进阶之一:熟练掌握 MSP430单片机 209 块来实现点到点的元钱数据传输。 NRF24L01 无线模块具备标准 SPI 接口用于与微控制器的 通信,并配有中断输出管脚用于提示数据到达或异常情况。 NRF24L01 元线模块的控制信号 如表 7-8 所示,也包括了无线模块与 MSP430 连接的对应管脚。 无线模块控制引脚 CE CSN SCK MOSI MISO IRQ 表 7-8 无线模块接口说明 MSP430 连接管脚 P1.3 P1.5 P1.4 P1.2 Pl.l Pl . O 功能说明 高电平 >10阳,发送模式 高电平,接收模式 低电平,待机模式 无线模块 SPI 接口片选信号 无线模块 SPI 接口时钟信号 无线模块 SPI 接口数据输入信号 无线模块 SPI 接口数据输出信号 无线模块中断输出信号,低电平有效 无线模块可工作在自动接收应答状态,发送端向接收端发送数据,发送完毕后会等待接 收端发送应答信号;如果发送端没有接收到接收端的应答信号,会在一段时间之后重新发送 数据,并且该过程不需要使用无线模块的微控制器的介入。接收端在接收到发送端的数据 后,会自动的发送应答信号,应答信号的发送不需要使用该无线模块的微控制器的介入。 无线模块发送的数据具备固定的帧结构,如图 7-15 所示,数据帧由前导码、接收端地 址、包控制域、有效数据载荷以及 CRC 校验码组成。 图 7-15 无线模块帧结构 1 )前导码:长度为 1 个字节,用于同步的接收端的解调器的输入比特流序列,码值 为 01010101 或 10101010 。如果在接收端地址中的第 l 比特位是 1 ,则前导码被自动设置为 10101010; 如果接收端地址中的第 1 比特位是 0 ,则前导码被自动设置为 01010101 。 2) 接收端地址:长度为 3~5 个字节,定义接收端的地址。地址用于数据包检测和接 收,确保由正确的接收器接收,避免多个模块之间的相互干扰。接收端地址长度可通过 AW 寄存器配置长度为 3 , 4 或 5 个字节。 3 )包控制域:长度为 9 个比特,包含 3 个部分。数据长度部分用于指定有效数据的长 度(以字为单位),该部分占 6 个比特,有效数据的长度可以是从 o ~ 32 字节; PID 用来 检测所接收的分组是新的或者重发的,该部分占 2 个比特; NO ACK 标识是否需要 ACK 响应,用于自动应答功能控制,占 1 个比特。 210 第二部分修炼篇 4 ) 有效数据 :长度为 O ""_ 32 字节,长度由用户配置 。 可以配置成动态和静态,默认 配置为静态,静态模式要求发送端和接收端的有效数据长度定义一致 。 5) CRC 校验:循环冗余校验,长度为 1.-..;2 个字节,数据包具备强制错误检测机制, 校验包括地址、包控制字段及数据段。 无线实验将结合前面介绍到的 LCD 模块和 PSI2键盘的使 用 。 在发送端由 PS/2 键盘键 入字符,键人的字符同步显示在发送端液晶上,同时键人的字符囱元钱模块发送;接收端 无线模块接收到数据后,立即显示在接收端液晶上 。 总的来讲,实验可以实现一个无线键盘的效 发送端结构惬图 果,发送端和接收端的结构框图如图 7- 16 所示 。 在本实验中使用到了较多的外设,如果 LCD 仍然 使用并行模式,会占用大量的 MSP430 的 1/0 口 管脚,导致 LaunchPad 的I10 口管脚不够使用 。 国此,在这里使用了 LCD 的串行通信模式以达到 节约J10 口的目的。微控制器出现管脚紧张的现 象是在实际使用的过程中经常出现的情况,一方 接收端结构框图 面需要在设计的时候选用管脚数目合理的微控制 器;另一方面要选用合理的接口以节约 νo 口资 源或者设计合理的I10 口扩展电路 。 7.4.2 实验目的 图 7-16 发送端和接收端结构框图 实验目的主要有以下 2 点 : · 了解无线通信的基本概念和流程 。 · 掌握 SPI 接口的使用 。 7.4.3 实验设计 无线通信分为发端和接收两个部分,软件处理的流程图分别如图 7-17 和图 7-18 所示 。 因 7-17 所示的发送端在一般状态下处于低功耗状态,在接收到按键发起的I10 口中断请 求后立即唤醒并发起一 次通信。图 7-18 接收端在没有接收到数据时也保持在低功耗状态, 无线模块在接收到数据后会发起一次中断请求,该中断请求通过 1/0 口中断的方式唤醒 MSP4300 MSP430 在处理完接收到的数据后再次进入休眠状态 。 MSP430 的唤醒采用 Pl 端口中断的方式,中断服务函数如下代码所示: Ipragma vector-PORT1_VECTOR __interrupt void PORT1_ISR (void) i f (P lI F飞& BITO) 第7章技术进阶之熟练掌握 MSP430单片机 21 1 //消除中断标志 {该标志必须手动消除} NRF24LOl IRQ CLRINT; //退出低功耗模式 LPM3 EXIT; 本实验采用了在同一个工程中使用预编译的方式编写发送端和接收端代码。 int main(void) unsigned char tmp_buf(33J; WOTCTL • WOTPW + WOTHOLO; BCSCTLl - CALBCl 8KHz ; 。COCTL e CALOCO 8陋fz ; LCO Init (); NRF24LOl I nit() ; //初始化 NRF24LOl LCO_ShowStrinq(l, 1 , "Test" ); LCO_ShowString(2, 1, " Press key to sta" ); 是 存在 司~ TχOK 回 7-17 发送端程序流程图 212 第二部分修炼篇 已连接 RX_OK 图 7-18 接收端程序流程图 LCD_ShowString(3, 1 , "rt"); LCD_ShowString(4 , 1 , "Test" ); while(NRF24L01 Check())11 检测不到 24L01 LCO_ShowString(l, 1 , " 24L01 Check Failed!" ) ; LCO_ShowString(2, 1 , " P1ease Check!"); LCD_ShowString(l , 1 , " 24L01 Ready! "); fifdef NRF RECV EXP IIRX 模式 ., puγ MH币 ( } -t A A ‘ 11 打开全局中断 LCD_ShowStrinq(4 , 1 , " NRF2 4L01 RX_Mode " ) ; RX Mode (); while (1) __bis_SR_reqister(LPM3_bits); if(NRF24L01_RxPacket(t即,_buf)-亩。 )11 一旦接收到信息,则显示出来 E叩 buf[32);O; 1I加入字符事结束符 第7章 技术进阶之一:熟练掌握MSP430单片机 213 t ezo-Ert -ln铲· - - t -l ,. I m u AU 伽 ·• hu SA -l- z AU., -1++ processlnput (tmp_buf[i)); --··}ie//I-{ enAiUtWfAUfT ''MHVAH&咽···MH'''们阳模啪EJT 'inEz υ阳式化创 S E F-mM四川., Eunu·圄 配 E 棋 V m 块 EHX‘P //打开会属中断 LCD_ShowString(4 , l , "NRF24LOl TX_Mode" ); TX Mode () ; while (1) BF æ 0; __bis_SR_register(LPM3_bits) ; while (BF -- 0) tmp_buf[O) - KeyASCll i tmp_buf[l] - 0;// 加入结束符 processlnput(KeyASCII); if(NRF24L01_TxPaCket(tmp_buf) ! -TX_OK) LCD_ShowString(4, l , "Send Failed ")i 'endif / / NRF SEND EXP 7.5 加速度传感器实验 7.5.1 预备知识 加速度传感器实验采用了 FRAM 开发板上板载 ADXL335 加速度传感器 。 ADXL335 是 一款三 轴加速度计,直接输出反应加速度情况的模拟电压,能够测盘的加速度范围典型值 为士泣。 该传感器可以应用于测:fít倾斜检测中的静态重力加速度,以及运动、冲击或振动 导致的动态加速度 。 ADXL335 传感器的框图如图 7- 19 所示,每个轴对应于一个独立的模拟输出通道 。 可 以根据需要的输出带宽选择 3 个输出通道上所接的电容 Cx 、 Cy 和 Czo X 轴和 Y 轴的带宽范 围为 0.5'" 1600Hz , Z 轴的带宽范围为 0.5 '" 55 0Hz 。在加速度传感器水平静态放置的情况 214 第二部分 修 炼 篇 下, z 轴方向受重力加速度的影响有 19 的加速度 , X 和 Y 轴方向加速度为 0。 +3V Coc 图 7-19 ADXL335 传感器框 图 ADXL335 输出与加速度成比例,当供电电游、民为 3.6 V 时,输出灵敏度为 360mV侣 。 加速度为 0 时,通道输出电压等 于 Vs/2 。 加速度传感器在 FRAM 开发板上的安装方位如 因 7 -20 所示 , X 轴对应于开发板短边方向 , y 轴对应 于开发板长边方向, Z 轴垂 直于板平 面向上 。 iI二 I. ::11 . ... .. ‘, 、 、 口N 口工 口 口 r丁 U 亡丁 口 口 、n - m m m 〈 向 〈 A M 法 凶 【 〉 内问OL F ( U g mg邑 g 〉 + 4 ∞ 』 1 h 企 】 -uN+}内+ n喝 的 N 甘 n 口 们 们 图 7-20 加速度传感器在 FRAM 开发板上的安装方位 加速度传感器与 MSP430 的连接如表 7-9 所示 。 开发板设计上采用了 MSP430 的 1/0 口管脚直接为加速度传感器供电的方式 。 当管脚 P2.7 输出为高电平时,加速度传感器开 始上电 。 能够采用这样的设计,主要是因为加速度传感器的 工 作电流为几百微安,在 1/0 第7章 技术进阶之一:熟练掌握MSP430单片机 215 口的驱动范围之内 。一般情况下,不建议使用1/0 口直接为器件供电 。 本实验希望通过加速度传感器测量 表 7-9 ADXL335 与 MSP430 连接对应关系 开发板在水平方向上的倾角,并通过板 ADXL335 管脚 MSP430FR5739 对应连接管脚 上的 8 个 LED 的 亮灭来表示开发板的倾 斜程度 。 实验示意图如图 7-21 所示,开 发板与水平方向产生夹角,则重力加速 度与图中的 X 轴方向不再是正交的,那 供电电源 Vs X 轴输出通道 Xo盯 Y 轴输出通道 YOυY Z 轴输出通道 Zo町 P2.7 (通用 νo 口) P3.Q (AI2) P3.1 (A13) P3.2 (AI4) 么因此在 X 轴的负方向上会感应到重力加速度的分 量 。 随图中所示的夹角增大 , X 轴负向上的加速度 分量会增大,相应的会朝图中所示的方向陆续点亮 LED5 ~ LED8 0 朝另外一个方向偏转,随着偏转角 度的增大,则会陆续点亮 LED4 ~ LED1 。 7.5.2 实验目的 实验目的主要有以下 2 点: lIll--1 建力方向 ' 平 , 叫 , bAF 方 向 口口 11 口口口口 · 熟悉 MSP430 微控制器 ADC 外设的使用 。 . 了解加速度传感器的基本应用 。 囱 7-21 加速度传感器实验示意图 7.5.3 实验设计 实验实现需要使用 MSP430 片 上的 ADCIO 模块 来测量加速度传感器的输出,需要用到通用 vo 口来 实现 LED 的 显示 。 可以按照图 7 -22 来设计 MSP30 的软件代码 。 首先,初始化与 LED 相连的 vo 口管 脚,并配置 ADC 1 2 模块 。 初始化工作完成后,会采 集开发板在平放状态下加速度传感器的输出值,以 校对工作状态 。 然后 MSP430 进入循环工作状态, 不断地采集加速度传感器的输出值并与平放状态的 传感器输出值做比对,确定开发板的倾斜状态,并 将量化的状态输出到 LED 显示 。 实验中关键是完成 ADC 的使用, ADC 和加速度 传感器的配置代码如下 : 图 7-22 加速度传感器实验软件流程图 voidSetupAccel (void) 1/ 配置 GPIO 216 第二部分修炼篇 11 设置 AO 输入 ACC'PORT SELO 1- ACC X PIN 斗~ ACC Y PIN + ACC Z PIN; ACC PORT SELl 1- ACC X PIN + ACC Y PIN + ACC Z PIN; ACC_PORT_OIR &- -- (ACC_X_PIN + ACC_Y_PIN + ACC_Z_PI N); ACC PWR PORT OIR 1- ACC PWR PIN; 11 使能 ACC POWER ACC PWR PORT OUT 1- ACC PWR PIN; 11 窗足充裕时间在取样前将开发扳放平 __delay_cycles (200000); /1 确定 ENC 被清空 AOCIOCTLO &= -- AOCIOENC; = ADCIOCTLO AOCIOON + ADC10SHT 5; ADCIOCTLl = ADCIOSHS_O + ADCIOSHP + AOCIOCONSEO_O + ADCIOSSEL_O: AOCIOCTL2 = AOCIORES; AOCIOMCTLO = AOCIOSREF 0 + AOCIOINCH 12; 11 清除 AOC12 通道的中断标志位 ADCIOIV = OxOO; ADCIOIE 1= ADCIOIEO; /1 设置加速度传感..测量的阀1i相对差异 ThreshRange[O) - 25; ThreshRange(l) - 50; ThreshRange(2) - 75; ADC 在采样完成后还需要进行一定 的处理,并以 LED 显示出来,这个处理过程由 AccelLoop ( )函数来完成。 void AccelLoop (void) 11 变量初始化 unsigned int AOCTemp - 0; unsigned int temp - 0; WriteCounter - 0; counter - 0; CalValue - CalibrateADC (); while (1) /1 ADC 采样 TakeAOCMeas (); if (ADCResult >- CalValue) { temp - OOWN; AOCTemp - AOCResult. - CalValue; else temp - UP; ADCTemp - CalValue - ADCResult; WriteCounter++; 第7章技术进阶之一:熟练掌握 MSP430单片机 217 i f (Wr主 teCounter > 300) LEDSequence (ADCTemp, temp) ; 最终在主函数中调用以上代码,完成实验 。 void main (void) 1/ 停止看门狗 WDTCTL ~ WDTPW + WDTHOLD; //系统初始化 SystemInit (); /1 开机 LED 闪烁效果 StartUpSequence (); while (1) 1/ 设置加速度传感器 SetupAccel (); 11 循环获取加速度值 AccelLoop (); 7.6 以太网传输实验 7.6.1 预备知识 TCP/IP 串口协议转换器用来将 TCP 网络数据包或 UDP 数据包与 UART 接口数据实现 透明传输的设备 。 它内部集成了 TCP/IP 协议拢,只 需将其当成一个串口设备使用即可,串 口数据将会根据配置透明传输到网络端,应用框图如图 7-23 所示 。 |MCUI UART I 瞅瞅略过要 图 7-23 以太网模块应用框图 在默认情况下,该以太网串口模块只接收指定 IP 和指定端口的目标设备发送过来的数 据,并且模块只往指定的目标位置发送数据;也可 以通过配置,使其不验证来源 lP ,以接 收多个 IP 发送的数据,实现多对一,或者用广播模式实现多对多 。 模块集成 lO/lOOM 自适应以太网接口,串口通信最高波特率高达 230Kbps ,具有 TCP Client 、 UDP , UDP Server 、 TCP Server 工作模式, 4 种工作模式可通过配置实现 。 218 第二部分修炼篇 ( 1 ) TCP Client 模式 模块上电后根据自己的设置主动去连接到 TCP Server 服务器端,然后建立一个长连接, 之后的数据进行透明传输。此模式下, TCP Server 的 IP 需要对模块可见,通过模块所在的 IP 可以直接 PING 通服务器 IP ,服务器端可以是互联网的固定 IP ,也可以是和模块同一个 局域网的内网 IP 。 (2) UDP 模式 模块上电后监听设置的端口,不主动建立连接,当有数据从端口传过来时,转发到串 口,当串口收到数据时,通过网络发送到指定的 IP 和端口。 (3) UDP Se凹er 模式 在普通 UDP 的基础上不验证来源 IP 地址,收到 UDP 数据包后将目标 IP 改为数据来源 IP ,类似 TCP Se凹er 的功能。在此模式下,模块默认记录一个目标 IP ,当串口有数据时, 向记录的 IP 发送数据,同时,模块处于服务器地位,接受网络中发给模块的数据包,并随 时调整目标 IP 为数据来源的 IP ,适合于多 IP 对应模块的工作模式。 (4) TCP Se凹er 模式 模块首先与网关尝试通信,然后监听设置的本机端口,有连接请求时响应并创建连接, 最多可同时存在 4 个连接,串口收到数据后将同时发送给所有与网络模块建立连接的设备。 以太网模块可采用 3.3V 供电,管脚电平与 LaunchPad 的1/0 口电平兼容,二者的管脚 连接如表 7-10 所示。该以太网模块的 RST 管脚用于在使用过程中的复位,该管脚处于上拉 状态,一般情况下不用连接。 CFG 管脚用于使用串口对其进行配置,这里已使用 PC 对其 完成配置故该管脚没有与 MSP430 连接。 模块通信管脚 RST TXD RXD CFG 表 7-10 以太网模块与 LaunchPad 管脚连接 MSP430 连接对应管脚 P1.2 Pl.l 功 能 复位,电平复位 模块数据发送引脚 模块数据接收引脚 配置引脚,先给模块上电,再拉低,进入串口配置模式 使用以太网模块需要配置参数,参数需要根据实际的网络环境来配置,在本实验中网 络模块的配置如下所示: ·模块的 IP 地址: 192.168. 1.7 ·模块的子网掩码: 255.255.255.0 ·模块的默认网关: 192.168. 1.245 ·模块的端口: 9600 ·连接目标 IP: 192.168. 1.1 99 ·连接目标端口: 8243 第7章技术进阶之一:熟练掌握MSP430单片机 219 · 将测试 PC 的 IP 设置成 192.168. 1.1 99 ,软件的监听端口设置成 8243 MSP430 只需要通过 UART 接 口与以太网模块通信即可连接到以太网上 ,这样就方 便地实现了微控制器与以太网的连接 。 将实现一个网络回传的功能 , PC 通过以太网向 MSP430 友送数据 , 当 MS P430 接收到数据后,会自动将接收到的数据反馈回 PC 。 7.6.2 实验目的 实验目的主要有以下 2 点 : · 了解微控制器与以太网连接的基本方法 。 · 掌握 UART 通信接口的使用 。 7.6.3 实验设计 实验由两部分组成,一部分在 MSP430 上完成,另一部分通过 PC 完成 以太网模块的配 置,并在 PC 上通过提供的以太网收发实验软件完成实验 。 MSP430 通过 UART 与以太网棋块通信,所以主要 工 作 是完 成 USCI 外设的 UART 模 式配置以及 UART 回传接收到的数据 。 MSP430 上实现的代码如下: 'include "msp430g2SS3 .h" void main(void) 11 停用看门狗 WDTCTL m WDTPW + WDTHOLD; H 设置 DCO 的频率为 1MHz 8CSCTL1 • CALBCl lMHz; OCOCTL - CALOCO lMHz; 11 启用 Pl. l 管"和 P1. 2 管脚外设功'也, Pl.l 为 RXD, P1 . 2 为 TXD P1SEL • BITl + 8IT2 ; P1SEL2 - 8ITl + BIT2 ; /1 逸jJ USCI 模块时钟为 SMCLK OCAOCTL1 ,- UCSSEL 2; 11 设置 it..为 9600 ,分频 1. 为 lM/9600-10 4.2 UCA08RO - 104; 。CAOBRl - 0; 11 设置频事调整模式,使波特.更精确 UCAOMCTL • UC8RSO; 11 解除复位, USCI 进入正常工作模式 。CAOCTLl 晶国 - UCSNRST; 11 俊. USCI AO 接收中. IE2 ,- UCAORXIE; 11 进入 LPHO 并开启全局中断 __bis_SR_reqister(LPMO_bits + GIE); IIUART.收中断服务函数 'praqma vector-USCIA80RX_VECTOR __interrupt void USCIORX_ISR(void) 220 第二部分修炼篇 //判断 UART 发送缓冲是否准备好 while (! (lFG2&UCAOTXIFG) ) ; //向发送缓冲写入接收到的数据 UCAOTXBUF = UCAORXBOF; 7.7 USB读取实验 7.7.1 预备知识 USB (通用串行总线) 是 用于连接计算机系统和外部设备的标准串行总线,在个人电 脑和移动设备上取得了极为 广 泛的应用 。 USB 标准具备向 下兼容的特性,最新的 US B 规范 为 USB3.0 ,应用最广泛的为 USB2.0 规范 。 USB2.0 标准定义 了 3 个标准数据速率 ,分别是 低速( 1.5MB/s )、全速 (12MB/s) 和高速 ( 480MB/s )。具 备 USB 模块的 MSP430 微控制 器完全兼容 USB2.0 全速规范,集成的 USB 收发器可 以支持 12MB/s 的数据速率 。 标准 USB 接口由 4 条信号线组成, 具 体含义如表 7-11 所 示。 数据信 号 采用 NRZI 编 码,遇 。则翻 转信号电平;遇 l 则不翻转信号 电平,连续 6 个 1 则插人一个 0 。 编码后 的信 号以差分的方式串行发送,数据同相端为 D+ ,反相端为 D- 。 褒 7-11 标准 USB 接口 触点 2 功能 Vøus ( 4.75 - 5.25 V) 0- ←民3 白 3 D+ 4 32 1 Ty p e A Ty阅 B 4 GND 本实验将使用 MSP430-EXP430F5529 开发极作为实验平台 。 开发板以 具备 USB 模块 的 MSP430F5529 微控制器为核心,提供了 实 验所需的 USB 接口和 MicroSD 卡接口 。 实验 通过 MSP430 的 USB 接口读写 SD 卡 , MSP430 和 SD 结合起来构成 "U 盘"功能 。 MSP430F5529 的片上 USB 模块结构如图 7-24 所示 , USB 模块 主要是由电源系统 、 收 发器、锁相环、 USB 引擎、时间戳发生器以及内存缓冲 区 组成 。 USB 模块具备独立的电源 系统,可以使用 USB 接口提供的电源为 MSP430 以及其他外设供电 。 5V 的 USB 电源通 过 MSP430 的 VBUS 管脚接至内部 3.3V 的 LDO ,稳压 至 3.3V 的电源通过 MSP430 的 VUSB 管脚输出 。 该 LDO 还具备电流过载保护的功能,过载电流最小值为 60mA o 6DmA 的电流 供 MSP430 使用,还有很大的冗余,所以外部电路也能将 VUSB 作为电源使用,简化了以 MSP4 30 为核心的 USB 通信应用中的电糠设计 。 3.3V 的电源在内部直接供 USB 收发器使 用,锁相环所使用的 1.8V 电源则用另外一个 LDO 进一步降压获得 。 第7章技术进阶之一:熟练掌握MSP430单片机 221 System RAM Vu皿 的3υs PUR 。+ 。- XT l clock source X'f2 clock source TS 岛1 USB Buffer RAM 图 7-24 MSP430 片上 USB 模块结构框困 收发器负责收发 USB 差分信号, 0+ 和 D - 分别是 USB 差分信号的同相和反相数据管 脚, PUR 则 是用于标示 MSP430 接口为全应接口的管脚 。 US B 的金边设备在与主机连接的 时候需要将 0+ 拉高以便于主机将设备识别为全速设备 。 PUR 则可以通过电阻连接至 D+ 实 现这一功能 。 USB 引擎完成接口转换、内存管理以及协议的控制 。 US B 模块具备 2阳 的缓 冲区,这 2KB 的缓冲区在 MSP430 内部的 RAM 中统一编址 。 如果 MSP430 不启用 USB 模 块,这部分 RAM 则作为普通的 RAM 使用 。 在 MSP43 0 的介绍中对于 RAM 的描述出现例 如何+2) KB 的情况,其中的 2KB 就是指的 USB 使用的缓冲区 。 在 MSP430-EXP430F5529 开发板上, USB 接口的连接电路如阁 7-25 所示 。在 Vous 线上串接了肖特基的二极管避免电流倒滥 。 差分数据线的 DP 和 DM 使 用了 保护器件 TP02EOOJ , 可对信号高低电平钳位,井有静电保护功能 。 DP 管脚 上拉 , 主 机与 MSP430 通过 US B 相连时,会将该设备识别为金边 USB 设备。 SD 卡是目前通用的便携存储设备 ,其接口支持 3 种传输模式: SPI 模式 、 l 位 SD 模式 、 4 位 SD 模式 。 在实验中采用 SPI 模式,其接口如图 7 -26 所示 。 SD 卡连接到 MSP430 的硬件 SPI 外设上,管脚对应关系为: SD CS ( P3.7 )、 SIMO ( P4.1/ PM UCBlSlMO )、 SCLK ( P4.3/PM UCBICLK ), SOMI ( P4.2/PM UCBlSOMI )。 MSP430 单片机上 USB 的开 发可以利用 TI 提供的 USB 开发资源库和工具,该工具可 以从 Tl 官方网站下载( http ://www.tì.com.cnltoollcn/msp430usbdevpack)。 该 API 库 支持 222 第二部分修炼篇 三种最常见的设备类型:通信设备类 (CDC) 、人机接口设备类 (HID )和大容量存储类 (MSC) 。 句' h E 匀 , 哼 R-RMe-sMD-0A3D-n-Er-D+ 句 ,h , USB BSL 图 7-25 USB 接口电路 Vcc R6 图 7-26 SD 卡连接图 GND 所有的通信协议都是由 API 自动处理,用户应用程序与 API 之间通过简单的接口通信。 应用程序开发之前,必须通过 MSP430 USB 描述符工具配置堆械和 USB 设备描述符。此 外在这个过程中,没有必要修改 API 原代 码。在编程环境中, API 被设计成自动适应 应用程序 选定设备。代码保持不变,但需选择正确的 事务处理程序 应用层 设备。 3 类 USB 设备( CDC/HID/MSC )共 用一个 USB 分层,协议横空间分为 API 空 间和应用程序空间。协议钱组织结构如图 7-27 所示。 ~~ I ~j 坚 l MSP430 头文件 API 层 USBAPI 在 API 的使用过程中需要用到 MSP430 图 7-27 MSP430 USB API 协议横组织 第7章技术进阶之一:熟练掌握 MSP430单片机 223 的两个功能: USB 模块(及其相关引脚)和一个 DMA 通道。当 USB 模块启用时,应用程 序必须避免这些资源被访问。在 MSC 模式 API 中涉及一些关键数据结构和函数,下面分别 介绍。 ( 1 ) USBMSC RWbuf Info 结构体定义 USBMSC RWbuf Info 结构体定义见表 7-12 。 类型 BYTE BYTE DWORD BYTE BYTE* BYTE 表 7-12 USBMSC RWbuf Info 结构体定义 名称 lun operatlOn lba lbCount bufferAddr retumCode 数据流向 从 API 到应用程序 从应用程序到 API 描述 正在操作的逻辑单兀,从 0 开始 操作的类型 kUSBMSC READ 或 kUSBMSC WRITE , NULL 表示没有操作 需要读写的逻辑块地址 请求块的数量 应用程序需要数据交换的地址 用户程序处理后填充的处理结果,调用 USBMSC bufferProcessed 处理结果 ( 2) USBMSC mediaInfoStr 结构体定义 USBMSC mediaInfoStr 结构体定义见表 7-13 。 类型 BYTE BYTE BYTE DWORD DWORD 表 7-丁 3 USBMSC_medialnfoStr 结构体定义 命名 mediaPresent mediaChanged writeProtected lastBlockLba bytesPerBlock 描述 表示磁盘是否存在,非零表示存在,零表示不存在 表示磁盘是否改变 表示磁盘是否写保护,非零写保护,零则没有写保护 磁盘最后一块的 LBA (即为磁盘大小) 磁盘上每块大小的字节数 (FAT 通常是 512 ) ( 3 ) USBMSC_registerBuflnfo 主机和文件系统之间的数据交换,需要一个足以容纳一个完整块的内存缓冲区。 FAT 文件系统一般为 512Bgte 的倍数。因为这个可能需要较多的内存,所以 API 将分配此空间 的权力交给应用程序,由应用程序分配,并通过注册的方式给 API 。 ( 4) USBMSC fetchInfoStruct API 分配结构 USBMSC RWBuf Info 来描述任何它需要应用程序的一个处理动作,应 用程序需要该结构的指针,以便它可以访问到内容。 ( 5 ) USBMSC_updateMediaInfo 此函数向 API 提供磁盘信息,当从主机接收到任何相关的 SCSI 命令, API 可以根据此 信息作出适当的响应。在如下两种情况下必须调用: 1 )在初始化 USB 时,即调用 USB connect 之前。 2 )如果是可移动磁盘,当磁盘有任何改变时,它必须尽快通知 API 。 224 第二部分修炼篇 ( 6) USBMSC_poll 应用程序必须使用 USBMSC_poll 对任何已接收到的 SCSI 命令进行处理。在 USBMSC_poll 被调用前,任 何 SCSI 命令将不被处理,同时 r-- 一---一一---了一--一一---一-­ API API 也不会通过中断方式告知 应用程序已收到命令,而需要 应用程序定期调用 USBMSC poll 轮询。 用户在设计程序时可以使 用低功耗模式,也可以简单使 用在主函数中反复轮询的模式。 I MCU 但是要注意轮询的频率,轮询 过于频繁,则会导致较低的传 输效率;而如果轮询时间过长, 则会导致主机发生超时错误。 ( 7 )收到 host 的 SCSI 指令 主函数开始运行 的处理 MSP430 收到主机的 SCSI 指令后处理流程如图 7-28 所示。 7.7.2 实验目的 实验目的主要有以下 3 点: API更改状态寄存器确 保退出中断处理函数 CPU 能正常工作 ·了解 USB 技术的基本 概念。 ·掌握 MSP430 上 USB 外 设的使用。 ·掌握 SD 卡的读写时序。 7.7.3 实验设计 图 7-28 USB 收到主机指令处理流程 实验将实现电脑主机与 MSP430 的 USB 连接,连接之后主机可以像 U 盘一样读写 SD 卡。实验连接图如图 7-29 所示。主机通过 USB 电缆与 MSP430 的全速 USB 接口做数据通 信,调试则通过板载 USB 调试器完成。 程序整体结构分为两个部分,一部分是系统初始化,主要是对时钟、电源、1/0 口等的 第7章技术进阶之一:熟练掌握MSP430单片饥 225 设置,开发板的外设较多,在初始化时将 MCU 不用的 GPIO 关闭;另 一部分就是我们试验 中用到 USB 读取,主要是对 USB 控制器和 SD 卡的操作,对 USB 控制器的操作直接使用 TI USB 库函数,而对 SD 卡模块则主要提供读写函数供 USB 库调用,以及一些 SD 卡初始 化操作,其整体流程如图 7-30 所示 。 USB Debug 图 7-29 实验连接图 图 7-30 虚线框中的处理过程调用 USB 开发库完成,对应于下面的 MassStorageO 函数 。 void MassStorage(void) 11 在 LCD 上显示提示图标,可删减 Dogs102K6_clearScreen(); Dogs102K6_stringDraw(O. O. "USB Mass Storage" • DOGS102K6_DRAW_NORMAL); Dogs102K6_imageDraw(usbDrive. 1. 0); 11 关闭品振出错非房蔽中断 SFRIE1 伊- OFIEi 11 初始化磁盘 disk initialize(O)i 11 便能品援出错非屏蔽中断 SFRIE1 Is OFIE; IIUSB 模块时钟初始化 飞 ClockUSB(); 11 初始化 USB 模块 USB init () ; 226 第二部分修炼篇 与 USB读取相关 F ……………………………………………· 图 7-30 USB 读写 软件流程图 //使能 USB 事件 USB setEnabledEvents(kUSB allUsbEvents); //向 USB 注册必要的碰鑫信息 msc Init (); 4 .~ //如果在程序启动时已经连接 1 USB,就不会有 USB handleVbusOnEvent u 如果主机已经存在,我们'要检查它,然后手动连接 i f (USB connectionlnfo( ) 晶 kUSB vbusPresent) if (USB_enable() -- kUSB_succeed) USB_reset (); USB_connect () ; while (l) 227 第7章技术进阶之一:熟练掌握MSP4301在片机 //循环检查 USB 库维持的状态机状态 switch (USB connectionState()) //MSP430 的 USB 接口与主机来连接 case ST USB DISCONNECTED: //进入低功耗 LPM3 状态,直到吨。s 上电事伶 __bis_SR_register(LPM3_bits + GIE); NOP() ; break; //MSP430 与主机连接后 V时已供电, PUR 还未供电 case ST USB CONNECTED NO ENUM: break; //MSP430 的 USB 接口与主机已连接 case ST ENUM ACTlVE: //调用库函数轮询主机命令 msc_Loop() ; break; //MSP430 进入挂起状态 case ST ENUM SUSPENDED: Board ledOff(LED1); //进入低功耗 LPM3 状态,直到 V..,S 关闭事件或者被要求恢复 一_bis_SR_register(LPM3_bits + GIE); break; //MSP430 上电后处于初始化状态 case ST ENUM IN PROGRESS: break: //MSP430 出错 case ST ERROR: break; default : ; 对应于系统的流程框图,最终在 main 函数中按照以下代码,调用各子函数完成系统 功能 。 void main(void) //对比皮 uint8 t contrast - 11; //亮度 uint8_t brightness - 11; //停止看门掬 WDTCTL - WDTPW + WDTHOLD; //基本 GPIO 初始化 Board init () ; /1 设置核心电压使系统工作在最大速度下 SetVCore(3); 11 使用 32.768kHz 品援 228 第二部分修炼篇 LFXT_Start(XTIORlVE_O); 11 设置系统时钟至 (25MHz) Init FLL Settle(25000 , 762); 11 设置振荡器故障中断 SFRIFGl - 0; SFRIEl 1= OFIE; 11 使能会局中断 __enable_interrupt() ; 11 初始化 LCD Dogsl02x6_init(); Dogs102x6_backlightlnit{) ; 11 通过 PMM 调节液晶背光亮度 DogsI02x6_setBacklight{brightness); Dogs102x6_setContrast(contrast); 11 进入大容量存储模式 MassStorage(); 7.8 DIY一个便携电视机 这 一节我们将设计一个具有完整功能的应用系统,实现一台便携式电视播放器的开发 与设计,该播放器配合机顶盒可以实现电视视频的播放,同时具有音频功放 。 可以通过有 线电视的遥控器实现各种功能的调节 。 本项目是一个简单而又充满兴趣的电子制作,适合单片机刚刚入门的初 学者学习与动 手练习,主要让读者了解嵌入式电子产品的开发流程,特别是单片机应用系统的 开发流程, 同时,通过这个小设计,读者在制作过程中可以认识和熟悉常用的 IIC 总线, SPI 总线的驱 动方式,学会对照器件手册中的参数、时序图来 将器件应用到自己的项目中来 。 同时对一 些基本模块的硬件原理和软件进行了详细介绍,旨在带领初学者入门 。 7 .8 .1 预备知识 传统的电视通过无线电波传输,使用天线接收并解调后显示,现在的电视接收机都采 用有线传输视频信号的方式,接收端采用机顶盒进行信号的接收和解调,而且现已多数采 用数字电视信号进行有线传输,所以接收后的图像更加清晰。当前普遍使用的机顶盒都配 置了一个复合视频 (CVBS) 信号输出的端日,该复合视频信号 是一 种包含 了视频所有信 息的模拟信号 。 对于此信号可以采用专门的数字解码器进行色度和亮度信号的分离,并转 换成数字信号,按照视频标准 ITU-R BT. 656 或者 ITU-R BT.601 输 出到显示设备上去 。 该 信号是一种标准的数字视频信号, ITU-R BT.601 为同步信号分离信号, ITU-R BT.656 为同 步信号内嵌信号,关于这两种视频信号的格式标准可以参照相关的标准文件,但是作为初 学者可以不关注这两种视频信号格式的具体含义 。 机顶盒可以直接输出左右声道音频信号, 该信号只要送到我们设计的音频功放模块上即可驱动扬声器或者耳机发出 声音。系统的方 第7章技术进阶之一:熟练掌握 MSP430单片机 229 框原理图如图 7-31 所示。 7.8.2 硬件设计 音频信 号输入 1.主控电路 主控电路是整个系统的设计核心,对视频通道、 人机操作界面进行控制,这里选用了 MSP430F149 (或者其管脚完全能够兼容 MSP430F249 芯片)作 为主控芯片,该芯片具有较多的控制1/0 口,便于 进行功能的扩展,虽然本实例用到的功能模块不多, 图 7-31 便携式电视机方框原理图 感兴趣的读者可以在此基础上继续发挥,扩展更多的功能模块或者改进当前的电路,在本 章节的最后也给出几个功能扩展的方向。感兴趣的读者可以继续做下去。主控电路主要由 MSP430F149 单片机及其时钟电路、复位电路、 JTAG 调试接口等组成, MSP430F149 具有 内部 RC 振荡器来作为 CPU 的时钟信号,所以在对时钟精度要求不高时可以不使用外部时 钟,这里为了扩展其他功能,所以预留了外部时钟,软件上并没有启动该晶振。原理图如 图 7-32 所示。 2. 液晶显示驱动电路 人机界面中有一个 320 x 240 点阵的彩色液晶显示模块 LQ035NC111 ,该液晶显示模 块支持多种视频数据输入方式,可以方便地和视频界面芯片接口实现视频界面芯片输出数 据的显示。同时微控制器可以通过 SPI 口配置液晶的参数初始化液晶和控制液晶的对比度、 色度等参数。液晶模块使用 19.8V 的背光电源, 3.3V 的工作电源,与下面所选择的视频芯 片的电平兼容,可以直接连接。 LQ035NCll1 的管脚定义如表 7-14 所示。 管脚 名称 LED… 2 LED3 LED+ 4 LED+ 5 NC 6 NC 7 NC 8 /RESET 9 SPENA 10 SPCLK 11 SPDAT 12 BO 表 7-14 液晶显示模块 LQ035NC111 管脚定义 输入/输出 输入 输入 输入 输入 输入 输入 输入 输入 输入 功能 背光电源的地 背光电源的地 19.8V 背光电源 19.8V 背光电源 无连接 无连接 无连接 模块复位管脚 SPl 接口的使能信号 SPl 接口的时钟信号 SPl 接口的数据信号 蓝色数据 BITO 管脚 名称 13 Bl 14 B2 15 B3 16 B4 17 B5 18 B6 19 B7 20 00 21 01 22 02 23 03 24 04 输入/输出 输入 输入 输入 输入 输入 输入 输入 输入 输入 输入 输入 输入 功能 蓝色数据BlTl 蓝色数据 BIT2 蓝色数据 BIT3 蓝色数据 BIT4 蓝色数据 BIT5 蓝色数据 BIT6 蓝色数据 BIT7 绿色数据 BITO 绿色数据 BITl 绿色数据 BIT2 绿色数据 BIT3 绿色数据 BIT4 230 第二部分修炼篇 管脚 名称 25 G5 26 G6 27 G7 28 RO 29 R1 30 R2 31 R3 32 R4 33 R5 34 R6 35 R7 36 HSYNC 37 VSYNC 38 DCLK 39 NC 输入/输出 输入 输入 输入 输入 输入 输入 输入 输入 输入 输入 输入 输入 输入 输入 功能 绿色数据 BIT5 绿色数据 BIT6 绿色数据 BIT7 红色数据 BITO 红色数据 BIT1 红色数据 BIT2 红色数据 BIT3 红色数据 BIT4 红色数据 BIT5 红色数据 BIT6 红色数据 BIT7 行同步信号 场同步信号 数据时钟 无连接 管脚 名称 40 NC 41 Vcc 42 Vcc 43 NC 44 NC 45 NC 46 NC 47 NC 48 SEL2 49 SEL1 50 SELO 51 NC 52 DE 53 DGND 54 AVSS 输入/输出 输入 输入 输入 输入 输入 输入 输入 输入 (续) 功能 无连接 电源 (3.0 ~ 3.6V) 电源 (3.0 ~ 3.6V) 无连接 无连接 无连接 元连接 元连接 选择输入的数据格式 选择输入的数据格式 选择输入的数据格式 无连接 使能数据输入 数字地 模拟地 该液晶的实物如图 7-33 所示,采用 FPC 线和 PCB 相连,可以使用焊在 PCB 上的 FPC 连接座来连接液晶的 FPC 数据线,在设计 PCB 时需要考虑、好排线座的位置,让液晶能够放 在 PCB 的适当位置。 SEL[2...0] 用于液晶模块接收视频数据格式的选择,各种连接方式对应的数据格式可以 参照表 7-13 ,系统采用 27MHz 的 YUV 模式 B 数据格式,该状态可以直接显示视频解码芯 片 TVP5150AMl 输出对应格式的数据。 SEL2 。 。 。 。 表 7-15 液晶模块接收视频各种连接方式对应的数据格式 SEL1 。 。 。 。 SELO 。 。 。 。 鼓摇格式 并行 RGB 数据格式 串行 RGB 数据格式 CCIR 656 数据格式 (640RGB) CCIR 656 数据格式 (720RGB) YUV 模式 A 数据格式( Cr-予 Cb-Y) YUV 模式 A 数据格式( Cr-予 Cb-Y) YUV 模式 B 数据格式( Cb-Y-Cr-Y ) YUV 模式 B 数据格式( Cb-1ιCr-Y) 操作频率 6.5MHz 19.5MHz 24.54MHz 27MHz 24.54MHz 27MHz 27MHz 24.54MHz 按照手册的要求,采用 ITU-R BT656 或者 ITU-R BT601 传输数据时,只用到数据线的 R[0...7] 来传输视频数据, B[0...7] 和 G[0...7] 接地防止窜入干扰,具体连接方式见图 7-34 。 第7章 技术迸阶之一 : 熟练掌握 MSP430单片机 231 王一一 ••11 I O.luF ACl9 工 AR12 22K 5|gizii|i > QZQOZO mmh ← 的 " 〉 $IG I ~I~I~ I ~le与 I~I~号 I:::;I~I 叫出 I;;;I~I~ AU4 32222 3322 豆 ZEgggE MSP430F249 销 3.3V DVCC P6.3 ~:::. 25 x ~ P5.4 嗣 R-wP5.3 一 的 P6.4 P6.5 P6.6 P6.7 P5.2 P5.l P5.0 P4.7 一 "一"一-m旧一" VREF P4.6 位 X剧 XOUT VeREF VeREFPl.O PI.1 P4.S P4.4 P4.3 P4.2 P4.l 一创ω一约 一双 一 刀u P4.0 m P 1.2 P3.7 - M3 P3~ k Pl.S "l唱机。~<"'i~叶响唱机。~<"if"l1吨P3.S υ ø:ø:ø:S!S!S!S!S!r;!豆豆豆~~~~ - M 立 I~ I ~I~IÑ I 只 I~I~ I ~ I 剧 目 1 ~1~ l gl;;;1 以 M M 据| 吕I~ ~I~ I ~I~ AJ4 JTAG 图 7-32 电视机主控电路 232 第二部分修炼篇 AJI LQ03SNCIII 因 7-33 显示模块 LQ035NClll LQ035NCll1 20V 困 7-34 电视机液晶破示驱动电路 3. 视频通巡 视频解码芯片选用 TI 的 TVP5150AM 1 ,该芯片为低功耗、可配置的集成视频解码芯 片,可以输入两路复合芯片,支持对 NTSC/PAL/SECAM 等制式的电视信号解码,通过 一 个 IIC 总线连接主控 CPU o TVP5150AMl 输出的视频流直接连接到液品屏 LQ035NClll 上, 该液晶屏的驱动芯片 HX8238A ,该芯片支持 ITU -R BT.656 和 ITU - R BT.601 格式的视频信 号的显示 。 电路中 AJ2 , AJ4 是两路 CVBS 复合模拟视频信号的输入接口,当前普遍使用的 CVBS 复合视频信号的电压最大幅度为1.24V ,而视频芯片 TVP5150AMl 的输入最大电 Æ 为 O.75V ,所以为了保护输入端口,采用两个 37.40 的电阻来分压,而这两个 37 .40 的电阻和 是 74.80 , 正好可以满足 750 的输入电阻的 要求,使输入信号阻抗匹配 。 TVP5150AMI 的 233 第7意 技术进阶之一:熟练掌握 MSP430单片机 第 11 管脚 YOUT7月2CSEL 不仅用 于视频数据的传送 ,而且用于芯片 IJC 总线通信地址的选 择,此时如果上拉到高电平,则该芯片的 nc 总线地址为 OxBA ,如 果下拉到低电平则该芯 片的 IIC 总线地址为 OxB8 。 这里通过电阻上拉的电源电压上,即芯片的地址为 OxBA 。 其 他可以参照 TVP5150AMl 的 芯片资料中应用实例的连接方法 。 电路原理如图 7-35 所示 。 4. 音频通道 音频通道的功能是对音频信号进行功率放大并驱动扬声器发出声音,音频通道输入后 通过电容搞合到功率放大电路,功率放大电路采用 LM386 芯片,这是一 款外围电路简单的 功放芯片,而且比较常见,系统采用了两片 LM386 芯片来分别放大左右声道的信号 。 电路 原理如图 7-36 所示 。 3.JV A l.8V M A P AP m R A u川 酌 凶 - X ' A T W N 刷刷 B S 2 M川 四 0Q z 0Z g -〉 〈 O〈 J - GmBm Kzυ m班 回 凶8 K H回 国 Z O 恤A 呐 ← d x o 国b F d E 6 。 〉 〈 、 口 口 。 〉 U Z〉 Z的 m 可F 5 w阻 , ‘ J Z E U 的 。 。 〉 白 。 - 8 F S 。 、F Z b 。 〉 D。 ‘F 〉 。 〉 m毗 D∞ m m ω ∞ mm…边 m m AUJ TVPSlSO J.3V 困 7-35 电视机视频通道电路 旦旦4 AC f lO 图 7-36 音颇通道电路 LM386 芯片的增益由 1 脚和 8 脚之间所接的电容大小来决定的,如果 l 脚和 8 脚之间 不接电容,则放大倍数为 20 倍,电容增加,放大倍数增 大 。 实际制作中可以根据所选择的 234 第二部分修炼篇 扬声器型号来进行测试加多大的电容比较合适 。 笔者制作时使用的扬声器如图 7-37 所示, 无须电容就可以满足收听的要求。 图 7-37 扬声器 5. 电源电路 系统需要 20V 的电源作为液晶显示器的背光电源, 5V 作为功放电路的电源, 3.3V 为 CPU 的和其附加电路供电, 1. 8V 为视频芯片供电,系统为了提高电源的效率,同时简化系 统电源电路的设计方案,所以采用了 20V 的电源电压输人 。 由于 20V 转换成 5V 采用线性 电源芯片效率会低于 25% ,所以系统先通过开关电源芯片把电压转换成 5V ,开关电源的效 率要比线性电源高很多,再使用线性电源芯片将 5V 转换成 3.3V 输出, 3 .3 V 转换成1. 8V 输出 。具体实现电路见图 7-38 。 AJ5 20V AU5 LM2596S• 5.0 5.0V AUl LM lI17-3.3 AU2 LM lI17-1.8 图 7-38 电视机电源电路 7.8.3 软件设计 1. 软件流程因 此版本的软件只要完成对视频解码芯片 TVP5150AMl 和液晶显示器 LQ035NClll 的初 始化即可使系统正常工作,系统初始化流程图如图 7-39 所示。 第7章技术进阶之一:熟练掌握 MSP430单片机 235 2. TPV5150 的驱动 TVP5150 采用 IIC 总线和 CPU 进行通信, IIC 总线采用了两根线来完成发送和接收数 据,一根时钟线 SCL ,还有一根数据线 SDA ,通过串行的方式传输数据,数据的各个 Bit 位在 SDA 上传输,先传输字节的高位,后传输字节的低位, SCL 用来同步数据传输, IIC 的时序如图 7-40 所示。 图 7-39 系统初始化流程图 SDA --'f I I 、 SCL l. r Srto,p C:::T飞-I II f皿-飞 r一、 二7飞J忖 L ..J 图 7-40 IIC 总线通信时序图 从芯片子册的时序图上看,在通信停止后,即总线空闲的时候 SDA 和 SCL 都处于高电 平状态。在 SCL 为高电平期间, SDA 输出一个低电平来启动一次通信,在时钟信号为高电 平期间保证 SDA 的线上为稳定的数据状态,或者在 SCL 为高电平期间读取 SDA 总线的状 态得到 SDA 上的数据,每传送完一个字节,接收数据的设备发一个应答信号到总线上,即 在 SCL 为低电平期间 SDA 为稳定的低电平来确认数据接收成功。 236 第二部分修炼篇 单片机写 TVP5150 的内部寄存器的流程如图 7-41 所示,主机为单片机,从机为 TVP5150AMl 。 |告轧机 } 情急 (主机) 陈志机) 口Il 5 4 3 D 06 02 0 × 叫 悔午从机) 川 斗 隘午从机 ) 川 叫 陆也L ) 门 阁 7-41 TVP5150 写流程 MSP430F249 采用普通 1/0 口来模拟 IIC 总线的时序实现和 TVP5150AM1 的通信 。 在 程序编写时为了修改和阅读方便,将常用的管脚操作定义 为宏的形式,代码如下所示: // TVP SDA 'detine TVP SDA IN 'define TVP SDA OUT 'detine TVP SDA SET 'define TVP SDA CLR 'define TVP SDA TST 11 TVP SCL 'detine TVP SCL lN 'detine TVP SCL OUT 'define T'JP SCL SET 'define TVP SCL CLR 'define TVP SCL TST /1 TVP RST 'define TVP RST OUT 'define TVP RST SET 'define TVP RST CLR P3DIR 伊- 81 '1'6 P3D1R 1- 81 '1' 6 P30UT 1" 81T6 P30UT 归- 81'1'6 P31N & 81T6 • P3D1R -81T5 P3D1R 1'"' 81T5 P30UT 1- 81T5 P30UT 晶'"' - 81T5 P31N & 81'1' 5 P5DIR &- - 81'1'5 P50UT 1- 81T5 1?50UT 伊 -8工'1'5 1/ 输入 11 销出 11 直位 11 消~ 11 读取 11 输入 11 输出 1/ 置锥 11 溃~ 11 读取 11 输出 11 里位 11 清'事 第7章技术进阶之一:熟练掌握MSP430单片机 237 通过软件模块 IIC 总线的基本操作时序的函数如下: / * ..…****'**禽禽禽舍禽会禽禽***食食禽禽食禽禽*禽. .食禽 *食禽.,,*会*金食禽食禽舍食舍禽会.*.食..禽台食*..食食彝会*禽食食食食食 *··· --a‘ c民 名 称 口 C s υ ·· 总 功入出 能口口 启数数 .动 -I无 线 通 信 ?4 盛无 , 参 …**…***.*******~****禽,黄****..*****禽***********************************/ '-u r vo a VO'{lAU 'A ' 且 户 」 na ( 伽 L -l d } vv-- -- ,..mA PE-D"pa 户、 E户』 nu - n m τ u OHOU咱& H.U,., 币 企 TVP 501\ 5ET; TVP 5CL 5ET; TVP S01\ CLR; TVP_5CL_CLR; /1 在 5CL 为南电平时 501\由 1 变为 0 开始总线 1/ 错位 IlC 总钱,准备发送戒接收费t 据 •••• s 口 1*.名 ..称 . 功能 - 结 入 口 1 数 出 口 川由‘*****舍*********会******.**********************食'舍****舍**舍********** · · 户 』 曲 ' 咱 •‘ .οc •. P 总 无‘ υ 线通 馆 数 盛 元 , , …...……食台..食禽*..禽禽禽******…*****食舍禽金舍**..舍****会*****.**……*禽*******/ v。 t,,d. V·'-EF· U' GM舍 - ony{ v o-ld} ­ ‘ TVP 50A OUT; TVP_50A_CLR; -- -- WP‘。‘WcdF』nu nLa ACM,、 ETET " 11 在 5CL 为高电平时 50A 由 0 变为 1 结束总统 1** 禽****…· 禽*…********………*** ************ ***……****** ** 禽舍禽禽**…· ·名称 : l IC Set Ack () *功. : 向总钱发送一个确认馆号 ·入口多数: set ack -确认类型 OxOO -确认 OXOl -不确认 . 出口参.:无 *** void IIC_5et_Ack{unsigned char set_Ack) { s--- n TVu P, -门 剖 飞 · ­ W · h Wg n r 5e0+』户 Ac-a L e0e0sML 川町 1-s; -cWW 』 户 』 m nuAnu-Q AP-"TTMR M F 』 11 501\ 设置为输出 11 不确认 11 确认 f ………………禽舍************..****禽…*…………·………*舍舍** ***** ·名称: 口C Get Ack () · 功. : }Å""楼故-个确认倍' *入口...:无 ·出口参徽: get_ack -所接收到的确认失望 OxOO -确认 OXOl 阳不确认 238 第二部分修炼篇 **********************食食*******台舍*舍***********************食禽食食*食食费********/ unsigned char IIC_Get_ACk(void) { unsigned char get_ack; TVP SDA IN; TVP SDA SET; TVP SCL SET; if(TVP_SDA_TST) { get_ack ~ 1; } else ( get_ack ~ 0; I TVP SCL CLR; return(get_ack); // SDA 输入 // 8 个 Bit 发送完后将放数据线,准备接收应答位 //从设备无应筝,说明器件损坏、忙状态或者不存在 //从设备正确应答 /*禽舍禽禽********************************会********************食*****.****1( *禽*** *名称: IIC_Write_8bits () · 功能:通过 IIC 总线发送 8 个 Bit 的数据 * 入口参数: dat- 发送的数据 *出口参数:无 *************食禽* ** * * **食食禽食************.***************食* **局袭冥食食川 .--,,******/ void IIC_Write_8bits(unsigned char dat) { unsigned char i; TVP SDA OUT; / / SDA 输出 for(i - 8; i; i--) if(dat & Ox80) else TVP_SCL_SET; dat <<= 1 ; TVP_SCL_CLR; {TVP SDA SET; I //先发送最高位 MSB ( TVP_SDA_CLR; I // SCL 为高电平时,保持数据稳定 // SCL 为低电平时,改变数据 / * 禽 舍 禽 *.* ** * * ** *********** * .*********食********* ** 舍 食 费******** * *‘*舍命*舍****.舍*** * 名称 : IIC Read 8bits() *功能 : 通过 IIC 总线接收 8 个 Bit 的数锯 舍 入口参数 : 无 *出口参数 : dat- 接收到的数据 食 舍 * * ******禽* * ********************禽禽舍*****禽禽舍**禽舍******************.食食食****/ unsigned char IIC_Read_8bits(void) unsigned char i , dat; TVP SDA IN; //输入 dat 嚣的 //初始化变量 for(i = 8; i; i --) TVP SCL SET; dat <<- 1; //先收到最高位 i f(TVP SDA TST) dat++; TVP SCL CLR: return(dat); 第 7j脏技术进阶之一:熟练掌握MSP430尊片机 239 囱上面的基本函数,按照 TVP5150AMl 手册上的读写数据的步骤可以组成其读写函数 。 写一个寄存器函数具体代码如下: / .舍* **..台 . .... 食.*.…*…** . *** *舍*. "' .. * ....禽....… . *.** *.........***...* ** * * * * * * * ·名称: IIC_Nrite_Byte () ·功.:通过 IIC 总线~量-个寄存器 ·入口,数: dev--设备地址 , reg-一寄存暴地址 , 也 t-一配置的值 ·出口.1::无 ……..*食舍食…***'*俞禽**.***禽禽....***....**..舍*…***.**'*‘·食..*.*.**………***禽/ void. IIC_Write_Byte(unsigned char dev, unsigned char reg, unsigned char datl c-c-c-c--c-c-c .,.,., I.,品,.,.•,A•I•A',.,.,.,品•C-•••A'ASwWWGz tGaie treAe-t-z'-A )-A t‘。。‘Ramu--noob ce ;huhuhu,‘,‘t-e、,‘,a-AtaA•-i•zt且,'ι··''• 伽-•tc• •s -e o { -p d tc s e { v }} z s e { q } d a} t ‘, ' 4 GS A H · , .、 , /1 开始总线 //写入设备地址 11 撞收应答位 11 写入..存辱地址 11 接收应答位 11 写入数据 11 接收应答位 ,, . ' 1/ 结束总线 实现了 nc 总线时序的模拟就可以对 TVP5150 进行配置了,调节图像的各种参数 。 TVP5150 的内部控制寄存器比较多,这里只介绍我们用到的几个 。 其他的可以不去配置 。 地址为 08H 的亮度处理 2 号寄存器 。 通过此寄存器的 BIT3 和 BIT2 可以设置图像的锐 度,图像的锐度设觉得荫,人眼所感觉到的消晰度也会提升,但是过高的锐度也会导致图 像失真 。 此寄存器将锐度划分成 4 个等级, O( 锐度寄存器值为: OOB) 、 0 . 5( 锐度寄存器值为: 01B) 、 I( 锐度寄存器值为: 10B) 、 2( 锐皮寄存器值为: 11 时,在初始化时将锐度配置为 I 比较合适 。 地址为 09H 的亮度控制寄存器 。 该寄存器用于控制图像的亮度,将亮度划分为 O""'_ 255 的值, 00 日 最暗, FFH 最亮,默认配置为 80H 。 地址为 OAH 的色彩饱和度控制寄存器 。 该寄存器用于控制图像色彰的饱和度,将饱和 度划分为 O ""'_ 255 的值, 00日最暗, FFH 最亮,默认配置为 80日 。 OBH 的色度控制寄存器用于调节图像的色调,色调可以在 - 180 0,...._ + 180 。 之间调节, 采用补码的形式表示大小,默认值为 00 (0000 0000酌 , 0111 lI 11B 对应 + 1 800 , 1000 0000 对应 - 1800 。 3. LQ035NC111 的驱动 LQ035NC 1l 1 已经通过硬件管脚( SEL{2 … 0]) 配置了其输人的视颜流格式,图像相关 的参数可以通过 TVP5150 调节,所以软件上没有对 LQ035NCl l1 进行配置,只是对相关控 制 1/0 口进行初始化,并且对液晶模块进行复位。 LQ035NC ll l 与单片机通过 SPI 总线进行 通信,通信方式可以参考其内部的液晶驱动芯片 HX8238A 的资料 。 SPI 通信通常有 4 根通 信线, 一 根是片选信号, 主 机来选择要通信的 SPI 从机, 一根是时钟线,用来同步数据的 240 第二部分修炼篇 传输,还有两根分别用来发送和接收数据, LQ035NC 1l 1 液晶模块只引出了驱动芯片的片 选信号 SPENA ,时钟线 SPCK ,数据接收线 SPDA , SPI 通信的时序如图 7-42 所示。 SPENA 白白 z_ SPCK ___ ~ ~ ~ ~ I!._ ?._ ~ 9_ l:.!:!... ~ 1!_ 1l_ 1i.,. l2._ 1~ 12._ 1!_ 12.. 2.Q_ ~ ~ 2l_ 2~ SPDA |舍一一一一器件1D一一一一叫 图 7-42 SPI 总线通信时序图 通过时序图可以知道总线空闲的时候, SPI 总线处于高电平状态, SPENA 是由通信的 主机发出的片选信号, SPENA 为高电平时从机不对数据线上的数据作出响应,从机检测到 低电平后开始接收数据, LQ035NClll 的 SPI 通信模块会在时钟信号的上升沿读取数据总 线上的 lBit 数据。 SPDA 上的数据先发送高位,后发送低位。配置 LQ035NClll 内部驱动 芯片的寄存器顺序如图 7-43 所示。 配置一个寄存器分为两步,第一步是主机发送需要配置的寄存器地址给液晶驱动芯片, 第二步把需要配置的寄存器数据传输给液晶驱动芯片。图 7-43 就是将液晶驱动芯片内地址 为 28H 的寄存器配置成 Ox1264 。 下面简单介绍其驱动程序在 MSP430F149 上的实现方法。首先把几个管脚的常用操作 定义为宏,具体代码如下所示。 SPENA 1 发送地址 SPCK SPDA 1←一一器件1D-----.j 飞 2 发送数据 f SPCK 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 SPDA i←一一一器件1D一一一一叫 图 7-43 LQ035NClll 通信数据 Bit 位定义 第7章技术造阶之一:熟练掌握MSP430单片机 241 / / LCD SPDA 'define LCD DAT 1N 'define LCD DAT OUT .defir、e LCD DAT SET 'define LCD DAT CLR 11 LCD SPCK 'define LCD CLK OUT 'define LCD CLK SET 'define LCD CLK CLR // LCD SPENA 'define LCD ENA OUT 'define LCD ENA SET 'define LCD ENA CLR 1/ LCD RST 'define LCD RST OUT 'define LCD RST SET 'define LCD RST CLR P3D1R 品- - 81T3 P3D1R 1- 81T3 P30UT 1- 81T3 P30UT 矗- - 81T3 P3D1R 1- B1T2 P30UT 1- 81T2 P30UT 晶- - 81T2 P3DIR 1- 81Tl P30UT 1- 81Tl P30UT 胆 -81Tl P3D1R I~ 81TO P30UT 1- 81TO P30UT 岳- - 81TO / / .‘λ //输出 //置离 //量低 //输出 //置高 //置低 //输出 //置高 //置低 1/ 始出 //置离 //量低 写 8 个 bi t 的函数, 这个可以作为一个基本函数 。 /*.*…*****…*******禽.*禽舍舍舍舍舍*……*..**会*禽*会...企禽禽*******禽禽禽食***'***舍**,.. ·名称: HX Wri te 8bi ts () *功能:通过 SP1 总线发送 8 个 bit 的数据 *入口参数 : dat- 发迭的数据先写高位再写低位 .出口参数:无 ***.食******...""舍禽禽舍禽禽食…**.食食费禽****.***禽*禽禽禽禽*禽禽*禽禽.*.禽禽食*食食.* .*贪食禽合食会舍舍**/ void HX_Write_8bits(unsiqned char dat) { unsiqned char i; LCD DAT OUT; LCD DAT SET; for(i - 8; i > 0; i--) , LCD CLK CLR; i f (dat Ox80) { LCD DAT SET; else ( LCD DAT CLR; LCD CLK SET; dat <<- 1; 1/ 上升沿写入.. //从高到低位依次写入 配置液晶驱动芯片的函数: /*******舍.*.*..舍******.***忖**********川*****舍*******川***********忖********* *名称 : 刷刷r i te COllUlland () ·功能:配置就晶驱动芯片的寄#. ·入口参敏: req--所要配置的寄存暴地址, dat-一配置的数据 ·出口...:无 **禽****…***.********……**禽舍*禽禽*台禽.禽禽食*食禽禽.*食*******食忖食禽食食禽食禽合禽食‘ "***1 void HX Write三全些and(unsigned char r呵, unsigned int dat) 242 第二部分修炼篇 unsigned char addr; unsigned char dat_日, dat_L; dat_H - (unsigned char) (dat >> 8); dat_L - (unsigned char) (dat & Oxff); LCD_ENA_CLR; RX Write 8bits(Ox70); HX Write 8bits(OxOO); HX_Write_8bits(reg); //芯片 10 与读写、地址数锯指令 //写入指令 //写入寄存暴地址 LCD ENA SET; LCD ENA CLR; HX_ Write_8bits(Ox72); HX Write 8bits(dat H) ; HX Write 8bits(dat L); LCD ENA SET; /1 芯片 10 与读写、地址数拇指令 1/ 写入高位 //写入低位 LQ035NClll 内部寄存器可以参照其驱动芯片的器件 手册,其中渺及比较多的寄存器 的控制内容,读者只需要关注部分关于显示参数的调节寄存器即可 。 7.8.4 功能扩展与改进 该实例只是个简单的实践练习,通过该项目读者可以掌握读时序图,并且按照时序图 来编 写相应的驱动程序,这个是参加电子设计竞赛进行系统设计的基本功 。 对这个小系统 感兴趣的读者还可以在这个基础上进行功能的扩展和改进 。 做出满足自己实际应用的系统 。 如果只需要本系统中的简单功能,读者可以将 CPU 换成性价比较高的其他系列的单片机, 比如 MSP430G2XXX 系列的微控制器具有管脚少,运行所需外围器件少,同时价格便宜, 部分型号具有直插的封装,方便业余制作 。 下面给出几个改进方向 。 1.功 放电路的改进 当 前系统采用 LM386 进行功率放大,效率比较低,而且不能调节音量的大小,对于电 视机可以采用遥控来调节音量大小,但是如果应用到监控系统则无法调节 音量,可以采用 D 类功放来提高功放的效率,降低系统的功耗,同时扩展音盘调节,静音等功能 .D 类功 放由 于采用 PWM 信号去 驱动扬声器,驱动器件工作在饱和和截止两种状态,功率要比甲 乙丙类放大器效率高,这与开关电源芯片比线性电漉芯片效率高是一个道理,其外部驱动 电路简单,只要几个开关三 极管或者 MOS 管就可以实现 。 在我们现有的系统上实现 D 类 功放的方法如下:采用 MSP430F149 的两个 12B盯的 ADC 通道对左右通道的音频信号分 别进行采样,同时把单片机的定时器配置成 PWM 输出,输出脉冲的展宽比由 ADC 的结果 来决定 , 然后用 PWM 信号去控制开关 三极管构成的驱动电路,驱动电路的输出信号通过 电容藕合后送到扬声器上驱动扬声器发音。如果要调节音量可以把 ADC 转换的结果按照 一 定倍数来缩小后去控制 PWM 的占空比 。 TI 也有专用 D 类功放芯片,有兴趣的可以去参考 其数据手册 。 第7章技术进阶之一:熟练掌握 MSP430单片机 243 2. 增加无线模块 由于当前的输入需要采用有线方式连接视频信号,所以使用起来不方便,为了实现任 意移动电视而不用机顶盒一起搬着走,可以给系统增加→套无线影音收发模块,这样就可 以采用无线的方式连接机顶盒输出的影音信号。但是如果机顶盒和制作的小电视机不在一 个房间时,就无法对机顶盒进行红外遥控了,为了遥控也能采用无线遥控方式,我们可以 采用具有无线收发功能的 CC430 系列单片机,该系列单片机集成了射频数字收发模块,可 以利用程序控制便携式电视机上的 CC430 单片机给机顶盒附近的 CC430 单片机发射无线 控制信号,这些信号有调台,音量控制等机顶盒遥控命令,然后由机顶盒附近的 CC430 单 片机将无线指令转成对应的机顶盒红外信号去驱动红外发射二极管,这个红发射二极管可 以粘在机顶盒的红外接收窗口上,这样就可以在其他房间观看电视,同时实现电视机机顶 盒的无线控制。当然,这些红外遥控命令都要和机顶盒遥控器所发命令的波形一样,所以, 机顶盒附近的 CC430 无线接收系统首先要从机顶盒遥控器学习常用的控制命令,并将这些 控制命令存储在 CPU 的 FLASH 中,供接收到无线控制命令时调用对应的红外驱动波形。 3. 增加字符叠加芯片 为了进一步完善,可以给该系统增加字符叠加芯片,在输入的视频信号上叠加一定的 字符信息,这样就可以通过按键调节亮度、对比度、色度、音量等参数。把系统应用到航 拍,无线视频监控等领域,常见的字符叠加芯片可以通过 IIC 总线和 CPU 进行通信,输 入的视频信号通过该芯片输出时叠加了字符信息,但仍然是 CVBS 信号,该信号连接到 TVP5150AMl 上就可以在液晶屏上显示出叠加的字符信息。由于采用了 MSP430 单片机, 可以通过简单的方式扩展触摸按键功能来调节显示参数,关于触摸按键的相关实现的方法 可以参考 TI 网站上的设计资料。 8.1 参加设计大赛的准备 全国大学生电子设计竞赛的赛题大致可以归纳为 4 个方向:高频类、控制类、测量类 和电力电子类。高频类赛题与高频电子线路以及无线通信相关知识联系紧密,偏向于通信 工程相关专业。这类赛题一般要求实现通信系统中的典型功能电路或者简化的通信系统。 控制类赛题与自动控制原理以及数字信号处理等相关知识联系紧密,偏向于实现系统自动 化控制。赛题一般取材于工业控制,较多的涉及传感器测量以及电机控制。测量类赛题覆 盖范围最广,该类赛题涉及基本的测量原理、电路指标的测试方法等。知识面包含了模拟 电路、数字电路、编码原理等。电力电子类赛题与电力方向结合紧密,与其他赛题最大的 区别在与该类赛题面向强电,偏向于电力方向的专业。 控制类赛题和测量类赛题专业偏向不明显,所以参赛人数也是最多的;高频类赛题往 往赛题难道较大,所以属于"小众"类赛题;而电力电子类赛题的高地则一直由电力专业 的参赛队占据。 对于参加竞赛的参赛队,建议根据队伍的特点选定一个参赛方向为主攻方向,有目的 地准备和训练能够取得更好的效果。 电赛的特点是偏向于硬件电路的设计。虽然近年来顺应电子行业的发展,允许使用嵌 入式平台,但赛题的重点一直都是电路设计,小部分赛题可以在不使用单片机等处理器的 情况下完成。因此,扎实的电路知识是参加电赛的前提,电路原理相关知识可作为理论基 础,模拟电路和数字电路则属于理论和应用相结合的部分。 赛前训练可以制作部分通用的电路功能模块。基础性的训练内容包括运算放大器的使 用、有源和无源滤波器的设计、功率放大器的制作、模数和数模电路模块的应用。尤其是 测量类的参赛队,这些训练内容在要求上应该更高一些。高频类的参赛队除完成以上训练 外,还需要掌握常见元线通信系统设计与实现,包括 AM 、 FM 、 ASK 和 FSK 的调制与解调 电路、天线匹配、高频小信号放大、检波电路、高频谐振功率放大器、高频振荡器等内容。 这里没有提到 PSK 的调制与解调,主要是载波恢复难度偏大,在竞赛中实现比较困难。控 制类参赛对赛前要熟悉各类传感器的使用,除了传统的光电传感器、角度传感器、超声波 第8章技术进阶之二:电子设计大赛 245 传感器等,还需要注意目前很多性能优秀的 MENS 器件,这对提高作品指标有很大的帮助。 直流电机和步进电机的控制也是准备的重点。电力电子类参赛队则要重点掌握电力中常见 电路的设计,如大功率 MOS 管的使用、霍尔传感器的应用等。部分常用的电路甚至可以制 作成功能小巧的模块,以备在大赛中使用。 PCB 设计也是电子设计竞赛的一项基本功,虽然电子设计竞赛的时间短,不能采用 PCB ,但是我们在电子竞赛前可以画一些常用模块和单片机的最小系统的 PCB ,特别是一 些贴片元器件的应用电路必须提前做好 PCB ,把上面的关键信号和电源引出来。作为学生 阶段推荐学习 PROTEL DXP 以上的版本作为电路图, PCB 的画图软件,该软件简单易学, 学生短时间内就可以掌握。画 PCB 的时候首先一定要检查原理图的器件和连接网络是否全 部导入到 PCB 中,如果有遗漏,软件会有相关的提示,此时→定要查清到底是那个器件或 者网络没有导人。画 PCB 的时候,一定要注意元器件的布局,好的布局可以提高系统的可 靠性,同时也简化了走线。走线过程要注意地平面的完整性,尽量减少地面的破坏,对于 高精度的测量系统建议将电源和地分成数字电源、模拟电源、数字地、模拟地,且各自从 电源的输入端引线,这样可以有效防止数字电路上的干扰通过电源走线阻抗传递到模拟系 统上。 PCB 设计完成后 一定要检查关键器件的定位是否准确,比如 MCU 的核心板上将 1/ 0 口通过板子四周的排针引出,排针之间的相对位置要检查好,不然无法焊接到应用板上 去。由于我们的 PCB 都是采用手工焊接,所以在 PCB 画好后进行添加泪滴的操作,可以加 固焊盘。对于关键信号,在 PCB 上要留好测试点,方便接示波器探头测量波形。 元器件的焊接是一项应对电子设计大赛挑战的重要技能。焊接时需要注意极性器件的 极性,如钮电容,芯片的第一脚的位置,如果焊错了,很难再拆下来,焊接时如果发现管 脚有氧化现象可以先在焊盘上刷点助焊剂再焊接,确保管脚和焊锡可靠的接触,对于多管 脚的芯片,如 MSP430 单片机芯片,可以先根据 PCB 的第一脚位置以及焊盘的位置,把 PCB 板放在一个合适位置上,用于压好,另外一只手用电烙铁上的焊锡在一边几个管脚上 点一下,把芯片固定在焊盘上,然后再去焊接其他的边,焊接前先在这一边的管脚上刷点 助焊剂,然后电烙铁上粘点焊锡在管脚方向上刷,确保每个焊盘和管脚都粘到锡了,全部 焊好后再在灯下检查一下是否有相邻的管脚焊接短路的情况,如果有,用电烙铁在短路的 管脚上拖一下,把多余的焊锡带走。 焊接完成后,可以先用万用表测量一下 20V 电源, 5V 电源, 3 .3 V 电源以及 1.8V 电源 是否短路。如果不短路,可以上电连接仿真器,打开 IAR 软件,按照之前章节的配置方法, 配置好,点击调试,看是否能够正常和单片机连接调试,如果不能正常连接,先检查 3.3V 是否正常,再检查复位电路是否正常,上电后是否处于高电平,以及 JTAG 接口的连接是 否准确。如果不正常再按照原理图去检查,正常后可以下载应用程序进行测试实际的功能。 如果功能有问题则需要对照各个器件的手册检查硬件连接和软件是否正确。分析各个点应 该输出的波形与实际示波器测量的波形进行比较。 赛前除了电路方面的准备,在处理器的使用以及算法方面也要下足工犬。所有的参赛 246 第二部分修炼篇 队在赛前必须熟练使用一款处理器,这里的处理器泛指单片机、 DSP 和 FPGA ,甚至于 嵌人式平台。在选择处理器的时候,应该从处理器性能、片上外设和功耗三个方面来选 择。高频类赛题一般情况下对处理器要求不高,但是往往会对低功耗有要求。所以,高频 类参赛队可以选择像 MSP430 这样的低功耗单片机,并且熟练地使用片上外设。在软件方 面,需要熟悉简单的通信流程的实现。控制类赛题经常涉及电机控制或简单的 PID 控制, 所以选择具备较强的 PWM 控制能力以及计算能力不算太弱的单片机就能满足要求,比 如 MSP430 、 Cortex-M3 , Cortex-M4 等。电路电子类赛题可能涉及数字电源等内容,需要 做到实时处理,对处理器的计算能力以及 PWM 控制能力要求较高。这类参赛队可以选用 C2000 系列实时数字处理器或者 Cortex-M 系列处理器。测量类的赛题种类较多,有的赛题 对数据处理的实时性要求不高,仅需要完成低强度的计算以及人机的交互,那么普通的单 片机就可以满足要求。但是涉及实时性要求高或者计算量大的情况,比如频谱的分析,这 时使用 FPGA 以硬件逻辑完成运算就非常有帮助。测量赛题中经常需要使用到基础的数字 处理知识,如抽取、数字滤波、快速傅里叶变换等,这些内容也需要参赛队提前准备。 电赛赛题变化繁多,但是始终侧重基础知识的考察,因此参赛前芳实电路基础才能以 不变应万变。 8.2 大赛题目解析一一无线识别装置 首先回顾一下 2007 大学生电子设计竞赛 B 题"无线识别装置"的基本内容。赛题的基 本任务是设计制作一套无线识别装置。该装置由阅读器、应答器和榈合线圈组成,其方框 图见图 8-1 。阅读器能识别应答器的有无、编码和存储信息。 精合线圈稿合线圈 | l1 单 .外.电 :接:二源三z i卡 I →i口 L阅ζ 读士器ζZ 口斗l下飞1地-ftI&I\L \ ~\ 111 jjJ 1{\(1~ 1\mìI队I.tr→:盯-之 :应-二 .答-:工 器:1Jl 唱.., D 唱- ~一一一-.j 图 8-1 无线识别装置方框图 装置中阅读器、应答器均具有无线传输功能,频率和调制方式自由选定。不得使用现 有射频识别卡或用于识别的专用芯片。装置中的藕合线圈为圆形空芯线圈,用直径不大于 lmm 的漆包线或有绝缘外皮的导线密绕 10 圈制成。线圈直径为 6.6::!::0.5cm (可用直径为 6.6cm 左右的易拉罐作为骨架,绕好取下,用绝缘胶带固定即可)。线圈间的介质为空气。 两个祸合线圈最接近部分的间距定义为 D 。阅读器、应答器不得使用其他嘱合方式。 按照惯例赛题根据难度将要求划分为基本要求和发挥部分,该赛题基本要求有以下两点。 1 )应答器采用两节1. 5V 干电池供电,阅读器用外接单电源供电。阅读器采用发光二 极管显示识别结果,能在 D 尽可能大的情况下,识别应答器的有元。识别正确率注 80% , 第8章技术进阶之二:电子设计大赛 247 识别时间运缸,祸合线圈间距 D 二三 5cm 。 2) 应答器增加编码预置功能,可以用开关预置 4 位二进制编码。阅读器能正确识别并 显示应答器的预置编码。显示正确率注 80% ,响应时间三三缸,祸合线圈间距 D 主主 5 cm o 发挥部分则包括: 1 )应答器所需电源能量全部从搞合线圈获得(通过对糯合到的信号进行整流滤波得到 能量),不允许使用电池或内部含有电池的集成电路。阅读器能正确读出并显示应答器上预 置的 4 位二进制编码。显示正确率二三 80% ,响应时间运缸,搞合线圈间距 D 二三 5cm 。 2 )阅读器采用单电源供电,在识别状态时,电源供给功率运 2W 。在显示编码正确率 ;三 80% 、响应时间运 58 的条件下,尽可能增加搞合线圈间距 D 。 3 )应答器增加信息存储功能,其存储容量大于等于两个 4 位二进制数。装置断电后,应 答器存储的信息不丢失。元钱识别装置具有在阅读器端写入、读出应答器存储信息的功能。 4) 其他。 评分标准见表 8-10 设计报告 基本要求 发挥部分 表 8-1 评分标准 项目 系统方案 理论分析与计算 电路与程序设计 测试方案与测试结果 设计报告结构及规范性 总分 实际制作完成情况 完成第( 1 )项 完成第( 2 )项 完成第( 3 )项 其他 总分 主要内容 无线识别装置总体方案设计 精合线圈的匹配理论 阅读器发射电路分析 阅读器接收电路分析 阅读器电路设计计算 应答器电路设计计算 总体电路图 识别装置工作流程图 调试方法与仪器 测试数据完整性 测试结果分析 摘要 设计报告正文的结构 图表的规范性 满分 6 9 19 8 8 50 50 21 20 5 4 50 该赛题属于电赛传统项目无线通信方面的内容,从第→届电赛开始无线通信都是远场 通信。但是无线识别装置这道赛题首次引入了近场通信的内容,并且第一次明确地对系统 248 第二部分修炼篇 整体功耗提出了严格的要求。之后两届电赛,无线通信和高频类赛题都延续了低功耗的要 求。 2009 年电赛无线通信类题目无线环境监测模拟装置,要求采用近场通信模型和使用干 电池供电。 2011 年电赛高频类赛题 LC 谐振放大器再次要求干电池供电。赛题顺应了电子 行业朝向低功耗方向发展的趋势。但是近场通信模型的出现也让大多数参赛队措手不及, 完成情况差异很大。少数能够拟定合理方案的参赛队在比赛进行的第一天下午就完成了作 品;相当数量的参赛队在比赛截止的时候也仅完成了基本要求。 下面来分析这道赛题,赛题实际是 取材于 RFID (射频识别)技术,明确 交变磁场 地规定了使用电感搞合的方式完成通信。 在电感桐合方式中,阅读器的天线相当 于变压器的初级线圈,应答器的天线相 当于变压器的次级线圈,所以电感搞合 应当采用变压器模型进行分析。将应答 器放置在阅读器产生的交变磁场中时, 其调制示意图如图 8-2 所示,次级线圈 图 8-2 负载调制示意图 (应答器线圈)可从初级线圈祸合到能量,这样就可以获得应答器所需要的工作电压。应答 器端负载阻抗的变化,会因为祸合作用从而引起阅读器端初级线圈两端的电压变化。通过 控制应答器端负载阻抗的变化,就能将应答器端的数据传输到阅读器,这种数据传输方式 就叫做负载调制。 采用负载调制技术,就能够同时满足应答器向阅读器传输数据和应答器电源从搞合线 罔获得电压的要求。下面逐条分析题目的要求,基本要求第 1 、 2 与发挥部分的 l 、 2 条相 对应。题目指出需要在应答器端预置 4 位二进制编码并在阅读器端读出,读出数据能够使 用二极管显示出来。应答器端可以设置拨码开关或多个按键用于控制编码的预置,阅读器 端用于显示的二极管或者液晶之类的设备就是必需的。题目规定最小通信距离为 5cm ,并 要求尽可能大的增大通信距离。这就要求阅读器能够尽可能地将能量发射出来,但是总体 功耗要小于 2W ,而应答器则需要尽可能多的调合能量。显示正确率注 80% ,要求了通信 的有效性;响应时间运缸,则规定了通信延时。相对来讲这两个指标比较容易实现。对照 评分表可以看到,在达到基本要求的前提下,只要实现了应答器从阅读器搞合能量的要求, 在发挥部分就可以获得额外的 21 分;而通信距离指标占有 20 分的比重。 在通信模型已经明确的情况下,大部分的参赛队最终都会选用负载调制的模式,电路 设计的优劣则会对通信距离产生严重的影响。所以,通信距离将成为区分作品优劣的判断 标准。发挥部分的第 3 点要求增加信息存储功能,该要求分数比例很低只有 5 分,在竞赛 的当时很多参赛队都放弃这个分数。主要原因是增加信息存储功就必须引人非易失存储器, 相应的要增加 MCU 控制读写操作。通信模式由单工模式(应答器向阅读器)变为了双工模 式。这两点明显增加了整个电路的功耗和复杂度。针对这个要求,带有片上 FLASH 的低功 第8章技术进阶之二:电子设计大赛 249 耗单片机 MSP430 是一个非常好的选择。利用单片机还可以很容易地控制输入、输出设备。 现可拟定阅读器的方案如图 8-3 所示,编码预置按键用来预置写入应答器的数据,读写 按键控制阅读器工作在读应答器状态或者写应答器状态。显示可以使用 LED 或者液晶屏, 使用关闭背光的液晶消耗的功耗会更低一些。这部分输入/输出设备都连接到 MSP430 的 1/0 端口上。 图 8-3 阅读器方案框图 在写模式下,预置的二进制编码被封装到 UART 中串行发送。基带信号被振荡调制电路 调制到高频信号上,再经过功率放大器放大,最终从线圈发送出去。由于没有双工器,在写 模式下,阅读器的接收电路会收到自己发送的数据,这种情况下应当忽略接收到的数据。 在读模式下,阅读器持续发送无调制的振荡信号,应答器会对阅读器天线两端的电压 产生影响,这种电压由检波整形电路解调出 UART 格式的串行信号,并最终被 MSP430 接 收显示。 下面将逐个完成功能模块的设计。载波信号可通过有源晶体振荡器产生,调制则可使 用逻辑器件门控振荡信号的输出的方式实现。振荡电路,如振荡信号频率选为 4MHz 。较 高的载波频率能够提高发射效率,但是还需要考虑在电路实现的过程中能够实现电路谐振, 线圈的匹配。实际测试绕制线圈电感量约为 13μH ,根据 LC 电路的谐振频率计算公式: 1=2市 C= 一 1 一 4πγ 2L 将电感感值为 13μH 代入上式,最终可以获得为达到谐振电容的容值与频率间的关系为 C(pF) =f一 i:1M9一4H一8.z5「)' 公式中电容 C 的单位已换算为 pF ,频率 f 的单位为 MHz 。在选取匹配电容的时候,考 虑到电赛中电路都是手工焊接,电容最好量级在百皮法级比较容易调试。所以这里选取载 波信号频率为 4MHz ,谐振电容约为 12 1. 8pF 。 振荡调制电路如图 8-4 所示,振荡器的输出由 MSP430 的 TX 管脚通过与门控制输出, 250 第二部分修炼篇 这样就将基带信号调制到载波信号上。后级通过两级非门缓冲用于驱动后级的丙类功率放 大电路。 3 4M ACTIVE OSCILLATOR 图 8-4 振荡调制电路 用有源发射电路在功率受限的情况下,尽可能地将信号功率发送出去,就需要选用一 个效率尽可能高的功率放大器。这里选用功率三极管搭建丙类功率放大器,电路如图也 5 所示. L-Circle 是依据题日要求绕制的线圈。 丁 十十计叶什十什l什十十1阳十0归ω4 一L C6 3/30 i ) L-circJe )13μh > Cl0 JOOp AGND 图 8-5 丙类功率放大器 阅读器端的检波解调电路如图 8-6 所示来自线圈的信号首先由二极管 Dl 和 D4 完成 倍压检波,为防止信号幅度过大. D2 和 D3 组成了限幅保护电路。再由运放调节,最终由 比较器比较输出解调出来的数字基带信号。基带信号为 UART 格式,利用 MSP430 的片上 L4 1m C; 12 rv"',凡→ )L5 09 、r :..i‘ 010 )IOu 011 R7 10K C17 3/30 图 8...6 AGND 阅读器检波解调电路 Vcc Vcc lOK R6 10k w m∞ 恻 黯 头 悴 琴 N U u 西 咐 碎 导 U厅 糊 MU-- 252 第二部分修炼篇 UART 模块即可显示接收到的数据 。 介绍完阅读器电路,下面来介绍应答器的方案设计与电路实现 。 MSP430 始终监听天线 接收到的数据,根据数据内容判断是否进 行存储操作 。 应答器存储的信息和编码按 键预置的编码都由 MSP430 封装到 UART 数据帧,并通过调制器完成负载调制过程, 传输给阅读器 。 应答器方案框图如图 8-7 所示 。 在应答器端电源全部由天线藕合,首 先需要完成能盘采集电路获得供电电源 。 图 8 -7 应答器方案框图 简略的设计电路如图 8-8 所示 。 将线圈电感和电容匹配在谐振状态,由 4 只二极管完成全 被整流 。 整流后的信号 一部分用 于给 电容充电,作为应答器的电源使用 。 另外一部分被检 波解调,获得由阅读器发送过来的数据,并交由 MSP430 存储 。 模拟开关闭合线圈的负载 被短路到地,几乎为 o (模拟开关本身具备欧姆级的阻抗),这样既可引起阅读器线圈两端 的变化,又可完成负载的调制过程 。 模拟开关由 M SP430 的 UART 发送接口电平控制,实 现应答器数据的发送 。 DI2 POWER C25 IOOp COOl pooent_ 1 AGND Dl8 MSP430RX GND 图 8-8 应答器电路 GND M SP430 单片机电路,在阅读器端和应答器端是相似的,都需要使用到 UART 接口 和通用 [/0 接口 。 阅读器端除了需要配置预置开关还需要外接液晶屏,下面以阅读器端 为例介绍 MSP430 电路 。 无线识别装置中,所使用到的单片机资源比较少,可以选用管 第8意技术进阶之二 : 电子设计大赛 253 脚较少的 MSP430 来进 行实现,比如 D I P 封装的 G2 系列 MSP430 就比较合适 ( G2 系列 在 2007 年电赛的时候还没有,但是有其他 SOIC 封装的器件供使用,如 MSP40F 1232 , MS P430F447 等)。 阅读器端 MSP430 单片机电路如图 8-9 所示,电路具备 5 个按键,其中 4 个用于顶览编码,另一个用于配咒读 写 状态 。 读取的应答黯数据使用 SPI 接口的液晶显 示 。 应答器踹单片机电路相对简单 H 'rI后要 4 个按键即可满足要求 。 DV白 飞血n. XOUT?盯 育苗T'S8W11皿 一 ur.$8\\"TD帽 " ?:回到6刷 ''''飞lC8OS(孔 PU n. 四3 G鸣。 回 8-9 阅读器端 MS P430 单片机电路 该赛跑在软件设计方面工作盐很小,完成按键简单地读取、液晶的显示、串口数据的 收发和 FLASH 的读写操作即可 。 洒{言流程可以按照下面的步骤实现: 1 )阅读器发送未调制的载波倩号,用于给应答器电容充电 ; 应答器处于监昕状态 。 2 )阅读器根据读写按键状态,向应答器发送读写指令 。 如果阅读器为读状态,阅读器 发送完指令后继续发送未调制载波;如果阅读器为写状态,阅读器发送将要写人的数据 。 3 ) 应答器根据接收到的指令,进入发送状态或者接收状态 。 如果接收到写指令,则保 持监昕状态,将接收到的数据写入 FLASH; 如果接收到读指令,则将存储的数据以及按键 预置的数据全部发送出去,发送完后回到监听状态 。 4 ) 应答揣在写出数据或者接收到数据后 ,会根据读写按键状态再次重复以上步骤 。 8.3 大赛题目解析一一声音引导系统 声音引导系统属于电赛中控制类赛题,需要设计一套系统完成小车的自动定位 。 具体 的任务是设计并制作一套声音导引系统,示意图如图 8-10 所示 。 因 8- 10 中 , AB 与 AC 垂直 , Ox 是 AB 的中垂线 , O 'y 是 AC 的中 垂线 , W 是 Ox 和 O 'y 的交点 。 声音导引系统有一个可移动声惊 S , 3 个声音接收器 A 、 8 和 C ,声音接收器之间 254 第二部分修炼篇 可以有线连接。声音接收器能利用可移动声源和接收器之间的不同距离,产生一个可移动 声源离 Ox 线(或 0); 线)的误差信号, 接收器 C x 并用无线方式将此误差信号传输至可移 动声源,引导其运动。可移动声源运动 D S吼 锄 声源 的起始点必须在 Ox 线右侧,位置可以任 意指定。 题目的基本要求包括以下 6 点: lml • l 中点o;0' W: …-------… -v一 ----y 1 )制作可移动的声源。可移动声源 产生的信号为周期性音频脉冲信号,如 图 8-11 所示,声音信号频率不限,脉冲 周期不限。 2) 可移动声源发出声音后开始运 动,到达 Ox 线并停止,这段运动时间为 响应时间,测量响应时间,用下列公式 计算出响应的平均速度,要求平均速度 接q到器 A 一中…点-0。--一一…-------接--收---器- IB 1m 图 8-10 刷 刷 川 声音引导系统示意图 州 州 删 州 咖 咖 川 川 大于 5cm/s 。 图 8-11 音频信号披形示意图 平均速度= 可移动声源的起始位置到 Ox 线的垂直距离 响应时间 3 )可移动声源停止后的位置与 Ox 线之间的距离为定位误差,定位误差须小于 3cm 。 4) 可移动声源在运动过程中任意时刻超过 Ox 线左侧的距离须小于 5cm 。 5 )可移动声源到达 Ox 线后,必须有明显的光和声指示。 6 )功耗低,性价比高。 发挥部分的要求基本上是基本部分要求的扩展,包括以下 6 点: 1 )将可移动声源转向 180 0 (可手动调整发声器件方向),能够重复基本要求。 2) 平均速度大于 10cm/s 。 3 )定位误差小于 1cm 。 4) 可移动声源在运动过程中任意时刻超过 Ox 线左侧距离须小于 2cm 。 5 )在完成基本要求部分移动到 Ox 线上后,可移动声源在原地停止 5 ~ 10s ,然后利用 接收器 A 和 C ,使可移动声源运动到 W 点,到达 W 点以后,必须有明显的光和声指示并停 止,此时声源距离 W 的直线距离小于 1cm 。整个运动过程的平均速度大于 10cm/s 。 平均速度= 可移动声源在 Ox 线上重新启动位置到移动停止点的直线距离 再次运动时间 6) 其他。 小车控制在电赛中出现的频率较高,赛前公布的器件清单中就标注有小车,所以在 第8章技术进阶之二:电子设计大赛 255 2009 年这道赛题的出现在意料之中。本赛题特别要求使用 NEC 提供的电机控制 ASSP 芯 片,这对参赛队的快速熟悉新器件的能力有一定 的要求,但是从本质上来讲并没有拔高题目的难 I "一一一一、 卢主盟主 度。从原理上分析赛题,需要根据平面上一点到 另外三点的距离,完成该点的定位。赛题明确地 规定了系统构成,所以方案基本是确定的,如图 8-12 所示。整个系统设计为两个部分,控制台和 声源小车。控制台根据 3 个声音接收模块的信号 测量小车距离 A 、 B 、 C 三点的距离,获得定位 信息后,计算小车动作方向,通过无线通信模块 将动作命令发送给小车。小车在运动的过程中不 断发出声音脉冲信号,接收到动作命令后驱动电 机完成命令动作,在接收到到位命令后给出到位 提示。 下面分别完成控制台和小车的设计。控制台 声源小车 图 8-12 声音引导系统框图 的电路示意图如图 8-13 所示,设计以 MSP430 单片机为核心,尽量使用 MSP430 的片上外 设以加快设计。 图 8-13 控制台电路框图 在本题中并不需要测量声源小车在平面上的绝对位置,只要小车与 3 个测量点的距离 相等即可,判断小车到达指定中心位置,所以控制台应该采取测量音频信号到达 3 个测量 点时间差的方式测量小车距各测量点的相对位置。题目要求定位精度要达到 lcm ,音频信 号在空气中传播的速度约为 340 ~ 380mls , 为了方便估算取 340mls , 那么需要分别的最小 时间差为 A AD0.Ol t= -v- = 丁EG一 μs=28. 加 MSP430 定时器时钟频率可以高达 16MHz ,时间分辨率为 62.5ns ,因此其测量精度足 以满足题目要求。 音频信号的接收电路如图 8-14 所示,采用驻极体话筒接收 14kHz 音频信号,然后使用 带通滤波器滤除 14kHz 音频信号以外的能量,再由后级放大电路放大。先滤波再放大的处 256 第二部分修炼篇 理方式有助于提高接收信噪比 。 RI 7 气〉 .二叶问I"CND CNO CND 图 8-14 音频接收滤波放大电路 经调节的音频信号再由比较器整形,其比较器电路如图 8- 15 所示,使其电平范围满足 MSP430 单片机要求 。 整形后的信号输入到 MSP430 单 片机定时器外部捕获管脚,由定时 器内部 3 个独立的捕获单元自动捕获对应的 3 路信号,捕获结果以计数器的计数值的方式 交由 CPU 处理 。 Voo GNDIII AMPOUT COMPARATOR GND 图 8-15 比较器电路 控制台端元线收发模块可 以 采用 nRF905 、 nRF24LOl 、 CC II01 等无线收发模块完成, 这些无线收发模块都采用标准 SPl 接口传输数据,在接收到数据能够以中断的 形式请求单 片机读取 。 SPI 接口 可以利用 MSP430 片上的 USCI 外设实现,控制台只涉及数据发送,因 此只需要向 USCI 外设的发送缓冲写人射频模块要求的数据帧格式即可完成通信 。 控制台的 显示可使用 SPI 接口的液晶屏实 现,相似的道理 可 以利用 MSP430 片上 USCI 外设完成通 信 。 选用的 MSP430F2618 单片机具备多达 3 个 USCI ,所以能够轻松地应对以上要求 。 小车电路也采用相同的单片机实现 ,电路示意图如图 8- 1 6 所示。 小车需要产生的音频 第8章技术进阶之二:电子设计大赛 257 信号直接使用 MSP430 片上定时器的 PWM 输出功能实现,只要设定定时周期和 PWM 输出 方式就能够产生对应频率的信号 。 接收端与控制端肯定采用相同的元钱模块,仍然采用 8PI 接口传输数据 。 当无线模块接 收到数据后,能够通过独 立的管脚产生中断请求 。 只要将该 管脚接至 MSP 430 具备 1/0 口中断功能的 Pl 或 P2 端口,就能以中断的形式快速响应接收 的数据 。 小车到位指示功能采用 1/0 口驱动 LED 的方式就可以实现,到位后 MSP430 控制 LED 闪烁就能实现指示功能 。 赛题指定的电机专用 ASSP 芯片 MMC- ] 可以采用 SPI 或者 UART 接口通信,本设计中采用了 UART 。 在 MSP430 上, USCI A 外设能够支持 UART 接口,所以设计中采用 USCI 片上外设与 MMC-l 通信 。 图 8-16 小车电路框图 MSP430 输出的 PWM 信号还包括较多的高频谐波分量,在进行功率放大之前先使用 RC 电路对其低通滤波,如图 8-17 所示 。 滤波后的音频信号由音频功率放大器 LM38 6N放 大并驱动扬声器发声。 剧+ t p p IN- BYPASS GND GND 图 8-17 音频功放电路 GND 电机控制芯片 MMC才能够根据 MSP430 发送的 UART 指令完成电机控制,并使用普 通 I10 口管脚与 MMC-l 复位使能管脚相连,在上电时复位 MMC-l 芯片,保证其稳定工 作。 MMC-l 不具备电机驱动能力,在该芯片之后还使用了专用电机驱动芯片 L298 完成电 机驱动,电路如图 8-18 所示 。 MMC-I 0∞IW1 精理冷11 西院 哥样 望自 12V U6 ~J UXìICVSS 制PUTI INPUT2 1 剖PUT3 INPUT4 ENABLllA I!NA8LIl8 CURRENTA CURRENT8 CND GND L298 图 8-18 电机控制及驱动电路 在:LPK;2蕉;二蕉:ι 12V 节楚样品 GND 第8章技术进阶之二:电子设计大赛 259 以上介绍完了声音引导系统的硬件设计,下面讨论该系统的软件流程实现。软件实现 流程如图 8-19 所示,软件也分为控制台和声源小车两部分。 控制台软件流程 声源小车软件流程 图 8-19 声音引导系统软件流程图 控制台在上电之后会首先初始化 MSP430 片上的外设,包括 1/0 口、定时器、 USCI , 然后初始化液晶显示以及无线模块的配置。完成初始化后, MSP430 通过配置外设具备了捕 获音频信号能力。捕获发生后, CPU 会以中断的方式快速响应,获得时间差,在此基础上 计算声源小车的下一步动作,以命令字的格式通过无线模块发给声源小车。 声源小车在上电在之后,首先也是完成 MSP430 片上外设初始化并复位 MMC 一 l 电机 控制芯片。初始化结束后, MSP430 开始发送音频信号,并等待接收无线命令。当接收到无 线命令,将根据命令内容执行动作,并继续发送音频信号。 飞 9.1 心电监测仪 9.1.1 需求分析 本项目将以 MSP430 单片机为核心 完成一个便携式心电监测仪的设计。该监测仪可 实现心率和心电信号监测的功能。主要的实现功能可以细分为以下几个方面: 1 )实时的监测人体心率和心电信号。 2) 监测结果可以通过彩色液晶屏实时显示。 3 )能够选择性的存储一段时间的心电信号。 4) 存储的心电信号可手动调出查看。 5 )采用通用的手机惶电池供电。 6 )可使用外部直流电源充电。 7 )在使用外部直流电源时,系统工作电流由外部电源提供。 8) 可使用热敏打印机打印心电图。 心电信号是由心脏有规律收缩和舒张过程中心肌细胞产生动作电位产生,能够通过测 量体表不同部位微弱的电压变化采集心电信号,体表不同部位处的电势差约为 1mV 。正常 的心率大约为每分钟 60 ~ 100 次,心电信号的频谱主要集中在 0.01 ~ 100Hz , 90% 的频 谱能量集中在 0.25 ~ 35Hz 的范围, 99.9% 的频谱能量集中在 300Hz 以下。依据以上这些 条件,需要设计微弱信号放大电路完成低频的心电信号放大,放大电路的电压增益在 1000 倍以上,带宽在百赫兹的范围。 根据上面提到的 8 个主要功能,可以进一步提取设计指标。 功能 l 要求"实时"监测人体的心率和心电信号,"实时"要求选用的 MSP430 单片机 具备足够的处理能力,实时完成计算和显示等工作。所以需要评估软件的计算量,然后进 一步选择主频足够高的 MSP430 作为主控。 功能 2 的要求能够很明晰的获得,即要求系统配备彩色液晶显示器。 功能 3 强调心电波形的存储功能,存储时间的长短以及所需要的存储空间,成为最为 第9章技术进阶之三:从零开始做心电图仪 261 重要的指标。存储需要的空间小可选用 MSP430 单片机内部的 FLASH ,存储需要较大的空 间则需要扩展一片外部 FLASH 。这里可以做一个估算,因为心电信号 99.9% 的频谱能量集 中在 300 Hz 以下,为方便计算,这里假设以 512Hz 的采样率采集 o ~ 250Hz 频率范围的 信号(奈奎斯特采样定律)。每个采样值经处理后,截留有效的 8bit 数据用于显示,那么 ls 的时间则需要存储 512B 的数据。普通医疗心电测试,每次测试的时间约为 2 分钟,则 需要存储 512 x 60 x 2=60KB 的数据。 MSP430 单片机所能提供的片上非易失存储空间不超 过 256KB ,并且该空间还用于存储 MSP430 的代码等内容。经过这个估算,如果仅用片上 FLASH ,存储空间非常紧张,只能存储若干组心电记录。所以经过对该功能的分析,需要 设计指标上需要在添加一片外部扩展 FLASH 。 功能 4 提出了手动查阅心电记录的功能,这就要求在设计上提供人机交互的接口,比 如需要提供按键以及查询菜单。 功能 5 、功能 6 和功能 7 要求设备采用铿电池供电,并具备自动电源、识别和电池充电功 能。电池供电直接关系到设备的续航时间,在设计上既要提高电源效率又要降低电源的功 耗;并且要设计理电池充电电路,该电路还有具备自动电源识别的功能。 功能 8 连接热敏打印机,则需要设计相应的打印机接口,比如热敏打印机使用的并行 接口或者串行接口。 根据以上的分析,可以将本项目需要完成的设计归纳为:设计小信号放大电路完成心 电信号的调理放大,调理后的心电信号由 MSP430 单片机完成模拟到数字的转换,并通过 数字处理实现心率计算、心电图液晶显示、心电信号存储以及心电图在热敏打印机上的打 印功能。系统电源部分除满足各部分电路的供电要求,还能够自动识别电源类型,并为惶 电池充电。 9.1.2 整体万案 有了之前的需求分析,可以归纳出系统的整体方案框图,如图 9-1 所示。框图中的 JTAG 接口仅为调试所需要,所以用虚线标出。 电源管理 图 9-1 心电监测仪整体框图 262 第二部分修炼篇 在进行系统整体设计的时候,合理的规划系统的电源系统非常重要,使用尽量少的供 电电压既能减少电源电路的器件数量,又有助于保证系统具备尽量统一的逻辑电平,减少 电平转换的环节。 本系统已经规定将使用于机钮电池或者外接电源供电,手机理电池的输出电压为 3.7V ,电子类产品的外接电源一般为 5V 。已选定的主控单片机 MSP430 的工作电压范围为 l. 8 ~ 3.6V ,为保证 MSP430 的供电电压,降压电路肯定是必须的。考虑到彩色液晶屏和外 部非易失存储器一般工作在 3.3V ,系统选定 3.3V 为整个系统的供电电压。相应的模拟电路 则需要设计为单电源供电方式。这样的设计方式,整个系统只需要将 3.7V 或者 5V 的电源 降压至 3.3V 即可满足整个系统的需要。 9.1.3 电路设计 在电路设计部分将针对系统中各功能模块设计出对应的电路。 1.模拟调理电路的设计 A 一般情况下心电信号的波形如图 9-2 所示, P R 波是心房运动产生的电位变化, Q 、 R 、 S 和 T 波 表示心室运动产生的电位变化。心率可通过 QRS 波群直接的时间间隔测量得到。本设计中采用了 测量左右手臂之间电势差的方式测量心电信号。 图 9-2 所示的心电信号是非常理想的波形。 实际情况下,微弱的心电信号几乎淹没在了噪声 之中。首先是电源线干扰,无处不在的工频交流 点设备,会在人体上产生一个 50Hz 的共模电压, 图 9-2 心电信号波形 不合理的放大会使心电信号完全淹没在工频干扰之中。对于这一点,可以采用差分放大的 方式的来尽量抑制这种干扰。差分放大器的同相端和反相端会同时引入相同的共模干扰, 二者相互抵消能够起到非常明显的抑制作用。 对于心电的测量还存在一个"基线漂移"问题,这是由于皮肤与电极间接触电阻的变 化、放大器的温漂以及人体运动引起的。主要表现为差分放大后的直流信号成分叠加会产 生一个低频抖动,属于低频干扰的现象。在设计中可以采取对差分放大后的信号先积分, 然后将积分后的信号反馈回差分运放以抵消这种漂移问题。 在经过了以上分析之后,对模拟调理电路做出如图 9-3 所示的设计。差分运放选用了高 精度仪表放大器 INA333 ,积分电路以及后级放大电路使用了低噪精密运放 OPA2333 (双运 放)。调理电路采用了单电源设计,为避免失真,调整信号都需要增加一个直流偏置。电路 中选用 D/A 转换器 TLV5636 提供可配置的直流偏置电压。 第9章技术进阶之三:从零开始做心电固仪 263 巳1 IANAIω

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。