这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » OS,IRQ,OS,IRQ 什么是受OS管理的IRQ,什么是不受OS管理的IRQ

共2条 1/1 1 跳转至

OS,IRQ,OS,IRQ 什么是受OS管理的IRQ,什么是不受OS管理的IRQ,如何使用和区分?

院士
2006-09-17 18:14:16     打赏
OS,IRQ,OS,IRQ 什么是受OS管理的IRQ,什么是不受OS管理的IRQ,如何使用和区分?



关键词: 什么     管理     不受     如何     使用     区分    

院士
2006-12-22 22:43:00     打赏
2楼
问 我一直搞不清,什么是什么是受OS管理的IRQ,什么是不受OS管理的IRQ
如何知道他是受OS管理的IRQ。在编程中如何编写受OS管理的IRQ
编写受在编程中如何编写受OS管理的IRQ要注意什么呢?
一直愚钝。望指点。 1: 应该在于堆栈空间不同 2: 不受OS管理的中断,在中断中是不能使用OS API的 3: 那位能给一个受OS管理的IRQ例子让研究研究。 4: 一般来说,还是全让OS管理吧,中断响应时间慢不了多少 5: TO pubstar: 就是不知道如何让OS管理呀?就是不知道如何让OS管理. 6: 我想是不是非OS的用__irq写服务程序,OS的用IRQ_Exception 7: 文件1;
;********************************************************************************************************
;                                                uC/OS-II
;                                          The Real-Time Kernel
;
;                           (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
;                                           All Rights Reserved
;
;********************************************************************************************************
;


        AREA  UCOS_ARM_ASM_INT, CODE, READONLY
           

;*********************************************************************************************************
;                                            IRQ HANDLER
;
;        This handles all the IRQs
;        Note: FIQ Handler should be written similar to this
;        中断返回时需要任务切换中断按如下的格式在注册(引用上面的宏定义) $IRQ_AsmEntery HANDLER $IRQ_CEntry   
;     
;*********************************************************************************************************

        IMPORT  OSIntEnter
        IMPORT  OSIntExit

        IMPORT  OSIntCtxSwFlag
        IMPORT  _IntCtxSw

  
        MACRO     
$IRQ_AsmEntery HANDLER $IRQ_CEntry
        EXPORT  $IRQ_AsmEntery          ; 输出的标号
        IMPORT  $IRQ_CEntry             ; 引用的外部标号
                
$IRQ_AsmEntery                          ;本移置不支持中断嵌套,故中断中,无需关中断
        stmfd sp!,{r0-r3,r12,lr}

        bl OSIntEnter
        bl $IRQ_CEntry
        bl OSIntExit

        ldr r0,=OSIntCtxSwFlag
        ldr r1,[r0]
        cmp r1,#1
        beq _IntCtxSw

        ldmfd sp!,{r0-r3,r12,lr}
        subs pc,lr,#4        
        MEND

                                    ;中断注册        
;定时器0中断
IRQASMTimer0 HANDLER IRQCTimer0     ;分配到VICVectAddr15

;定时器1中断
IRQASMTimer1 HANDLER IRQCTimer1     ;分配到VICVectAddr8

;串口0中断
IRQASMUart0  HANDLER IRQCUart0      ;分配到VICVectAddr13

;串口1中断
IRQASMUart1  HANDLER IRQCUart1      ;分配到VICVectAddr10

;外部中断0中断
;IRQASMEx0     HANDLER IRQCEx0

;外部中断1中断
;IRQASMEx1    HANDLER IRQCEx1       

;外部中断2中断
IRQASMEx2    HANDLER IRQCEx2        ;分配到分配到VICVectAddr2,打印电机复位信号

;外部中断3中断
IRQASMEx3    HANDLER IRQCEx3        ;分配到分配到VICVectAddr3,打印电机同步信号

;SPI中断
;IRQASMSpi    HANDLER IRQCSpi

;I2C中断        
IRQASMI2c    HANDLER IRQCI2c        ;分配到VICVectAddr6

;RTC中断        
IRQASMRTC    HANDLER IRQCRTC        ;分配到VICVectAddr14,每秒中断一次或报警

          END
   
                        
8: 定时器0就是接受内核管理了void TargetInit(void){
    TIMER0_PR=0;                                    //设置定时器分频为0,即不分频
    TIMER0_MCR|=0x03;                               //匹配通道0匹配中断并复位T0TC    
    TIMER0_MR0=(double)Fpclk/OS_TICKS_PER_SEC;      //设置比较值,每秒产生OS_TICKS_PER_SEC个时钟
    TIMER0_TCR=0x03;                                //定时器与预分频计数器使能并同步
    TIMER0_TCR=0x01;                                //定时器使能        
    VICVectCntl15=0x24;                             //定时器0中断通道采用最低优先级
    VICVectAddr15=(U32)IRQASMTimer0;                //设置中断服务程序地址向量
    VICIntEnable=0x00000010;                        //使能定时器0中断
    WDTC=(double)Fpclk/4/2;                         //定时器初值,每秒喂两次即可,即500ms内喂一次即可
    WDMOD=0x03;                                     //使能看门定时器中断和复位
    WDFEED=0xaa;                                    //喂狗一次,由于此时中断未打开,所以不用关中断
                                                    //第一个任何执行时,才打开中断
    WDFEED=0x55;                                    //其它地方只在空闲任何喂狗,如果500ms不执行一次空闲,即复位        
}

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]