1嵌入式系统原理柏桂枝4.5基于S3C44B0X应用开发介绍4.5.1S3C44B0X时钟电源管理的功能及应用开发4.5.2S3C44B0X存储控制器功能及应用开发4.5.3S3C44B0XI/O端口功能及应用开发4.5.4S3C44B0X中断控制器功能及应用开发4.5.5S3C44B0XUART接口功能及应用开发4.5.3S3C44B0XI/O端口功能及应用开发1.S3C44B0XI/O功能概述2.S3C44B0XI/O功能及应用描述(1)I/O端口在嵌入式系统中的功能概述I/O接口是主机与外围设备之间交换信息的连接部件。I/O接口有两种编址方式。(2)I/O端口的功能概述4.5.3S3C44B0XI/O端口功能及应用开发1.S3C44B0XI/O功能概述2.S3C44B0XI/O功能及应用描述3、S3C44B0XI/O端口应用编程1)端口初始化voidport_init(void){//CAUTION:Followtheconfigurationorderforsettingtheports.//1)settingvalue//2)settingcontrolregister//3)configurepull-upresistor.//PORTAGROUP//9876543210//A24A23A22A21A20A19A18A17A16A0//0111111111rPCONA=0x1ff;//PORTBGROUP//109876543210///CS5/CS4/CS3/CS2/CS1GPB5GPB4/SRAS/SCASSCLKSCKE//EXTNICUSBIDESMCNCNCSdramSdramSdramSdram//?????OutOut????//11111001111rPDATB=0x7ff;rPCONB=0x1cf;2、IO端口读写代码voidled_display(intnLedStatus){f_nLedState=nLedStatus;//changetheled'scurrentstatusif((nLedStatus&0x01)==0x01)rPDATC&=0xFEFF;//GPC8:LED1(D1204)onelserPDATC|=(18);//off将GPC8位清零,其他位不变将GPC的D8位置1,其他位不变if((nLedStatus&0x02)==0x02)rPDATC&=0xFDFF;//GPC9:LED2(D1205)onelserPDATC|=(19);//offif((nLedStatus&0x04)==0x04)rPDATF&=0xEF;//GPF4:LED3(D1206)onelserPDATF|=(14);//offif((nLedStatus&0x08)==0x08)rPDATF&=0xF7;//GPF3:LED4(D1207)onelserPDATF|=(13);//off}将GPC9位清零,其他位不变将GPC的D9位置1,其他位不变将GPF的D4位清零,其他位不变,将GPF的D4位置1,其他位不变将GPF的D3位清零,其他位不变,将GPF的D3位置1,其他位不变4.5基于S3C44B0X应用开发介绍4.5.1S3C44B0X时钟电源管理的功能及应用开发4.5.2S3C44B0X存储控制器功能及应用开发4.5.3S3C44B0XI/O端口功能及应用开发4.5.4S3C44B0X中断控制器功能及应用开发4.5.5S3C44B0XUART接口功能及应用开发对通用计算机而言,中断控制包括:中断请求管理、中断使能/禁能、中断优先级分配、中断优先级判定、中断屏蔽/解除屏蔽、中断响应、现场保护和恢复等等。中断控制由CPU内部的中断处理逻辑和寄存器,以及外部的中断控制器接口芯片完成。从功能角度看,嵌入式处理器与通用处理器的中断控制器拥有基本相同的功能,只是实现细节不同。1、中断控制器概述应用程序用户·ISR应用程序时间轴中断请求中断响应时间保存现场恢复现场1、中断控制器概述1、中断控制器概述ARM系列处理器有两种中断请求类型:普通中断请求—IRQ快速中断请求—FIQIRQ中断请求InterruptRequest也叫IRQ异常,属于普通中断请求。由nIRQ引脚上的低电平触发。IRQ中断请求的优先级低于FIQ,当FIQ信号进入时,IRQ被暂停执行。IRQ—普通中断请求FIQ—快速中断请求FIQ中断请求FastInterruptRequest也叫FIQ异常,属于快速中断请求。用于高速数据传输和通道处理在ARM工作模式下,FIQ拥有充足的私用寄存器。无需程序员在编程时考虑节省寄存器,从而减小了任务切换时的开销。S3C44BOX具有30个中断源,包括1个看门狗定时器,6个定时器,6个UART,8个外部,4个DMA,2个RTC,1个ADC,1个IIC和1个SIO共30个中断。S3C44BOX内置的中断控制器可以接收来自30个中断源的请求。S3C44B0X支持新的中断处理模式称为矢量中断模式。中断控制器的角色,就是响应来自FIQ(快速中断请求)或IRQ(普通中断请求)的中断,并请求内核对中断进行处理。多个中断请求发生时,由硬件优先级逻辑确定应该有哪个中断得到服务,同时硬件逻辑使中断向量表的跳转指令加载到(0X18或0X1C)位置,在该位置执行跳转指令使程序跳到相应的中断服务线程,因此相对于传统的ARM的软件方法能够大大减少中断进入延时。2、中断控制器功能及应用描述(2)S3C44B0X的中断源序号中断源描述主单元辅单元ID中断向量地址1EINT0外部中断0mGAsGA0x000000202EINT1外部中断1mGAsGB0x000000243EINT2外部中断2mGAsGC0x000000284EINT3外部中断3mGAsGD0x0000002C5EINT4/5/6/7外部中断4/5/6/7mGAsGKA0x000000306TICKRTC时钟节拍中断mGAsGKB0x000000347INT_ZDMA0通用DMA0中断mGBsGA0x000000408INT_ZDMA1通用DMA1中断mGBsGB0x00000044序号中断源描述主单元辅单元ID中断向量地址9INT_BDMA0桥DMA0中断mGBsGC0x0000004810INT_BDMA1桥DMA1中断mGBsGD0x0000004C11INT_WDT看门狗中断mGBsGKA0x0000005012INT_UERR0/1串行口O/1错误mGBsGKB0x0000005413INT_TIMER0定时器0中断mGCsGA0x0000006014INT_TIMER1定时器1中断mGCsGB0x0000006415INT_TIMER2定时器2中断mGCsGC0x0000006816INT_TIMER3定时器3中断mGCsGD0x0000006C17INT_TIMER4定时器4中断mGCsGKA0x00000070序号中断源描述主单元辅单元ID中断向量地址18INT_TIMER5定时器5中断mGCsGKB0x0000007419INT_URXD0串行口0接收中断mGDsGA0x0000008020INT_URXD1串行口1接收中断mGDsGB0x0000008421INT_IICIIC中断mGDsGC0x0000008822INT_SIOSIO中断mGDsGD0x0000008C23INT_UTXD0串行口0发送中断mGDsGKA0x0000009024INT_UTXD1串行口1发送中断mGDsGKB0x0000009425INT_RTCRTC报警中断mGKA─0x000000A026INT_ADCAD转换结束中断mGKB─0x000000C0EINT4,EINT5,EINT6和EINT7是S3C44B0X处理器的外部中断请求引脚,它们共用同一个中断请求源。因此,ISR(中断服务子程序)要通过读取EXTINTPND3~0寄存器来区别这4个中断源,并在处理结束时通过将EXTINTPND3~0中对应位写1来清除该位。S3C44B0X“线或”的4个外部中断源S3C44B0X的中断源优先级上面的表的栏目序号代表了中断源的中断优先级。例如:EINT0,外部中断0的中断优先级为1,是具有最高优先级的中断源在例如:INT_ADC,AD转换操作结束中断的中断优先级为26,它的中断优先级最低。中断源优先级产生模块S3C44B0X的中断优先级判优小结S3C44B0X优先级产生模块的内部结构如下一页幻灯片插图所示。图中主单元(主群)的中断源优先级定义:[1]mGA、mGB、mGC、mGDmGKAmGKB;[2]mGA、mGB、mGC、mGD之间优先级可以通过对I_CMST寄存器编程设定或者可轮询图中从单元(从群)的中断源优先级定义:①sGA、sGB、sGC、sGDsGKAsGKB;②sGA、sGB、sGC、sGD之间优先级可以通过对I_PSLV寄存器编程设定或者可轮询。向量中断模式下IRQ以EINT2中断为例,IRQ处理流程如下:EINT2中断信号0X180X20执行ldrpc,=handlerEINT2转到handlerEINT2handlerhandleEINT2处执行。handlerEINT2此为宏指令,包括:保存工作状态,运行handleEINT2,恢复工作状态handleEINT2就是相应中断处理函数的首地址分支指令使跳转中断控制器为每一个中断源的中断向量地址生成一条转移机器指令。例如,如果EINT0是IRQ,则中断控制器产生一条转移指令,它从0x18转移到0x20。这样,中断控制器就产生一条0xEA000000的机器指令。用户程序代码必须为转移指令确定转移地址,让每一个向量地址上的转移指令转移到所对应的ISR(中断服务子程序)。与向量地址相对应的转移机器指令按照下面的方法计算:向量中断模式的转移机器指令=0xEA000000+((目标地址-向量地址-0x08)2)例如:定时器0中断以向量中断模式处理,跳转到它的ISR的转移指令位于0x00000060。ISR的起始地址是0x10000,则存放在向量地址0x00000060的转移指令计算算式如下:0xEA000000+((0x10000-0x60-0x8)2)=0xEA000000+0x3FE6=0xEA003FE6这就是说0xEA003FE6的32位机器指令将被写入0x00000060地址。这个机器指令通常由汇编器自动产生,无需程序员按照上面的方法计算。44BINIT.s给出的S3C44B0X一级中断向量表地址分布特殊功能寄存器中断控制寄存器中断挂起寄存器中断模式寄存器中断屏蔽寄存器IRQ向量模式相关寄存器IRQ从群优先级寄存器IRQ主群优先级寄存器当前IRQ从群优先级寄存器当前IRQ主群优先级寄存器IRQ中断服务挂起寄存器IRQ/FIQ中断挂起清零寄存器中断控制寄存器INTCON寄存器位[0]为FIQ使能位,[1]为IRQ使能位[2]选择矢量中断模式还是普通模式中断挂起寄存器INTPND共26位,每一位对应一个中断源,当中断请求产生时,相应的位就设置为1如果几个中断源同时发出中断请求,不管有没有被屏蔽,相应的挂起位置1,优先级寄存器根据优先级来响应优先级最高的中断服务程序中必须对中断挂起清零寄存器I_ISPC,F_ISPC写1来清除挂起是只读寄存器中断挂起寄存器INTPEN中断模式寄存器INTMOD共26位每一位对应一个中断源当模式位设置为1时,对应的中断以FIQ模式来处理当模式位设置为0时,对应的中断以RIQ模式来处理中断屏蔽寄存器INTMSK每一位都对应一个中断源(除了全局和保留位)屏蔽位为1时,对应的中断被屏蔽屏蔽位为0时,对应的中断正常执行如果全局屏蔽位设置为1,所有的中断都不执行注意如果使用了矢量中断模式,在中断服务程序中改变了中断屏蔽寄存