tag 标签: 松江嵌入式linux培训

相关博文
  • 热度 19
    2012-4-4 12:23
    2171 次阅读|
    0 个评论
      作者:下家山 (转载,请注明) 一:60个中断源        S3c2440共有60个中断源。        主中断源如下: 子中断源如下:     二:中断优先级        S3c2440共有7组基于优先级轮转的冲裁机制来控制32个中断源。   说明: ①ARBITER6所控制的REQ0,1,2,3,4,5实际上对应ARBITER0,1,2,3,4,5 ②REQ0在任何情况下具有最高优先级,REQ5具有最低优先级;   对这句话的理解:   对ARBITER1-4来说,在任何情况下:REQ0具有最高优先级,REQ5具有最低优先级   对ARBITER6来说,在任何情况下:ARBITER0具有最高优先级,ARBITER5具有最低优先级 2.1 优先级控制原理        S3c2440是通过Priority Register(优先级寄存器)来控制32个中断请求的,而在这个寄存器中是通过ARB_MOD(PRIORITY )和ARB_SEL(PRIORITY )来区分优先级的。       2.1.1 当ARB_MOD为0        REQ1-4(REQ0,5优先级固定)优先级不轮转,顺序即为开始设置好的顺序。        复位值: ARB_SEL0 00 优先级次序:REQ1REQ2REQ3REQ4(即:EINT0EINT1EINT2EINT3); ARB_SEL1 00 优先级次序:REQ0 REQ1REQ2REQ3REQ4REQ5 (即:EINT4_7EINT8_23INT_CAMNbatt_FLTINT_TICKINT_WDT/AC97); ARB_SEL2 00 优先级次序:REQ0 REQ1REQ2REQ3REQ4REQ5 (即:INT_TIMER0 INT_TIMER1 INT_TIMER2 INT_TIMER3 INT_TIMER4 INT_UART2); ARB_SEL3 00 优先级次序:REQ0 REQ1REQ2REQ3REQ4REQ5 (即:INT_LCD INT_DMA0 INT_DMA1 INT_DMA2 INT_DMA3 INT_SDI); ARB_SEL4 00 优先级次序:REQ0 REQ1REQ2REQ3REQ4REQ5 (即:INT_SPI0 INT_UART1 INT_NFCON INT_USBD INT_USBH INT_IIC); ARB_SEL5 00 优先级次序:REQ1REQ2REQ3REQ4 (即:INT_UART0INT_SPI1INT_RTC INT_ADC); 其他组值: ARB_SEL bits are 01b, the priority order is REQ0, REQ2, REQ3, REQ4, REQ1, and REQ5. ARB_SEL bits are 10b, the priority order is REQ0, REQ3, REQ4, REQ1, REQ2, and REQ5. ARB_SEL bits are 11b, the priority order is REQ0, REQ4, REQ1, REQ2, REQ3, and REQ5. 具体优先级次序不一一列出。     2.1.2 当ARB_MOD为1 当ARB_MOD==1,REQ1-4优先级次序会随着当前中断服务程序轮转: (REQ0和REQ5因为优先级固定而不参与轮转) If REQ0 or REQ5 is serviced, ARB_SEL bits are not changed at all. If REQ1 is serviced, ARB_SEL bits are changed to 01b. If REQ2 is serviced, ARB_SEL bits are changed to 10b. If REQ3 is serviced, ARB_SEL bits are changed to 11b. If REQ4 is serviced, ARB_SEL bits are changed to 00b. 上面是来自s3c2440 datasheet的原话,怎么理解呢? ARB_SEL bits are 00b, the priority order is REQ0, REQ1, REQ2, REQ3, REQ4, and REQ5. ARB_SEL bits are 01b, the priority order is REQ0, REQ2, REQ3, REQ4, REQ1, and REQ5. ARB_SEL bits are 10b, the priority order is REQ0, REQ3, REQ4, REQ1, REQ2, and REQ5. ARB_SEL bits are 11b, the priority order is REQ0, REQ4, REQ1, REQ2, REQ3, and REQ5. 如果ARB_SEL初始值为00,即优先级次序为REQ0 REQ1REQ2REQ3REQ4REQ5 当当前中断是REQ1,并且处理完毕,则ARB_SEL自动改变到01,即优先级次序轮转一次变成REQ0 REQ2REQ3REQ4REQ1REQ5 紧接着REQ2中断发生并处理完毕,则ARB_SEL自动改变到10,即优先级次序轮转一次变成REQ0 REQ3REQ4REQ1REQ2REQ5 再接着REQ3中断发生并处理完毕,则ARB_SEL自动改变到11,即优先级次序轮转一次变成REQ0 REQ4REQ1REQ2REQ3REQ5 最后REQ3中断发生并处理完毕,则ARB_SEL自动改变到00,即优先级次序轮转一次变成REQ0 REQ1REQ2REQ3REQ4REQ5 REQ1REQ2REQ3REQ4就像一个链条或者说是一个履带,每发生一次中断就转动一次。   这里会有一个矛盾: 当ARB_SEL初始值为00,即优先级次序为REQ0 REQ1REQ2REQ3REQ4REQ5 此时:我们只用了REQ0,REQ1,REQ3,REQ4 当REQ3发生,并处理完毕。ARB_SEL值应该是多少??? 应该为11? 三:中断控制原理        S3c2440的中断控制原理可以通过下面的图体现出来:   可是这个图却有几个地方让人模棱两可。        疑问一:SUBSRCPND              SRCPND               INTPND        疑问二:SUBMASK                MASK 我们来看s3c2440 datasheet的定义: 3.1 Interrupt Pending Register The S3C2440A has two interrupt pending registers: source pending register (SRCPND) and interrupt pending register(INTPND). These pending registers indicate whether an interrupt request is pending or not. When the interrupt sources request interrupt the service, the corresponding bits of SRCPND register are set to 1, and at the same time,only one bit of the INTPND register is set to 1 automatically after arbitration procedure. If interrupts are masked, then the corresponding bits of the SRCPND register are set to 1. This does not cause the bit of INTPND register changed.When a pending bit of INTPND register is set, the interrupt service routine will start whenever the I-flag or F-flag is cleared to 0. The SRCPND and INTPND registers can be read and written, so the service routine must clear the pending condition by writing a 1 to the corresponding bit in the SRCPND register first and then clear the pending condition in the INTPND registers by using the same method.   3.2关于SRCPND      INTPND        当一个中断源被请求【(主中断源,即不带子中断的中断源),例如某一个外部中断引脚上出现了低电平(一般是低电平或下降沿触发中断)】        如果中断没有被屏蔽:               SRCPND对应位将置1。               与此同时,INTPND中的某一个位在得到优先级冲裁后(对应中断位)将自动置1。        如果中断被屏蔽:               SRCPND对应位将置1。               但此时,该中断不会被冲裁,也不会改变INTPND相关位,如上图所示,在MASK地方就被截断了。 3.3关于 INTPND        当INTPND某一个位被置位,此时只要CPSR中的I-flag或F-flag被置位,中断函数就会被执行。 四:外部中断 4.1 外部中断与主中断的关系   从上图可以一目了然的看出EINT8-23和EINT8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23之间的关系(EINT4-7和EINT4,5,6,7)。 4.2 外部中断控制原理     外部中断触发方式: 五:结束语        中断部分,是整个arm架构中比较难理解的部分,本文有不正确之处,请与我讨论。可以跟我发邮件!(ximenpiaoxue4016@sina.com) 转载:请注明,作者,下家山   请尊重原创!    
  • 热度 22
    2012-4-4 12:12
    2312 次阅读|
    0 个评论
      作者:下家山 (转载,请注明作者,请尊重原创) 三.关于睡眠        在marvell文档里面把睡眠与省电放在一起讲的(其实睡眠就是一种省电),我这里特意把他们挑出来,有便于更清晰的去理解。        在marvell8686(marvell其他芯片)中,我把其睡眠分成如下类:   1  Host睡眠        这里的host有点不好理解,也可以理解成卡片里面的那个CPU(ARM9核),本人认为是说我们的驱动,host driver,host睡眠就是驱动可以不管marvell8686,去做其他的事情。 ① 对应的命令 CMD_802_11_HOST_SLEEP_CFG(0x43) 在marvell 驱动中属于私有命令,例:               iwpriv ethX hscfg Condition ]               (也有这种形式      iwpriv ethX hostsleepcfg Condition ])               命令解析               ●Condition必选, 置低160ms 当host醒来时记得删除host sleep 配置参数。 如果此命令被执行,firmware讲不会接受任何其他命令。 ②.如何醒来 假设我们执行iwpriv eth1 hscfg 2 5 0xa0 当firmware从其他PC处接收到一个ping包,则GPIO 将会有一个160ms的低跳变。Host将会根据这个跳变得到唤醒。 问题:如果只有一个参数是如何唤醒iwpriv eth1 hscfg 2              **? ③.如何激活           此命令仅仅是配置,他还需要激活。那么如何激活呢?        Firmware在任何时候接收到CMD_802_11WAKEUP_CONFIRM或CMD_802_11_DEEP_SLEEP时将激活hostsleep 配置命令。 2.Firmware睡眠 ①.Firmware连上AP状态下睡眠             参见上面。 ②.Firmware没有连上AP状态下的睡眠        参见上面。 结束   转载:请注明,作者,下家山   请尊重原创!