DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1444|回复: 0
打印 上一主题 下一主题

[待整理] Cortex-M3可编程片上系统原理及应用-PSoC设计导论之:微控制器基础

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 14:28:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
Cypress 公司的可编程片上系统(Programmable System-on-Chip, PSoC) 将微控制器、可编程逻辑阵列、模拟可编程阵列等资源集成在单芯片上,为电子系统的设计带来了前所未有的机遇。
         
        本章主要介绍:微控制器基础;可编程片上系统PSoC 概述;PSoC5 设计流程;PSoC5 的结构及功能;PSoC5 器件概述。本章的内容是对PSoC 所涉及知识的整体概述,通过本章内容的学习,帮助读者从“系统”角度把握PSoC 技术的本质,方便对后续内容的学习和理解。
         
        微控制器是指带有外设的微处理器系统,比如台式电脑的CPU,它是一个微处理器系统。微控制器将响应来自I/O 引脚、定时器、通信等的输入,同时通过对信息进行操作控制来产生合适的输出信号。
         
        I/O 引脚使得微控制器能读取来自其他设备的按钮和状态信息,同时I/O 引脚也能够输出信号用来打开灯、运行电机和驱动显示设备。
         
        定时器、通信模块和数/模转换模块能使微控制器执行特殊的任务,比如与PC 机进行通信,读取温度信息等。
         
        从微观上说,微控制器是一个集成了成千上万电子开关的设备。正如编程的人目的是为了将复杂的操作简化为逻辑和算术运算来完成任务那样,微控制器的设计人员必须决定使用什么电子设备来完成这些任务,比如,晶体管,FET 和二极管等。大多数的微控制器工作在二进制系统下,比如“1”或“0”,逻辑高或逻辑低,开或关。
         
        Cypress 的微控制器系统称为可编程片上系统(Programmable System-on-Chip, PSoC) ,那是因为在单芯片上包含了CPU 内核、足够的模拟子系统和数字子系统资源。因此,在实现一个系统时,几乎不需要外部的电路。
         
        1.1.1 微控制器的涵义
        如图1.1 所示,微处理器系统的CPU 通常需要和其他部件相连接,这样才能使其发挥作用。微处理器系统通常会使用到的功能部件包括以下内容。
       

        图1.1  微处理器系统常用功能部件

         

        (1)中央处理单元(CPU)
        中央处理单元(Central Processing Unit, CPU )是系统的“大脑”,它知道如何和各种不同空间的存储器交换(读或写)信息。同时,也执行一些逻辑指令,最基本和最通用的有:加、减、逻辑“或”、逻辑“与”、逻辑“异或”、移位、移动和复制。一些处理器可能执行更加复杂的操作,但这些操作都是由最基本的操作组合得到的。
         
        CPU 由一些子系统构成,在这些子系统中最重要的是程序计数器(Program Counter, PC),指令译码器和算术逻辑单元(Arithmetic Logic Unit,ALU )部分。PC 指向Flash 存储器指定的地址,然后返回指令和数据。PC 用来确定送到指令译码器内的Flash 中的字段。指令译码器包含译码逻辑,这些逻辑将对从Flash 返回的数进行“翻译”,用来确定程序将执行的指令,这些指令将“告诉”CPU 下一步所做的逻辑操作行为。
         
        CPU 不但能实现运算操作,也能修改程序运行的地址。如果在执行指令的过程中,并不是顺序的执行指令,比如遇到调转指令,那么PC 将加载新的所要运行指令的地址,并且从指向Flash 新的地址位置的地方执行程序。如果指令需要CPU 执行一些运算,那么相关的数将送到ALU 单元中。
         
        此外,CPU 也能根据所接收到的指令对外设进行控制。
         
        (2)高速缓存(Cache)
        从位置和访问速度方面来说,高速缓存Cache 最靠近CPU。有时,将Cache 直接集成在同一芯片内。但并不是必须放在同一个硅片上,只是封装在同一个芯片内。
         
        (3)随机访问存储器(RAM)
        从CPU 访问速度来说,访问随机访问存储器(Random Access Memory, RAM )比访问高速缓存要慢。需要说明的是,这个词语已经失去了它的原本含义,这是由于现在大部分的存储器都能够以任何顺序进行访问。
         
        (4)硬件驱动
        从速度来说,是系统中最慢和最大的存储部分。它用来保存程序,并且是由非易失性的存储介质构成。
         
        1.1.2 微控制器编程语言
        世界上不管是什么厂商的CPU,不管采用什么样结构的CPU,它们都有下面的共同特点:
        都是靠程序计数器(Program Counter, PC )来控制程序的运行,正因为这个原因,它们本质上也是串行执行的;
        工作在二进制状态下,也就是通常所说的在PC 的控制下,通过运行二进制组成的机器代码,来控制CPU 内各个功能部件的运行。
         
        对CPU 来说,所谓的“机器语言指令”,就是通过CPU 内的控制逻辑来协调CPU 内各个功能部件,完成所要求的操作。机器语言的运行效率是最高的。
         
        机器语言指令应该由操作码和操作数两部分构成。操作码告诉CPU 所需要执行的操作,操作数是执行操作所针对的对象。这些对象包括:立即数,寄存器和存储器等,通过访问这些对象来获得所需要操作的对象。比如:对8051 来说,机器语言指令-7D25,表示该指令要实现数据传输操作,“7D”是操作码,“25”是操作对象,其表示将十六进制数#25 ,送到R5 寄存器中。
         
        但是,正如前面所说的,纯粹意义上的“机器语言”对程序员太难理解了,为什么?这是因为程序员是CPU 的操作者,而不是CPU 的设计者,程序员根本不可能从二进制代码的排列中看出“机器语言”所描述的逻辑操作行为。
         

        为了帮助程序员理解CPU 所执行的操作,通过汇编语言助记符指令来帮助程序员设计指令以控制CPU 的运行。汇编语言助记符指令通过汇编器被翻译成机器语言指令。用汇编助记符描述机器指令的形式为:
         [标号:] 助记符 [操作数] [;注释]
        标号用来表示一行指令,助记符表示所要执行的逻辑操作行为,操作数为逻辑操作行为所操作具体对象,现在用汇编语言来描述上面的机器指令“7D25”:
        MOV R5, #25
        MOV 表示数据移动操作,R5 表示目的操作数,#25 表示源操作数,这个助记符汇编指令所表示的是,将立即数25 复制到R5 寄存器中。使用助记符来描述CPU 所要进行的操作,比使用机器语言直接描述更加容易理解和记忆。但是,由于汇编语言下面是机器语言,所以对于使用汇编语言编程的程序员来说,他必须很清楚CPU 的指令集,寄存器单元和存储器映射等繁琐的硬件规则。虽然其执行效率基本上和机器语言一样,但是使用汇编语言编程效率很低。因为很多程序员根本不了解CPU 的具体内部结构,所以对他们来说,使用汇编语言编程并不比使用机器指令编程好到哪里去,这也是一件令他们非常痛苦的事情。
         
        值得高兴的是,在今天,厂商开发的软件平台支持使用C、BASIC 等高级语言对硬件进行编程;C 语言是不能直接在CPU 上运行,它必须首先通过编译器(Compiler )转换成机器语言,才能在CPU 上运行。使用高级语言所编写的代码其运行的效率不可能比用汇编语言编程的运行效率高,所以说,如果你想让C 语言所编写的代码和汇编语言编写的代码有一样高的代码执行效率,你只能是绞尽脑汁的对C 代码进行优化,或者使用C 语言和汇编语言混合编程,来满足代码长度和运行时间的设计要求。虽然这一过程也会让程序员耗费很多的精力,但是,值得他们高兴的是,他们再也不用和底层硬件直接打交道了。
         
        为了更清楚地说明C 语言和汇编助记符之间的关系,列出表1.1 如下。
        表1.1 C 语言和汇编助记符之间的对应关系
                               
                                        C 语言描述

                       
                               
                                        汇编助记符

                       
                               
                                        机器指令

                       
                               
                                        功能

                       
                               
                                         

                       
                               
                                        MOV A, 0x08

                       
                               
                                        E508

                       
                               
                                        将数据空间地址为0x08 的内容送给累加器A

                       
                               
                                        F=C+D

                       
                               
                                        ADD A, 0x09

                       
                               
                                        2509

                       
                               
                                        将数据空间地址为0x09 的内容和累加器A 相加后送给累加器A

                       
                               
                                        MOV 0x0A, A

                       
                               
                                        F50A

                       
                               
                                        将累加器A 的内容送到地址为0x0A 的数据空间

                       
         

        如今,越来越多的厂商提供了硬件的应用程序接口(Application Program Interface,API)函数,这样程序员可以根本不用知道更多的硬件实现细节,只需关心如何编写代码来使硬件工作,这样就大大提高了程序的设计效率。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-9 21:38 , 耗时 0.106351 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表