DSP

MTK如此面试,你能答对多少

2019-07-13 17:05发布

1:MTK方案中的总线工作原理是什么?
MTK采用的是ARM核,他主要用来进行管理各个模块,其中多媒体如视频这些都是用了DSP的,DSP与ARM间有相互通信的。而ARM他分为AHB部线和APB总线。这两个总线是不同的。AHB主要用来控制高速的东西如MEMORY DMA等,而APB就是来控制外设的。如IIC,KEY,GPIO等。而APB与AHB中间有一个APB桥。这个APB桥就是用来做高低速转换。 2:按键的处理过程,从中断检测到MMI的一系列过程。
这个就更简单了。MTK的按键实际上就是用COL来做检测的,如果有人做过无扩展IC的全键盘,会很清楚。只要发现有一个COL上有电平的变化,就会生产一个中断,并发一个事件消息给KEY TASK,然后经过读寄存器,最后就得到对应的按键,这个按键放到一个环形的BUG里,然后就发一个消息出去,这个消自己只是通知MMI来读环里按键(当然发这个消息时有判断的不要问我,你可以看代码)。MMI读到后就会做一个转换。实际上就是将驱动层的按键重新映射一下。这个为什么要这样做,就是为了方便,将MMI与驱动层分开,有点软件常识的都知道。我不解答。什么长按,短按。重复按,,都是通过定时器来完成的。
3:CAMERA的工作原理
CAMERA从硬件上说起,他有VSYN HSYN MCLK 还有PCLK,这几个信号分别是MCLK是一个BB给CAM工作的时钟,大家都知道所有的DSP都要是基于时钟来运行的,这个就是他的基本时钟,内部很多的时钟都是通过这个时钟进行分频或倍频得到的。VSYN是一场的同步。HSYN是一行的同步。PCLK是一个点一个时钟,这个是用来与基带抓数据同步的。这里的行,场如果你不明白,你可以看黑白电视机原理。打字太麻烦,如果要解释,我们可以电话或其它的方式聊。CAM分为Preview与Capture。在Preview时CAM输出为YUV的格式,然后经过RGB的转换,并将此数据存到到一个BUF里,这个BUF也就是我们做MMI都知道的LAYER,然后与OSD的LAYER进行叠加,当然什么时候刷,这就是前面提到的VSYN了,这样就可以知道了,为什么我们的刷屏速度是会影响我们的preview的速率了.数据是怎么抓到BB上来的,这个就是MTK上说的ISP了.ISP后还要进行一个RESIZE,这个东西就是会将他RESIZE到我们想要的尺寸.RESIZE的数据才是放到LAYER BUF里的数据.这打字太麻烦了,简单的说一下Capture吧,他实际上就是MMI通知驱动层,我现在要一张多大的image.怎么通知的,就是MMI通过消息带下来的参数,如照片大小.还有照片格式.等一些参数.实际上在如果设置下来的图片大小与现在正在Preview的大小一样的情况下,就会将最后一个Preview的帧进行编码然后以文件的形式存起来.如果实际要的图片SIZE与PREVIEW的不同时,这时他会将PREVIEW的最后一帧后的一帧进行RESIZE得到合适的SIZE后,就进行编码,并以文件的形式保存下来.
还有一点就是VSYN与HSYN是会让BB产生中断的.自己看代码就能懂了,还有进CAM时会丢掉几帧. 4:PWM的原理,MTK哪里用到了PWM,为什么要用PWM?
看来不能太细了,,简单点
PWM的原理:这个东西在MTK里面就是一种频率不变的情况下占空比变化.占空比我不解释了..懂点的都知道.
MTK哪里用到了PWM:用得最多的就是屏的背光.还有按键灯.等
为什么要用PWM:这个就是看原理就知道了..还是占空比的事. 5:时钟信号的原理
MTK的时钟外面能看得到的有32K(32.768K)和26M(或13M).32K最先起来.然后开始运行,启动26M.26M经过内部的分频和倍频就得到了各种需要的频率.看一下这个(26*4=104).其它的不说了..为什么是用32.768这个可以算得出来的,为的就是RTC,RTC是干什么的,大家都知道. 还有我们的手机与基站的同步时钟也是分频出来的. 大家注意一下26M不是总在工作的,进入SLEEP后为了省电就会停掉,这时由32K来工作,当然32K就没有停过.26M也不会在SLEEP后总是停掉的,他会过一段时间工作一下.这样为了省电,而又不会丢掉别人打过来的电话.而如果你想测量一个26M怎么搞呢?他工作一下,停一下,你如果打开MP3或MP4,他就一直有26M出来了,为什么呢?因为这个26M也是DSP的基时钟,也就是上面我说过的DSP是用来做多媒体运算的.没有时钟指令就会跑不起来,数字电路都得有时钟这一说. 6:I2C总线的用处,什么时候需要用I2C总线
这东西太简单了,我还有点不想说..不就是一个START一个STOP一个ACK嘛,,简单得不能在简单.他可以根据器件地址进行通信..当年在学校时看了很多这资料..
什么时候需要用I2C总线:这个还问,你的器件是IIC的器件,我就得用IIC总线..这个太简单了,,你还是下次不要问了,你要问就问点具体的,一个起始信号是什么样子的,STOP是什么样子的,具体画一下,ACK是什么时候才出现的,ACK起到什么作用. 7:USB  UART  JTAG各式什么,烧程序的工作原理。
我只说一下JTAG,哪些USB,UART我就不说了,大家都天天在用,不说了
JTAG是ARM公司用来调试ARM核的一个协议.
烧程序的工作原理:MTK内部有ROM的,大家都知道.他有一个内部代码在开机时监视UART上接收到的数据,然后决定执行ROM的代码还是进入下载BIN的模式. 8:充电的过程是怎么样的?
充电.做过双电池的人都知道,我做过,我知道,哈哈
当电池电压很低时会进入预充,这时电流很少..后面的就是恒流恒压,还有最后就是为了保护电池,他在几个小时内没有充满也会停掉,有错误提示的.所以大家就不要怕你的电池充爆的事. 9:名词解释:回调函数
   以及用处,什么时候执行? 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 10:ASSETR是什么?什么情况下需要用
提示你的代码在错误的情况执行了.在你认为正常情况下不可能执行到的地方就得放这东西..这东西写代码的人要记得经常用,多用.没了 11:TYPEDEF的用法
用来声明自定义数据类型,主要是为了达到简便,还有就是在换编译环境时这东西比较有用.因为不同的编译环境数据类型占的位数有可能不一样的. 12:MTK程序中的REG是存放在哪里的?
RAM中,通过RAM的地址内容,可以找到对应的REG的地址,找到了REG的地址就可以对REG进行操作 13:全局变量,局部变量,静态局部变量各是存放在哪个位置?
全局变量静态局部变量: 存放在静态RAM中.
局部变量:存放在动态区.而这东西在函数调用时会压栈的.他可能这一次运行存放在一个地址,下一次运行时就在另一个地址了,是一个不固定的.写过汇编的都知道. 15:大小端模式是什么?MTK才用了哪种模式?
就是高位存高位,低位存低位,或者就是高位存低位,低位存高位.MTK好像是小端. 16:MTK的程序架构是什么?你有什么建议改进?
基于时实操作系统来管理.用MAKEFILE来管理编译.分为驱动层中间层和MMI层.
没有什么好的建议,个人感觉不错,我写代码都是按他们的风格来写的,,很好管理. 17:音频 视频 播放原理。
音频 视频 播放原理
这个东西我回答不了,我觉得你也回答不了,不信你自己回答..你回答我问.看你能回答出来不. 18:如何添加语言,包括字库
这个做MMI的第一步..做过MMI的人都知道. 19: MTK芯片里有CACHE吗?有片内ROM吗?有片内SRAM吗?
都有 如果有,各自存放什么?有什么作用?芯片工作中具体如何使用
CACHE 在短时间内多次得复执行相同的代码时这样可以加快速度.
片内ROM:开始上面说了,不回答了
片内SRAM:将重要的,对时间要求高的放在这里面..编译时有说明的..
20:以下两种写法有什么不同?对引起的后果进行分析
A:
void Set_CMPDN_Low(void)
{
    GPIO_WriteIO(0, gpio_camera_cmpdn_pin);
} B:
#define Set_CMPDN_Low()   GPIO_WriteIO(0, gpio_camera_cmpdn_pin) A:就是省空间.但是速度慢.
B:就是浪费空间,但是速度快.