在地址线不够用的时候,要接64KB的RAM,又要外接一些IO设备,此时就要把地址分为页,有的页是经常要停留的,在地址分配时有一个原则,一定不要外加CPU不能理解的信号,在外加片选时一般要用高位地址线作为片选,这个问题主要考虑在外设与内存到底有什么关系,从它们的配合上去考虑问题。在CCPU对外设进行动作的时候会用到内存中的东西,比如在外设中调入的数据要暂时存储在内存中等等。
这时就要看外设对内存的使用情况,我们可以把内存中的空间分为两部分,用的是RAM 中的高位地址线进行区分,把64KB的RAM分为上下两个32KB的空间,其中的A15地址线接与外设的IO来进行区分,当用于经常要与RAM交换数据的IO时,就可以让此位为有效,即为高或低32KB的RAM区,此时CPU的A15引脚可以用来进行IO与RAM的区分信号。总的来说这是一种思想,在实际的应用中尽可能要把IO与RAM进行统一编址。
C语言的书写有一个整体的过程,比如一些头文件的配合使用,其中包括扩展名为.h\.c\.s的文件,这些文件在使用的时候要在一个工程文件中配合使用,用一些命令进行相互调用,以达到好的效果,在C语言的使用中还要注意的就是,C语言的移植能力强,代码是不用考虑硬件是如何工作的,这样在书写时就要考虑到每一步指令到底是怎样工作的,比如下面的代码:
Int *p=0xff;
*p=1;
代码为对某一地址写入一个数,这样在代码理解时就有好多问题,比如CPU的读写时序是什么样子的?在地址中的数据是如何存入的?首先*p指针是位于程序存储区的,它的内容是0xff,这一地址可以指向外部的IO,CPU周期中会先发一个地址信号选中IO,然后下一个周期会把数据写入,在实际的实验分析时可能会出现这几个周期并不是那么明显。如果是写入一个连续的存储区时,这还要考虑到这一数据类型所占用的存储空间,在2410中int型的变量占用的一个32位大小的空间,也就是说在执行完这一语句后,相对应的连续的四个地址空间时要写入数据,如果代码中并没有体现,就会在相应位上补0。
C语言的编译过程中分为编译、链接、代码优化和汇编的过程,在代码优化的过程中有时会把我们不想让被优化的语句给优化掉,所以在编写时要在不被改变的变量上面加上一个控制字:volatile加上这一限制后就不会被优化为错误的代码。这也是在硬件测试时要考虑的问题。
在注塑机中我们主要用到了以下几种控制信号:温度,压力,流量,工业IO,以及转速与计数。
温度过程中检测温度与控制温度,在检测温度中,用的是热电偶来检测外部温度的变化,输入端会产生一个连续变化的模拟电压值,于是就要用到一个AD转换器,又因为检测到的电压值会比较小,所以还要有一个放大的过程,在实际的电路中还有一点也在考虑就是芯片的温度系数,由于工作时外部的温度是无法提前知道的,也就是说这一个板子可能要工作在不同的温度中,所以芯片要有很好的温度补偿,还好我们可以找到一些AD转换芯片,其内部中有这些功能。但是它们的温度补偿也是有一定的限度的,在超过上限时我们就可以在外部电路设计时加上一些补偿,或者是在软件书写在超过时加上一些偏移量。
在AD芯片选择时主要是看它的转换精度与转换速度,对于转换精度来说并不是只看它可以多少位的数字的输入,而是要看它的有效位数;在一些需要快速检测的输入A 中,就要使AD转换的速度跟上,否则就会有错误的数据。
压力控制/电子尺,判断的是电压值或者是电流值,它是用来判断是否到某一位置时就会触发相应的动作,这一过程中也要有AD转换的过程,流量控制的主要阀值数据,有电压的输出和电流的输出,在这一过程中有用到DA转换器,DA使用时给与它的参考电压要是非常准确。主控板有好多口是用于工业上的控制,在工业上基本是24V的电压,可是在数字电路中电压是不能够达到24V的,这样就必须设计一个隔离电路。由于时间原因,我对这一方面的只是了解的水平,以后会再详细学习。
2410中集成的有lCD控制器,它主要由LCD的DMA控制器和时序产生器组成,用来产生LCD所需要的信号,包括:VFRAME,VLINE,VCLK,VM,VD[]等信号,其中VFRAME称为帧频信号,在它的一个周期内LCD上会把所有数据显示,VLINE称为行频信号,在它的一个周期内LCD的某一行会把数据显示,VCLK称为像素时钟信号,在它的一个周期内会把VD上数据在LCD上显示。时序图如下:<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
图一
在此图中每一个信号都是可以用软件进行设定的,主要用到一些寄存器:LCDCON1, LCDCON2, LCDCON3 ,LCDCON4 ,LCDCON5,其中每一项参数的具体数值,就要看所接的LCD的情况了,根据LCD提供的手册的内容进行设置。比方说我们用到的这一LCD屏为STN型的,其中WDLY,WHL等一些延迟时间信息都可以在手册中查得到,在用示波器进行测量时,也很明显的得到这些信息,还有一些信息是有公式可以套用的。具体的我在这就不详细说明了。
DMA控制器是可以在有效的时间中来接管CPU的总线控制权的,当DMA控制器工作时,就会一直在用户开辟的显存中提取数据,这时就会用到虚拟屏的概念,就好像是一页写满字的纸,我用一块没有纸大的镜子去看,当然是不能够一次看完,当我从第一行开始看向下不断滚动观看时就形成的滚屏显示。这一张纸就相当于虚拟屏,这一镜框才是实际屏。对于CPU这就是一个简单的问题了,显存的大小就是虚拟屏,一屏能显示的数据量就是实际屏。这其中也有一些寄存器需要设置,不再赘述。
LCD的颜色显示,此屏为8位单扫描形式,8位数据中高三位为3位红色,中间三位为3位绿色,低两位为2位蓝色,这样可以形成256种颜色,这就是我们要在显存中写入的数据,拿3位绿色为例:当为110时,LCD控制器会首先查询查找表,以看这一颜色值对应为16种绿色中的那一种,假如为D即15级,在帧频控制时会使用5/6的控制,即像素在一个VCLK中亮5次灭一次这样来产生我们要的颜色,在用示波器进行测试可以看到这一位的数据与理论上一致。如果电路中出现这样的情况,VD某一引脚始终为零,这样在屏上会出现一列无信号,分析如下:主要要从第一列中看是第几列数据无效,如为第三列则是VD0始终为低电平,因为如下表表示:
VD7 | VD6 | VD5 | VD4 | VD3 | VD2 | VD1 | VD0 |
R1 | G1 | B1 | R2 | G2 | B2 | R3 | G3 |
B3 | R4 | G4 | B4 | R5 | G5 | B5 | R6 |
G6 | B6 | R7 | G7 | B7 | R8 | G8 | B8 |
可见只有从右边数第几行出错才能看出。
文章评论(0条评论)
登录后参与讨论