judy的博客

单片机 指令集 和 操作系统的关系

judy的头像

1、首先讨论各种单片机与操作系统的关系

说到单片机,大家第一时间想到的应该是51单片机,对吧。不错,更高级一点的AVR,把他称为单片机,我们也还觉得可以接受。那么再高级一点的ARM7,8086,80386,Core i3,Athlon 等等我们更习惯称他们为CPU,因为学习计算机原理的时候都是这么叫的,但按照单片机的定义,他们也是归属于单片机。这也不怪大家,中国的教育都是这样,只注重告诉你是什么,而不告诉你他们之间的联系。上述几种单片机或者芯片(如果你还是觉得把core i3叫做单片机你不习惯的话)在原理上都是一样,即都是有运算器 控制器 寄存器构成的,不同之处在于它们的硬件电路实现不同,个数不同,功耗不同,计算能力不同,但都提供相同的基本功。OK,终于让cpu找到了组织,那么就介绍为什么有的单片机要操作系统,有的在我们学习的过程中压根就跟操作系统不挨边。

51/AVR单片机 在学习他们的时候,都是先介绍它们有哪些资源——有几个寄存器,有几个时钟等,然后就是怎么用汇编,用C或者是C与汇编混合编程。这里我们用的语言都是可以直接操作硬件资源的,因此我们可以自己决定什么时候使用哪个寄存器,什么时候将寄存器内容写到辅存储器中。

arm系列contex的a,r,m的区别

judy的头像

从cortex开始,分为三个系列,a系列,r系列,m系列。

m系列与arm7相似,不能跑操作系统(只能跑ucos2),偏向于控制方面,说白了就是一个高级的单片机。

a系列主要应用在人机互动要求较高的场合,比如pda,手机,平板电脑等。a系列类似于cpu,与arm9和arm11相对应,都是可以跑草错系统的。linux等。

r系列,是实时控制。主要应用在对实时性要求高的场合。

arm7和m3,m4是同一类型。这三个里面,arm7是最早的arm产品。m3是cortex m系列的过渡品,其低端市场被cortex m0的高端替代, 其高端市场又被cortex m4的低端取代。现在m系列,是m4内核的。典型的芯片是st公司和飞思卡尔公司的。

arm9 和cortex a8 是一个类型的,都是跑操作系统的,现在的高端手机,三星,htc等智能手机,就是用的cortex a8,cortex a9 内核的芯片作为cpu。

(1)ARM7,ARM9属于v4T或v5E架构
(2)ARM11属于v6架构
(3)Contex属于v7架构

ARM7、ARM9的区别在于是否有MMU(存储器管理单元)或MPU(存储器保护单元)

三极管工作原理

judy的头像

三极管在我们数字电路和模拟电路中都有大量的应用,在我们开发板上也用了多个三极管。在我们板子上的 LED 小灯部分,就有这个三极管的应用了,下图的 LED 电路中的 Q16就是一个 PNP 型的三极管。

三极管工作原理

三极管的初步认识

三极管是一种很常用的控制和驱动器件,常用的三极管根据材料分有硅管和锗管两种,原理相同,压降略有不同,硅管用的较普遍,而锗管应用较少,本课程就用硅管的参数来进行讲解。三极管有 2 种类型,分别是 PNP 型和 NPN 型。先来认识一下,如下图

总线的两种数据传递形式:PIO、DMA

judy的头像

总线上的数据的传递有两种形式。一种为程控输入/输出(PIO)另一种为直接存储器访问(DMA)。

1、PIO

使用PIO时,CPU是主模块,总线上数据的读取由CPU上运行的软件程序直接发起,传递的数据一定进过CPU(如下面的一、二所述)。

一、软件指令或者将已经存放在CPU数据寄存器中的数据发送到目标被控模块;

二、或者将目标被控模块里的一个数据读入,放到CPU的数据寄存器中。

例如:需要将数据从模块A---转移到----模块B,软件将这个任务分解为两个PIO操作:

第一步:从模块A读取数据,并存放到CPU的数据寄存器中;

第二步:将存放在CPU数据寄存器中的数据写入到模块B。

由于链接芯片与芯片之间的系统总线的时钟频率比CPU内部的时钟频率要低许多,用PIO读写大量的数据是一种非常低效的方式占用CPU的处理能力。所以需要利用专门的硬件来协助执行,在芯片与芯片之间或者模块与模块之间数据传输。这就是DMA。

2、DMA

单片机小白学步(14) 点亮第一个LED的程序分析

judy的头像

本篇我们将分析上一篇所写的程序代码。未来学习单片机的大部分精力,我们也将放在程序代码的编写上。但是不用担心,我会非常详细的介绍每个程序的编写思路和各种注意事项等。

之前我们写的程序如下:

#include
sbit LED = P1^0;

void main()
{
LED = 0;
while(1);
}

头文件

第一行包含头文件,这个和C语言编写HelloWorld时的#include 一样。头文件reg52.h中定义了单片机的一些寄存器,如P0~P3等。至于什么是寄存器,将在原理篇中具体介绍,现在我们只要把它想象成C语言中常说的内存就好了。有兴趣的读者可以右击reg52.h打开头文件看一看。

C51的变量类型

数据总线, 地址总线, 控制总线详解

judy的头像

地址总线

地址总线(Address Bus)是一种计算机总线,是CPU或有DMA能力的单元,用来沟通这些单元想要访问(读取/写入)计算机内存组件/地方的物理地址。它是单向的,只能从CPU传向外部存储器或I/O端口,地址总线上使得地址的64线路处于开合状态下,在该状态下,对应地址里面的数据可以获取或者存入

控制总线

控制总线,英文名称:ControlBus,简称:CB。控制总线主要用来传送控制信号和时序信号。控制信号中,有的是微处理器送往存储器和输入输出设备接口电路的,如读/写信号,片选信号、中断响应信号等;也有是其它部件反馈给CPU的

数据总线

数据总线数据总线是CPU与存储器、CPU与I/O接口设备之间传送数据信息(各种指令数据信息)的总线,这些信号通过数据总线往返于CPU与存储器、CPU与I/O接口设备之间,因此,数据总线上的信息是双向传输的。

来源:网络

为什么单片机管脚设计成低电平才有效?

judy的头像

它是由常用的电路结构所决定的,低电平时电路往往有较高电平时更低的环路阻抗,而低阻抗则意味着抗干扰能力更强。

结合实际讲一个有用的例子来加深印象:

有的同学可能已经学习了这样的一条PCB布线规则-----在条件许可的情况下,高电平有效线要尽量缩短,低电平有效的线则尽量延长----这一条规则的存在基础就是基于低电平时环路阻抗比较低,抗干扰能力比较强才起来的。

如OC或OD电路要控制一个电平就是通过它这个开关的通断来实现的。

有在上拉电阻的情况下,开关接通,得低电平;开关切断,得高电平。这样,为了防止电路失控的情况下仍然是有效电平,那么当然是低电平有效才更“保险”了。结构上,象OC电路那样,由于集电极更难击穿,所以,也更不容易损坏。

对于其它图腾柱输出的电路,虽然0和1都有同样的风险,但应用中还是有人愿意加一个上拉电阻,以取得类似OC或OD输出的效果。至于为什么不采用下拉电阻而用上拉电阻,大家也可以分析一下。

另一个方面是OC或OD输出的电路,使用上拉电阻后具有节能的效果。因为关断后它是具有获得高电平时的电流几乎为0。

STM8S的几种低功耗模式

judy的头像

STM8S105的低功耗模式总的来说有四种:分别是等待模式,停机模式,快速活跃停机模式和慢速活跃停机模式

1、等待模式:

可执行指令wif()进入等待模式,该模式下主CPU停止工作,但其外设不停,严格来说只能算是降低功耗而不能算低功耗,该模式可由AMU或外部中断唤醒

2、停机模式:

可执行指令half()进入停机模式,该模式下主cpu和外设全部停止,达到最低功耗,只能由外部中断进行唤醒。

3、快速活跃停机模式:

在执行指令half()之前,如果你使能了AMU功能,则进入快速活跃停机模式,该模式下由于主电压调节器打开,在受到AMU或外部中断触发时,可快速唤醒。

4、慢速活跃停机模式:

在快速活跃停机模式下,如果设置内部时钟寄存器CLK_ICKR的REGAH位清零。则进入慢速活跃停机模式,该模式主电压调节器关闭,MCU内核由低功耗电压调节器(LPVR)供电,唤醒时间相对较长。

关于IO模拟时序(SPI)的注意事项

judy的头像

原则:有硬件I2C、SPI时尽量用硬件操作,省去IO模拟繁琐的时序调试。但在内部资源不够时就要用IO模拟总线了。

关于短延时:

模拟时序时是否需要延时要看MCU与device的相对速度。比如I2C如果400K的速率和MCU动辄几十M的速率不再一个量级,肯定要通过延时调整时序;但对于SPI因为其速度很高,甚至有的比单片机的速度还高,这时就没必要延时了。

关于IO模拟的收发函数是否要合并成一个:

对于SPI因为是全双工,所以可以分开,当然也可以合并成一个(发送时不需要返回值,而接收时此时参数是要发送的数据,返回值是要读的值)

关于在什么跳变沿操作:

比如芯片手册中说到在上升沿采样/锁定(也就是在搞定平之后值必须稳定),那么单个位bit的收发都应该在0->1之间进行操作。

关于时钟极性和时钟相位:

STM32中AHB总线、APB2总线、APB1总线这些是什么?

judy的头像

一直不明白有STM32中AHB总线、APB2总线、APB1总线这些是是什么??

所谓地址映射,就是将芯片上的存储器 甚至I/O等资源与地址建立一一对应的关系。如果某地址

对应着某寄存器,我们就可以运用C语言的指针来寻址并修改这个地址上的内容,从而实现修改该寄存器的内容。

正是因为头文件中有了对于各种寄存器和I/O端口的地址映射,我们才可以在51单片机

程序中方便地使用P2^0 =0xFF; TMOD =0xFF等赋值句子对寄存器进行配置,从而控制单片机。

其实地址总线就是就是用来存放地址的,Cortex-M3的地址映射也是类似的,Cortex-M3有32根地址线,所以它的寻址空间大小为2^32

bit=4GB。(这里什么32跟地址线不需要去纠结了,只要知道配置成了4G的地址就行)

然后APB2总线就是指特定的一段地址,如:0x4001 0000—XXXX

拓展:

计算机硬件设备有传输数据和地址的线路,有的计算机数据线和地址线是公用的,就要采用分时处理的方式,有的计算机实际地址线路数少于集成电路的地址线路数,就要采用分段寻址的方式。

因为要共用,所以叫总线(bus)有数据总线和地址总线。

页面

订阅 RSS - judy的博客