TI笔试总结

问:嵌入式系统中的两种处理方式?

答:中断(interrupt)事件(event)

事件:比如定时器事件,可触发ADC采样,实现定时采样,事件不需要中断服务函数,不需要CPU干预进入中断。

中断:若开了中断,定时器可触发中断,此时需要CPU介入,程序进入中断服务函数。

中断和事件的触发源可以是一样的,之所以分成2个部分,是由于中断需要CPU参与,需要软件的中断服务函数才能完成中断后产生结果。但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD转换等。


举个例子:外部I/O触发AD转换,来测量外部物品的重量

如果使用传统的中断通道,需要I/O触发产生外部中断,外部中断服务程序启动AD转换,AD转换完成中断服务程序提交最后结果。

若使用事件通道,I/O触发产生事件,然后联动触发AD转换,AD转换完成将数据存入寄存器。

相比之下,事件不要软件参与,并且响应速度块。

可以这样简单的认为:事件机制提供了一个完全由硬件自动完成的从触发到产生结果的通道,不要软件的参与,降低了CPU的负荷,节省了中断资源,提高了响应速度(硬件总快于软件),是利用硬件来提升CPU芯片处理事件能力的一个有效方法。


如下图所示:红线表示事件蓝线表示中断



问:AD表示精度有哪两种方式

答:DNL(Differencial NonLiner)微分非线性度

INL(Interger NonLiner)积分非线性度

首先我们来区别精度与分辨率:简单点说,”精度”描述物理量的准确程度,“分辨率”用来描述刻度划分。从定义上看,这两个量应该是风马牛不相及的。简单做个比喻:有一把塑料尺,它的量程是10厘米,上面有100个刻度,最小能读出1毫米的有效值。那么我们就说这把尺子的分辨率是1毫米,或者量程的1%;而它的实际精度就不得而知了(假如是0.1毫米)。当我们用火来烤一下它,并且把它拉长一段,然后再考察一下它。我们不难发现,它还是有100个刻度,它的“分辨率”还是1毫米,跟原来一样!然而,您还会认为它的精度还是原来的0.1毫米么。


DNL误差定义为实际量化台阶与对应于1LSB的理想值之间的差异。对于一个理想ADC,其微分非线性为DNL = 0LSB,也就是说每个模拟量化台阶等于1LSB (1LSB = VFSR/2^N,其中VFSR为满量程电压,N是ADC的分辨率),跳变值之间的间隔为精确的1LSB。若DNL误差指标≤ 1LSB,就意味着传输函数具有保证的单调性,没有丢码。当一个ADC的数字量输出随着模拟输入信号的增加而增加时(或保持不变),就称其具有单调性,相应传输函数曲线的斜率没有变号。DNL指标是在消除了静态增益误差的影响后得到的。具体定义如下:

DNL = |[(VD+1-VD)/VLSB-IDEAL - 1] |,其中0 < D < 2^N- 2

VD是对应于数字输出代码D的输入模拟量,N是ADC分辨率,VLSB-IDEAL是两个相邻代码的理想间隔。较高数值的DNL增加了量化结果中的噪声和寄生成分,限制了ADC的性能,表现为有限的信号-噪声比指标(SNR)和无杂散动态范围指标(SFDR)。



INL误差表示实际传输函数背离直线的程度,以LSB或满量程的百分比(FSR)来度量。这样,INL误差直接依赖于与之相比较的直线的选取。至少有两个定义是常用的:最佳直线INL”端点INL”

  • 最佳直线INL定义中包含了关于失调(截距)和增益(斜率)误差的信息,以及传输函数的位置(在后面讨论)。它定义了一条最接近ADC实际传输函数的直线。没有明确定义直线的精确位置,但这种方法却具有最好的可重复性,能够真正描述器件的线性特征。
  • 端点INL所采用的直线经过转换器传输函数的两个端点,因而也就确定了直线的精确位置。这样,对于一个N位ADC来讲,这条直线就由其零点(全0)和其满度(全1)点确定。

最佳直线方法通常被作为首选,因为它能产生比较好的结果。INL是在扣除了静态失调和增益误差后的测量结果,可用下式表示:

INL = | [(VD - VZERO)/VLSB-IDEAL]- D |,其中0 < D < 2N-1

VD是数字输出码D对应的模拟输入,NADC的分辨率,VZERO是对应于全零输出码的最低模拟输入,VLSB-IDEAL是两个相邻代码的理想间隔。



举个通俗点的例子:

INL表示了ADC器件在所有的数值点上对应的模拟值,和真实值之间误差最大的那一点的误差值。也就是,输出数值偏离线性最大的距离。单位是LSB (即最低位所表示的量)。比如12位ADC,INL值为1LSB。那么,如果基准4.095V,测某电压得的转换结果是1000,那么,真实电压值可能分布在 0.999~1.001V之间。对于DAC也是类似的,INL值为8LSB,那么,如果基准4.095V,给定数字量1000,那么输出电压可能是0.992~1.008V之间。INL强调本身对应的值。

下面再说DNL值。理论上说,模数器件相邻量个数据之间,模拟量的差值都是一样的。就相一把疏密均匀的尺子。但实际并不如此。一把分辨率1毫米的尺子,相邻两刻度之间也不可能都是1毫米整。那么,ADC相邻两刻度之间最大的差异就叫DNL。DNL值如果大于1,那么这个ADC甚至不能保证是单调的,输入电压增大,在某个点数值反而会减小。这种现象在SAR(逐位比较)型ADC中很常见。某12位ADC,INL=8LSB,DNL=3LSB(性能比较差),基准4.095V,测A电压读数1000,测B电压度数1200。那么,可判断B点电压比A点高197~203mV。而不是准确的200mV。对于DAC也是一样的,某DAC的DNL值3LSB。那么,如果数字量增加200,实际电压增加量可能在197~203mV之间。DNL强调增量或对比。

posted @ 2014-05-03 17:12  水煮海鲜  阅读(274)  评论(0编辑  收藏  举报