硬件架构的艺术(四)

处理字节顺序

字节顺序定义数据在计算机系统中的存储格式。它描述存储器中地址的最高有效位MSB和最低有效位LSB的位置。

  • 大端模式(Big Endian):将MSB保存在最低存储器地址处
  • 小端模式(Little Endian):将LSB保存在最低存储器地址处
    保存十六进制数AABBCCDD

大端小端的特点

小端模式:因为最低位字节偏移值为0,并首先访问,访问1、2、4或更长字节数的汇编语言指令能按同样方式处理所有格式,而且由于地址偏移量与字节数1:1的关系,多精度的数学程序也相对容易编写。

大端模式:因为先访问高阶字节,所以很容易通过查看偏移量为0的字节来判断数值的正负,所以无须接收所有字节包就能知道符号信息。由于数字同时也以打印的次序保存,所以对从二进制转化为十进制的程序有效。大端模式读取和转存

例如:以两种不同形式保存十六进制数0x12345678
大多数位图图像(显示和内存安排)映射成“MSB在左侧”的方案即大端方式,可以使体系结构能够自然地移动和存储大于一个字节的图像元素。

常用计算机体系
常用文件格式

处理字节顺序不匹配问题

在两台设备通信时,每个处理器和每种通信协议必须选择一种字节顺序,如果需要通过存储器通信,两种不同字节顺序的处理器就会产生冲突。例如:小端模式处理器访问大端模式网络时需要用软件对字节重新排序。
(而TCP/IP所有的协议层都定义为大端模式,即如(IP地址、包或校验和)必须首先发送或接收最高有效字节),所以即使各终端计算机都是小端模式,之间所传输的数据必须先转化为大端模式,然后在接受端转化为小端模式。

方法:

  1. 处理字节顺序不匹配最简单的方法就是为系统选择一种“字节顺序类型”,并将全部其他不同字节顺序的模块转化为目标“字节顺序类型”。
    而字节顺序类型由CPU体系结构的实现决定,所以在对第三方IP选型时要考虑是否支持“双字节顺序”结构,方便编程为“大端模式”或“小端模式”。
  2. 保持数据完整性(数据不变,改变地址)
    域左边为MSB,右边为LSB。即如果用16位域表示整数并进行加操作,会对LSB加1,并且所有进位从LSB向MSB进行,大端或小端地址体系结构是相同的。
    首先接收到连续帧的头部,然后是帧的其余部分

接收到的连续帧以“Type”、“H2"、”H1"和“H0"的顺序保存在外设存储器中。帧中的域可能跨多个字节并不在字节边界终止。

数据不限行
需要对访问外设RAM的存储器的地址进行修改,对地址的改动基于传送数据的大小。
所以即对地址总线最后两位LSB取反,数据不变。

使用上面的方案可以使字节顺序转换对软件透明,并能确保数据完整性在字节顺序转换过程中不会被破坏
该方法的数据流:
1、DMA发出对外设存储器的读字节操作
2、此时系统产生的地址为0x00,但是小端模式设备所看到的地址为0x03
3、设备存储器对该地址解码,访问位31:24
4、DMA对系统的大端模式存储器发出按字节方式的写操作
5、产生0x00地址(字节访问)
6、大端模式存储器将该访问解码为写入位31:24
7、由于来自于小端模式存储器的数据处于同样的字节区域,所以可以保持数据的完整性。

  1. 保持相同的地址区间(地址不变,改变数据)
    某些应用程序或系统不需要数据保持特定的次序,但是需要在字节顺序转换后数据字节保持在同样的地址区域,这时需要使用地址不变的字节顺序转换。
    对于地址不变的系统,访问字节”Type“的地址偏移量永远是0x3,而如果使用上一节的方法,访问该字节需要使用不同的地址偏移量。需要修改或交换从外设RAM存储器中读到的数据值。

  2. 软件字节变换

  • 交换汇编指令

  • 用于交换字节的软件库宏

  • 协议特定的交换函数

  • 制定的交换函数

消抖技术

抖动

在电子设备内两个金属触点随着触点的断开闭合便产生了多个信号,当触点撞击在一起,惯性和弹性形成抖动,导致产生一个快速的脉冲电流而不是从0电流到全电流的转换。这个影响在交流电源线路不明显,由于抖动太快不至于影响大多数设备。但在某些模拟和逻辑电路中可能产生问题(如数字计时器、个人计算机或微处理器等设备的输入)

开关行为

下面是一个简单的带有上拉电阻的开关。并展示了当按键按下和释放时相应的输出。
如果是计算机或者微处理器等设备的输入,则会产生问题。计数器将出现多次计数而不是一次计数。

开关种类

开关种类

消抖技术

RC消抖

RC消抖是最常见的,最容易的消抖电路,就是把一个电阻和电容连接在一起,开关连接至中间。
开关未使用的默认状态的高电平,当开关闭合后,输出电压通过电容缓慢减低至0;当开关打开后,输出电压通过电容缓慢上升至0;以此减小抖动的影响(即使电压不会瞬变)。R2使电容器缓慢充放电,同样限制了流过开关触点,防止电容器由于瞬间大量电涌烧坏触点。但是如果时间常数过大则开关对快速”断开“或”闭合“可能无法反应。

RC消抖电路

硬件消抖电路

这是另一种硬件方法,它使用了由一对与非门电路制作的交叉耦合闩,提供一种完全的消抖而不用考虑延时限制,而且响应速度和触点一样块。
当开关处于位置”a“时,门电路”1“的输出就是逻辑高,而门电路拉至逻辑低;如果开关在触点间移动并不在这两点间的区域短暂停止,由于电路2将逻辑0送回门电路1 使其保持状态,保证锁存器的输出为非抖动。
SR消抖电路

软件消抖电路

在足以让抖动停止后的时间读出开关

即每400-500毫秒读出开关,并设置状态标志指示开关状态。但是响应时间慢,如果开关操作时间小于500毫秒就会失败(上述的方法不提供EMI保护,通过为开关提供足够的时间来停止抖动可以减小绝大多数随机噪声脉冲,但取开关状态单一短脉冲干扰可能被当作触点转换,修改软件在每500毫秒循环多次读取输入)

开关启动时中断CPU并在中断服务程序(ISR)中消抖

通常,在激活触点时,会产生中断,调用一个子程序(中断服务程序)
在程序中,DR调用一个子程序DELAY,其作用就是消耗足够长的时间使得触点停止抖动,此时DR检查触点是否在激活状态(即用户按下开关,但是开关还没有松开)。如果处于激活状态,DR等待触点清零。

使用计数器消除噪声并验证开关状态

制作一个计数器,在信号为逻辑低时计数,在逻辑为高时重置计数器。如果计数器到达某个固定值,该值应当比噪声脉冲大一至两倍,意味着电流脉冲为有效脉冲。

  • 与消抖相关的CPU开销应当最小化
  • 非消抖开关必须连接已编程序的I/O引脚,绝不能连接CPU的中断,否则抖动会引起多重中断,同样会增加CPU的负担,每次中断CPU都会执行中断服务程序(ISR)
    与开关状态相关的中断不应当用作时钟或触发器的数据信号
  • 开关输入取样的频率不应当与外界事件同步,否则产生周期性的EMI。(以常用50/60HZ频率取样应当避免)
  • 系统应当对开关输入立即响应(LED或显示屏,以避免显示器或LED出现混乱的情况) 使用定时器有规律地中断CPU,而不是用延时来等待输入稳定

电磁兼容性能设计指南

电磁兼容设计(EMC)以避免系统内有害的电磁干扰。
电磁兼容性是一个系统在预期的电磁环境中运行而不对其他系统产生不利影响或不受其他系统不利影响的能力。
一个系统电磁兼容性应满足:

  • 不敢收其他系统
  • 不易受其他系统的干扰
  • 自身不受干扰

系统电磁兼容性包括辐射,免疫和兼容性。
4种耦合机理电磁干扰理论
公式影响集成电路抗干扰性能的几个因素

  • 作为噪声源的微控制器(电源和地线中的电流,振荡器行为,系统时钟电路,输出行为,开关噪声,I/O开关)
  • 电压,频率,接地,电路板
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章