这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » axd,interrupt,vectors,data,is,not,correc

共2条 1/1 1 跳转至

axd,interrupt,vectors,data,is,not,correct 如何解决axd的错误提示:interrupt vectors data is

院士
2006-09-17 18:14:16     打赏
axd,interrupt,vectors,data,is,not,correct 如何解决axd的错误提示:interrupt vectors data is not correct



关键词: interrupt     vectors     correct    

院士
2006-12-22 22:43:00     打赏
2楼
问 请师兄帮忙处理一个问题:这个问题使得我不能正常地用lpc2104板子在axd中进行仿真,弹出提示:
“Warnning! interrupt vectors data is not correct!
Program you downloaded CAN not run freely!”
我在我的程序target.c 中用定时器1来进行计时,并按需要输出匹配。
我不打算使用中断方式,而采用T1中断标志位查询来控制。程序编译通过,只是在axd仿真时当LOAD IMAGE 时,弹出提示:“Warnning! interrupt vectors data is not correct!
Program you downloaded CAN not run freely!”而且不能正常到达我设置的断点,甚至不能进入主程序__main。 我估计是中断的设置出了问题,但是无从下手,所以还请师兄帮忙看看:多谢了!!!target.c 程序如下,使用的是周立功开发板试验程序中定时器试验部分的TIMEOUT.MCP中的target.c 文件。略作修改,关闭了中断,添加了Init_bus()子程序:
/****************************************Copyright (c)**************************************************
**                               广州周立功单片机发展有限公司
**                                     研    究    所
**                                        产品一部
**
**                                 http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: target.c
**创   建   人: 陈明计
**最后修改日期: 2003年7月1日
**描        述: lpc210x(飞利浦的ARM)目标板特殊的代码,包括异常处理程序和目标板初始化程序
**              每个工程应当具有这个文件的拷贝,用户根据程序的需要修改本文件。
**注        意:本文件必须以ARM(32位代码)方式编译,否则,必须更改init.s和vector.s文件
**              别的C代码不必使用ARM(32位代码)方式编译
**    定时的精确性还有待提高,主要是没有考虑指令的执行时间
**       //T0TCR = 0x03;      // 启动并复位T0TC
**                //T0TCR = 0x01;    这个命令是否多余?0x03已经包括0x01了
**                 注意p0.2 p0.12 作为io口,作为mat,cap的不同设置,需要随时调整!
**--------------历史版本信息----------------------------------------------------------------------------
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define IN_TARGET
#include "config.h"
#define   LEDCON 0x00002000    /* P0.13引脚控制LED,低电平点亮*/
#define   TX_CON 0X000001000  /*p0.12 MAT1.0 _OUTPUT*或者IO口*/
#define   RX_CON 0x000000400  /*p0.10 IO _INPUT*/
#define  BEEP 0X000000080  /*P0.7 BEEP 作为提示信号*/
/*********************************************************************************************************
** 函数名称: IRQ_Exception
** 功能描述: 中断异常处理程序,用户根据需要自己改变程序
**
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 陈明计
** 日 期: 2003年6月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2003年7月1日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void __irq IRQ_Exception(void)
{
    while(1);               // 通知VIC中断处理结束
}
/*********************************************************************************************************
** 函数名称: FIQ_Exception
** 功能描述: 快速中断异常处理程序,用户根据需要自己改变程序
**           
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 陈明计
** 日 期: 2003年6月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2003年7月1日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void FIQ_Exception(void)
{
    while(1);                   // 这一句替换为自己的代码
}
/*********************************************************************************************************
** 函数名称: TargetInit
** 功能描述: 目标板初始化代码,在需要的地方调用,根据需要改变
** 输 入: 无
**
** 输 出: 无
**         
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 陈明计
** 日 期: 2003年6月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2003年7月1日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void TargetInit(void)
{
    /* 初始化定时器0;定时器1实现微秒级定时。
    Fcclk=Fosc*4=11.0592MHz*4=44.2368MHz
    Fpclk=Fcclk/4=44.2368MHz/4=11.0592MHz
*/
T0PR = 0;       // 设置定时器分频为1分频,得11.0592MHz
T0MCR = 0x03;      // 匹配通道0匹配中断并复位T0TC
T0MR0 = 5530;     // 比较值
//T0TCR = 0x03;      // 启动并复位T0TC
//T0TCR = 0x01;  
T1PR = 0;       // 设置定时器分频为1分频,得11.0592MHz
T1MCR = 0x03;      // 匹配通道0匹配复位TC1,触发中断
T1MR0 = 0XD8000;      // 比较值80ms * 11.0592=0xd8000 个计数值
T1EMR = 0x30;      // 设置定时器1的T1MR0匹配输出,输出方式为翻转
//T1TCR = 0x03;      // 启动并复位T1TC
//T1TCR = 0x01;
/* 设置定时器1中断IRQ */
//VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断
//VICVectCntl0 = 0x24; // 定时器0中断通道分配最高优先级(向量控制器0)
//VICVectAddr0 = (uint32)IRQ_Exception;  // 设置中断服务程序地址向量
//VICIntEnable = 0x00000000;    // 关闭中断
}
/*********************************************************************************************************
** 函数名称: TargetResetInit
** 功能描述: 调用main函数前目标板初始化代码,根据需要改变,不能删除
** 输 入: 无
**   
** 输 出: 无
**          
** 全局变量: 无
** 调用模块: 无
**   
** 作 者: 陈明计
** 日 期: 2003年6月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void TargetResetInit(void)
{
    /* 设置系统各部分时钟 */
    PLLCON = 1;
#if ((Fcclk / 4) / Fpclk) == 1
    VPBDIV = 0;
#endif
#if ((Fcclk / 4) / Fpclk) == 2
    VPBDIV = 2;
#endif
#if ((Fcclk / 4) / Fpclk) == 4
    VPBDIV = 1;
#endif
#if (Fcco / Fcclk) == 2
    PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
#endif
#if (Fcco / Fcclk) == 4
    PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
#endif
#if (Fcco / Fcclk) == 8
    PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
#endif
#if (Fcco / Fcclk) == 16
    PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
#endif
    PLLFEED = 0xaa;
    PLLFEED = 0x55;
    while((PLLSTAT & (1 << 10)) == 0);
    PLLCON = 3;
    PLLFEED = 0xaa;
    PLLFEED = 0x55;
    
    /* 设置存储器加速模块 */
    MAMCR = 2;
#if Fcclk < 20000000
    MAMTIM = 1;
#else
#if Fcclk < 40000000
    MAMTIM = 2;
#else
    MAMTIM = 3;
#endif
#endif
    
    /* 初始化VIC */
    VICIntEnClr = 0xffffffff;
    VICVectAddr = 0;
    VICIntSelect = 0;
    /* 添加自己的代码 */
}
  void Init_bus(void)
{
IOCLR = TX_CON ;//初始值使得总线为高(注意反向)并保持80ms用来给PIC供电
IOCLR = TX_CON ;
PINSEL0 = 0x02000000;  // 设置MAT1.0连接到P0.12;
T1IR  = 0X01;  //复位标志位
T1IR  = 0X00;   //在复位中断后,需要置零寄存器
T1TCR = 0x03;  // 启动并复位T1TC 预定定时80ms将产生匹配反向跳变
T1TCR = 0x01;
//--------------------------------------------
while ((T1IR&0X01) ==0) // 等待是否到了80ms
T1IR  = 0X01;  //复位标志位
T1IR  = 0X00;   //在复位中断后,需要置零寄存器
T1MR0 = 5530;      // 比较值500us * 11.0592=5530 个计数值
while ((T1IR&0X01) ==0);
T1IR  = 0X01;
T1IR  = 0X00;   //在复位中断后,需要置零寄存器
//--------------------------------------------
T1MR0 = 664;       // 重新输入60us计数值
T1EMR = 0x00;      // 设置定时器1的T1MR0匹配输出,输出方式不变
while ((T1IR&0X01) ==0);
T1IR  = 0X01;   //此时总线电平应该已经为高电平60us
T1IR  = 0X00;   //在复位中断后,需要置零寄存器
T1TCR = 0x00;    //关闭定时器1
//--------------------------------------------
while ((IOPIN & RX_CON)!=0);//等待p0.1低电平到来
while ((IOPIN & RX_CON) ==0);//等待高电平到来,其间应该经历了200us的延时
PINSEL0 = 0x00000000;  // 设置 GPIO 连接到P0.12
IOSET = TX_CON ;// 拉低总线送去“读”信号
PINSEL0 = 0x02000000;  // 设置MAT1.0连接到P0.12; GPIO 连接到P0.10
T1MR0 = 166;       // 输入数值定时15us
T1EMR = 0x30;      // 设置定时器1的T1MR0匹配输出,输出方式为翻转
T0TCR = 0x03;      // 启动并复位T0TC
T0TCR = 0x01;
while ((T1IR&0X01) ==0); //检测是否15us计时结束,电平翻转
T1IR  = 0X01;
T1IR  = 0X00;   //在复位中断后,需要置零寄存器
T1TCR = 0x00;    //关闭定时器1
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/
1: 可能是中断向量不对我也出现过这种情况,
AREA    vectors,CODE,READONLY
        ENTRY
;中断向量表
Reset
        LDR     PC, ResetAddr
        LDR     PC, UndefinedAddr
        LDR     PC, SWI_Addr
        LDR     PC, PrefetchAddr
        LDR     PC, DataAbortAddr
        DCD     0xb9205f80
        LDR     PC, [PC, #-0xff0]
        LDR     PC, FIQ_Addr

ResetAddr           DCD     ResetInit
UndefinedAddr       DCD     Undefined
SWI_Addr            DCD     SoftwareInterrupt
PrefetchAddr        DCD     PrefetchAbort
DataAbortAddr       DCD     DataAbort
Nouse               DCD     0
IRQ_Addr            DCD     0
FIQ_Addr            DCD     FIQ_Handler
这些初始化代码可能没有下载到0x00000000地址处。 2: 我也出现过这样的情况我也出现过这样的情况,后来问了周公司的人,说用ISP方式把Flash察掉,我试了时行时不行。
3: 该错误表示中断向量累加和错误,可以使用我们的工程模板建立工程2100模板(内带使用说明):
http://www.zlgmcu.com/download/downs.asp?ID=1074 4: tks!!

共2条 1/1 1 跳转至

回复

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