这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 定时器为何不进服务子程序呢?(附程序)

共2条 1/1 1 跳转至

定时器为何不进服务子程序呢?(附程序)

院士
2006-09-17 18:14:16     打赏
定时器为何不进服务子程序呢?(附程序)



关键词: 定时器     为何     不进     服务     子程序     程序    

院士
2006-12-22 22:43:00     打赏
2楼
问 (1)----*******startup.s文件*****

Startup
         LDR    PC,    ResetAddr        ;//复位
         ...
         LDR    PC,    IRQ_Addr         ;//IRQ
         LDR    PC,    FIQ_Addr         ;//FIQ
;//文字池         
...
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     FIQ_Handler

;//-------------
InitStack

      ....
      MSR    CPSR_c, #0x05f       ;//设置用户/系统模式堆栈.
      LDR    SP, UsrStack
      
      MOV    PC,R0
;//--------------------
IRQ_Handler
      B   .  ;//for test
FIQ_Handler   
      B   .
(2)--******timer_module.c文件******

//------------------------------------------------------------------------------------------------------
// ***** Include Area *****
#include "Includes.h"

/*
--------------------------------------------------------------------------------------------------------
* Function:IRQ_Init    对中断控制进行配置
* Input:none
* Output:none
* Return:none
* Other:
--------------------------------------------------------------------------------------------------------
*/
void IRQ_Init(void)
{
    
    VICIntSelect=0x00000000;  //选择中断FIQ和IRQ方式,将所有中断配置成为IRQ

    //IRQ slot 0
    VICVectCntl0=0x24;        //Timer0定时器分配
    VICVectAddr0=(int)IRQ_Timer0_isr;
    
    VICIntEnClr=0x0;
    VICIntEnable = 0x00000010;      
   
}

/*
--------------------------------------------------------------------------------------------------------
* Function:Timer0Init    定时器Timer0初始化
* Input:none
* Output:none
* Return:none
* Other:
--------------------------------------------------------------------------------------------------------
*/
void Timer0_Init(void)
{
  
    T0TC=0;         //定时器设置为0
    T0PR=0;         //设置分频值,时钟不分频
    T0MCR=0x03;     //设置匹配后复位TC,并产生中断
    T0MR0=Fpclk/10; // 比较值(1s定时值)
    T0TCR=0x01;     //启动定时器0
    
}

/*
--------------------------------------------------------------------------------------------------------
* Function:IRQ_Timer0_isr    定时器Timer0中断处理程序
* Input:none
* Output:none
* Return:none
* Other:
--------------------------------------------------------------------------------------------------------
*/
void IRQ_Timer0_isr(void)
{
   int i,j;
    
   //for test only
   i=0;
   j=i;
   T0IR = 0x01;                // 清除中断标志

   //add code here

}

(3)
//系统时钟定义如下
#define Fosc    11059200  
#define Fcclk   (Fosc * 4)
#define Fcco    (Fcclk * 4)               
#define Fpclk   (Fcclk / 4) * 1           

int main(void)
{
    int i;
    i=i;
    /*Timer Module*/
    IRQ_Init();         
    Timer0_Init();       //定时器Timer0初始化
   while(1);
   
}
(完毕)

  问题:我在IRQ_Handler
         B   .  ;//for test
         和void IRQ_Timer0_isr(void) 函数里面
         ,设置断点,程序都不进来。
         程序一直在while(1)执行。
         
        请各位朋友帮忙,问题出于哪里,我哪里没有设置好呢?我是用ads1.2的AXD软调试的.
        另外,void __irq IRQ_Timer0_isr(void)定义的话,编译出错。 谢谢先


1: 只能进入IRQ总中断IRQ_Handler()而非中断向量!!! 2: 不懂,假如中断来了,进入IRQ_Handler
                          B   .  ;//for test
还是VICVectAddr0=(int)IRQ_Timer0_isr;对应的void IRQ_Timer0_isr(void)
函数中?

那VICVectAddr0设置来干吗的? 3: re:怎么感觉lpc的中断控制很难使用...
很多地方含含糊糊的

大家帮忙呀,怎么不进中断服务程序 4: Startup file for Philips LPC2000 device seriesVectors:        LDR     PC,Reset_Addr         
                LDR     PC,Undef_Addr
                LDR     PC,SWI_Addr
                LDR     PC,PAbt_Addr
                LDR     PC,DAbt_Addr
                NOP                            /* Reserved Vector */
;               LDR     PC,IRQ_Addr
                LDR     PC,[PC, #-0x0FF0]      /* Vector from VicVectAddr */
                LDR     PC,FIQ_Addr

Reset_Addr:     DD      Reset_Handler
Undef_Addr:     DD      Undef_Handler?A
SWI_Addr:       DD      SWI_Handler?A
PAbt_Addr:      DD      PAbt_Handler?A
DAbt_Addr:      DD      DAbt_Handler?A
                DD      0                      /* Reserved Address */
IRQ_Addr:       DD      IRQ_Handler?A
FIQ_Addr:       DD      FIQ_Handler?A 5: 把IRQ指向向量中断控制器把IRQ指向向量中断控制器 6: 当发现基本的应用无法实现的时候,踏下心来多读几遍书。 7: LDR     PC,[PC, #-0x0FF0]

共2条 1/1 1 跳转至

回复

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