在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3525|回复: 2

为什么我的时钟ISR没的响应?

[复制链接]
发表于 2006-8-10 14:12:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
下面是我的程序,用xilinx edk 编写的,主要想法是通过调用一个中断,来输出一个方波,可是不知原因的,却没有调用中断过程。
   我把我的TestApp_Memory\source.c文件拷了过来,请高手帮我看看。

  
#include "xparameters.h"
#include "xcache_l.h"
#include "stdio.h"
#include "xutil.h"
#include "xgpio_l.h"
#include "xtmrctr.h"
#include "xintc.h"
#include "xexception_l.h"
//====================================================
/*********************constants*******************/
#define LED_DELAY       3000
#define LED_CHANNEL     1
#define PPCGPIO         Generic_GPIO
#define GPIO_REG_BASEADDR  0x40000000
#define LED              0x28 /* Assumes bit 0 of GPIO is connected to an LED */



#define TMRCTR_DEVICE_ID            XPAR_OPB_INTC_0_DEVICE_ID
#define INTC_DEVICE_ID              XPAR_OPB_INTC_0_DEVICE_ID
#define TMRCTR_INTERRUPT_ID         XPAR_OPB_INTC_0_OPB_TIMER_0_INTERRUPT_INTR

#define RESET_VALUE                     0xFFFFF000
#define TIMER_COUNTER_0                 0
volatile int TimerExpired;
XIntc  InterruptController;
XTmrCtr TimerCounter;


//void XTmrCtr_InterruptHandler(void *CallBackRef, Xuint8 TmrCtrNumber);
void TimerCounterHandler(void *CallBackRef, Xuint8 TmrCtrNumber);
//void TimerCounterHandler(void *CallBackRef);

/****************************************************/
int main (void)
{
        XStatus Status;
        volatile int Delay;
    int  i=0;       
       
        //XTmrCtr *InstancePtr = (XTmrCtr *)CallBackRef;
   XCache_EnableICache(0x80000001);
   XCache_EnableDCache(0x80000001);  
   print("-- Exiting testmemory main() --\r\n");       
        XGpio_mSetDataDirection(GPIO_REG_BASEADDR, LED_CHANNEL, 0X0);
       
        // initialize the timer
        Status = XTmrCtr_Initialize(&TimerCounter, TMRCTR_DEVICE_ID);
   if (Status != XST_SUCCESS)
    {   print("XTmrCtr_Initialize failure\r\n");
        return XST_FAILURE;
    }
    print("XTmrCtr_Initialize successed\r\n");
         
         // selftest
        Status = XTmrCtr_SelfTest(&TimerCounter,TIMER_COUNTER_0);
   if (Status != XST_SUCCESS)
    {   print("XTmrCtr_SelfTest failure\r\n");
        return XST_FAILURE;
    }
         print("XTmrCtr_SelfTest successed\r\n");
         
         // initialize the Intc
         Status = XIntc_Initialize(&InterruptController, INTC_DEVICE_ID);
    if (Status != XST_SUCCESS)
    {
       print("XIntc_Initialize failure\r\n");
                 return XST_FAILURE;
    }
         print("XIntc_Initialize successed\r\n");
         
         //connect the Intr
//         Status = XIntc_Connect(&InterruptController, TMRCTR_INTERRUPT_ID,
//                           (XInterruptHandler)XTmrCtr_InterruptHandler,
//                           (void *)&TimerCounter);

    Status = XIntc_Connect(&InterruptController, TMRCTR_INTERRUPT_ID,
                            (XInterruptHandler)TimerCounterHandler,
                              (void *)&TimerCounter);

    if (Status != XST_SUCCESS)
    {
        print("XIntc_Connect failure\r\n");
                  return XST_FAILURE;
    }
         print("XIntc_Connect successed\r\n");
         
         // start the Intc
         Status = XIntc_Start(&InterruptController, XIN_REAL_MODE);
    if (Status != XST_SUCCESS)
    {
        print("XIntc_Start failure\r\n");
                  return XST_FAILURE;
    }
           print("XIntc_Start successed\r\n");
               
          // enable the intc
          XIntc_Enable(&InterruptController, INTC_DEVICE_ID);
          print("XIntc_Enable successed\r\n");
          
    //Initialize the PPC405 exception table     
    XExc_Init();  
    // Register the interrupt controller handler with the exception table   
    XExc_RegisterHandler(XEXC_ID_NON_CRITICAL_INT,
                        (XExceptionHandler)XIntc_InterruptHandler,
                         &InterruptController);
    // Enable non-critical exceptions
    XExc_mEnableExceptions(XEXC_NON_CRITICAL);
    print("XExc routine success\r\n");         
       
         //set the handler
     XTmrCtr_SetHandler(&TimerCounter, TimerCounterHandler,
                        &TimerCounter);
        // set options
         XTmrCtr_SetOptions(&TimerCounter, TIMER_COUNTER_0,
                       XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION);
        //set reset value
         XTmrCtr_SetResetValue(&TimerCounter, TIMER_COUNTER_0, RESET_VALUE);
         //start the timer
         XTmrCtr_Start(&TimerCounter, TIMER_COUNTER_0);
    //TimerExpired=XTmrCtr_GetValue(&TimerCounter, TIMER_COUNTER_0);
           
   while(1);
                       
               
   return 0;
}

void TimerCounterHandler(void *CallBackRef, Xuint8 TmrCtrNumber)
//  void XTmrCtr_InterruptHandler(void *CallBackRef, Xuint8 TmrCtrNumber)
//void TimerCounterHandler(void *CallBackRef)
{
        int Delay;
        XGpio_mSetDataReg(GPIO_REG_BASEADDR, LED_CHANNEL, 0x0);
        for (Delay = 0; Delay < 300; Delay++);                  
        XGpio_mSetDataReg(GPIO_REG_BASEADDR, LED_CHANNEL, 0x3);
        for (Delay = 0; Delay <300; Delay++);
}
发表于 2006-8-20 08:49:37 | 显示全部楼层
路过
^_^
发表于 2006-8-22 18:04:03 | 显示全部楼层
复杂,初学,搞不定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-26 07:53 , Processed in 0.056148 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表