原创 我的嵌入式的学习

2008-12-21 10:41 2336 7 7 分类: MCU/ 嵌入式

地址分配:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


在地址线不够用的时候,要接64KBRAM,又要外接一些IO设备,此时就要把地址分为页,有的页是经常要停留的,在地址分配时有一个原则,一定不要外加CPU不能理解的信号,在外加片选时一般要用高位地址线作为片选,这个问题主要考虑在外设与内存到底有什么关系,从它们的配合上去考虑问题。在CCPU对外设进行动作的时候会用到内存中的东西,比如在外设中调入的数据要暂时存储在内存中等等。


这时就要看外设对内存的使用情况,我们可以把内存中的空间分为两部分,用的是RAM 中的高位地址线进行区分,把64KBRAM分为上下两个32KB的空间,其中的A15地址线接与外设的IO来进行区分,当用于经常要与RAM交换数据的IO时,就可以让此位为有效,即为高或低32KBRAM区,此时CPUA15引脚可以用来进行IORAM的区分信号。总的来说这是一种思想,在实际的应用中尽可能要把IORAM进行统一编址。


 


C语言的基本的使用:


C语言的书写有一个整体的过程,比如一些头文件的配合使用,其中包括扩展名为.h\.c\.s的文件,这些文件在使用的时候要在一个工程文件中配合使用,用一些命令进行相互调用,以达到好的效果,在C语言的使用中还要注意的就是,C语言的移植能力强,代码是不用考虑硬件是如何工作的,这样在书写时就要考虑到每一步指令到底是怎样工作的,比如下面的代码:


Int *p=0xff;


*p=1;


代码为对某一地址写入一个数,这样在代码理解时就有好多问题,比如CPU的读写时序是什么样子的?在地址中的数据是如何存入的?首先*p指针是位于程序存储区的,它的内容是0xff,这一地址可以指向外部的IO,CPU周期中会先发一个地址信号选中IO,然后下一个周期会把数据写入,在实际的实验分析时可能会出现这几个周期并不是那么明显。如果是写入一个连续的存储区时,这还要考虑到这一数据类型所占用的存储空间,在2410int型的变量占用的一个32位大小的空间,也就是说在执行完这一语句后,相对应的连续的四个地址空间时要写入数据,如果代码中并没有体现,就会在相应位上补0


C语言的编译过程中分为编译、链接、代码优化和汇编的过程,在代码优化的过程中有时会把我们不想让被优化的语句给优化掉,所以在编写时要在不被改变的变量上面加上一个控制字:volatile加上这一限制后就不会被优化为错误的代码。这也是在硬件测试时要考虑的问题。


主控板的一些流程


在注塑机中我们主要用到了以下几种控制信号:温度,压力,流量,工业IO,以及转速与计数。


温度过程中检测温度与控制温度,在检测温度中,用的是热电偶来检测外部温度的变化,输入端会产生一个连续变化的模拟电压值,于是就要用到一个AD转换器,又因为检测到的电压值会比较小,所以还要有一个放大的过程,在实际的电路中还有一点也在考虑就是芯片的温度系数,由于工作时外部的温度是无法提前知道的,也就是说这一个板子可能要工作在不同的温度中,所以芯片要有很好的温度补偿,还好我们可以找到一些AD转换芯片,其内部中有这些功能。但是它们的温度补偿也是有一定的限度的,在超过上限时我们就可以在外部电路设计时加上一些补偿,或者是在软件书写在超过时加上一些偏移量。


AD芯片选择时主要是看它的转换精度与转换速度,对于转换精度来说并不是只看它可以多少位的数字的输入,而是要看它的有效位数;在一些需要快速检测的输入A 中,就要使AD转换的速度跟上,否则就会有错误的数据。


压力控制/电子尺,判断的是电压值或者是电流值,它是用来判断是否到某一位置时就会触发相应的动作,这一过程中也要有AD转换的过程,流量控制的主要阀值数据,有电压的输出和电流的输出,在这一过程中有用到DA转换器,DA使用时给与它的参考电压要是非常准确。主控板有好多口是用于工业上的控制,在工业上基本是24V的电压,可是在数字电路中电压是不能够达到24V的,这样就必须设计一个隔离电路。由于时间原因,我对这一方面的只是了解的水平,以后会再详细学习。


LCD控制器


2410中集成的有lCD控制器,它主要由LCDDMA控制器和时序产生器组成,用来产生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型的,其中WDLYWHL等一些延迟时间信息都可以在手册中查得到,在用示波器进行测量时,也很明显的得到这些信息,还有一些信息是有公式可以套用的。具体的我在这就不详细说明了。


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


可见只有从右边数第几行出错才能看出。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条