摘要:
wince6.0的内存管理D:\WINCE600\PLATFORM\ELCD-S3C6410-128M-SRC\FILES\config.bibMEMORY#define NKNAME NK#define NKSTART 80100000;#define NKLEN 02800000 ; 40MB,下一片内存为:0x82900000#define NKLEN 01E00000 ; 30MB, 下一片内存为:0x81F00000#define RAMNAME RAM;#define RAMSTART 82900000#define RAMSTART 81F00000;#define RAMLEN 阅读全文
摘要:
Linux下TI omap芯片 MUX 配置分析(以AM335X芯片为例)2012-02-07 15:15:23分类:LINUX 在移植内核的时候,通常会遇到引脚复用(MUX)的配置问题。在现在的Linux内核中,对于TI的ARM芯片,早已经有了比较通用的MUX配置框架。这对于许多TI的芯片都是通用的,这次看AM335X的代码顺手写一下分析,以备后用。一、硬件 对于许多TI的芯片来说,引脚复用的配置是在Control Module(配置模块)的寄存器里配置的,(这个和三星的CPU有点不同,三星的一般在GPIO的寄存器中配置)。所以当你需要配置这些寄存器的时候,请到数据手册的Control .. 阅读全文
摘要:
自从有了操作系统后,就诞生了一种职位叫:驱动程序开发。本文描叙驱动开发所需要的学习方式。 开发驱动程序和编写应用程序之间的区别从招聘岗位可以看出:程序设计师和驱动开发师,它们是设计和开发的区别。设计重点在需求阶段,开发在于学习阶段。所以说,两者的主要区别是:编写应用程序不需要经常性的学习,但是,开发驱动程序却需要经常性的学习。 现实情况是,你会编写这个驱动,并不见得你能编写那个驱动,每个驱动... 阅读全文
摘要:
嵌入式程序员是在基于硬件平台的底层程序员。 嵌入式程序员的工作需求有三:移植BSP、编写驱动程序、编写驱动测试程序,其中要属编写驱动的工作量比较多。 嵌入式程序员需要经常做的事情为三方面:查看数据手册、查看电路原理图、了解协议。 做这些事情的目的就是编写代码。 编写驱动工作量比较多的原因是:ARM9、ARM11等各类芯片比较多,芯片有许多的外设功能,每一个外设都需要驱动,所以,主要的工作量就是... 阅读全文
摘要:
按怎样的顺序清理中断的PND位才安全? 下面是一款ARM芯片的一个中断控制器的寄存器图,涉及中断PND位的寄存器有“EINTPEND、SRCPND、INTPND”,另外外设控制器或外设芯片内也有PND相关的寄存器(这里称为:DevPND),既然有多级PND位,所以清理PND位的时候有个先后次序,而且这个顺序还不能搞错,搞错就会造成系统不稳定。 在程序里面,当中断服务程序处理完外设中断后,就需要清零PND,以便接收设备下一次中断,如下代码所示: //// 清除中断标志 rEINTPEND = (1<<4); // 清除第二级的中断标识 rSRCPND = (1<<4); 阅读全文
摘要:
从前面的介绍,我们知道了裸机中断处理的流程、WINCE驱动的中断处理,但是,WINCE底层是怎么处理中断的呢?这里就是介绍WinCE系统的OAL层的中断处理。它和裸机的处理总体一样,只是实现细节方面有点区别,具体流程如下:一、在OAL层的初始化函数,在系统启动的过程中被调用,如下所示:BOOL OALIntrInit(){ BOOL rc = FALSE; // Initialize interrupt mapping OALIntrMapInit(); // First get uncached virtual addresses g_pIntrRegs =... 阅读全文
摘要:
现在有许多高端的ARM芯片,像苹果、三星、华为都采用ARM芯片做为智能手机芯片。这篇文章介绍基于ARM的WinCE操作系统的驱动的中断分析。WinCE驱动分为两类,这里介绍流驱动,流驱动比较简单。关于流驱动,下面是一张框图,描叙了流驱动的地位:我们从右往左看上面的那张图,最右边是应用程序。应该程序通过CreateFile、WriteFile、ReadFile、IoCtrl、CloseFile这几个函数来访问驱动,这和其他的操作系统是一样的,WindowsXP、Linux都是如此。流驱动是实现了一批函数的库(DLL),包括XXX_Init、XXX_Deinit,上面的框图都列出来了。在使用驱动之 阅读全文
摘要:
EINT4中断的裸机处理这是基于S3C2410的EINT4中断的裸机处理,当中断发生时就把LED灯取反显示。下面是电路图。上面是外部KEY连接到CPU的EINT4引脚上面,即:按下键就会产生一个中断。按照先前介绍的,中断处理流程来介绍,包括:初始化中断、处理中断、处理完毕恢复中断。一、引导代码int main(void){ EINT_init(); // 外部中断初始化、中断控制器初始化 IRQEnable(); // 使能IRQ中断 (清零CPSR寄存器的I位) while(1); // 等待外部中断}二、初始化代码函数:EINT_init。 EINT... 阅读全文