求助,关于arm7定时器中断的问题,进入不了中断服务程序

[复制链接]
3888|9
 楼主| 你好陌生人 发表于 2013-4-11 16:15 | 显示全部楼层 |阅读模式
  1. #include <NXP\iolpc2148.h>
  2. #include <stdio.h>
  3. #include <intrinsics.h>     //中断头文件
  4. #include "pll.h"

  5. void Timer0_int(void);

  6. const unsigned char TABLE[3]={1,4,8};  //占空比改变的值放到一个数组里

  7. /**************************延时**************************/
  8. void  Delay(unsigned int  dly)
  9. {  
  10.   unsigned int  i;
  11.    for(; dly>0; dly--)
  12.       for(i=0; i<5000; i++);
  13. }

  14. //主函数
  15. void main(void)
  16. {
  17.   char i;
  18.   
  19.   PLL_Init();
  20.   PINSEL1 = (0x03<<12);      //MAT0.0连接到管脚
  21.   
  22.   T0EMR = 0x01;             //高电平
  23.   T0EMR = 0x01<<4;          //匹配低电平
  24.   
  25.   
  26.   T0PR = 0;                 //9+1个Fpclk,TC增加一次
  27.   
  28.   T0MCR = 0x18;            //当MR1和TC相等时,TC复位,产生中断
  29.   T0MR1 = 15000000;       //PWM的时钟频率为APB时钟频率的1/1000
  30.   T0MR0 = T0MR1/10;         //占空比为90%
  31.   
  32.   T0TCR = 0x02;             //定时计数器复位
  33.   T0TCR = 0x01;             //定时器使能
  34.   
  35.   VICIntSelect = 0x00;
  36.   VICVectCntl0 = 0x20|VIC_TIMER0;
  37.   VICVectAddr0 = (unsigned int)Timer0_int;  
  38.   VICIntEnable = (1<<VIC_TIMER0);
  39.   
  40.   __enable_interrupt();
  41.   
  42.   while(1)
  43.   {
  44.     for(i=0;i<3;i++)
  45.     {
  46.       T0MR0 = T0MR1*TABLE[i]/10;//改变占空比
  47.       Delay(1000);
  48.     }
  49.   }
  50. }

  51. //定时器1中断
  52. void Timer0_int(void)
  53. {
  54. // T0IR = 0x02;
  55.   
  56.   T0EMR= 0x01|0x01<<4;     //高电平
  57.   
  58.   VICVectAddr = 0;
  59. }

  60. //irq 中断入口
  61. #pragma vector=IRQV
  62. __irq __arm void irq_handler (void)
  63. {
  64.   void (*interrupt_function)();
  65.   unsigned int vector;

  66.   vector = VICVectAddr;     //获得中断向量.
  67.   interrupt_function = (void(*)())vector;
  68.   if(interrupt_function != NULL)
  69.   {
  70.     interrupt_function();  //调用向量中断函数.
  71.   }
  72.   else
  73.   {
  74.     VICVectAddr = 0;      //清除VIC中的中断.
  75.   }
  76. }

  77. //fiq中断入口
  78. __fiq __arm void fiq_handler (void)
  79. {
  80.   while(1);
  81. }
T0IR中断寄存器一直保持着TM0中断复位状态,进入不到中断服务程序
 楼主| 你好陌生人 发表于 2013-4-11 16:52 | 显示全部楼层
怎么没有人回答啊?
jlass 发表于 2013-4-11 17:17 | 显示全部楼层
不要老是一段代码扔上来,在没有硬件的情况下,根本没发看。
 楼主| 你好陌生人 发表于 2013-4-12 09:31 | 显示全部楼层
jlass 发表于 2013-4-11 17:17
不要老是一段代码扔上来,在没有硬件的情况下,根本没发看。

这是nxplpc2148的芯片,现在主要是进入不了中断服务程序,求大神赐教啊
airwill 发表于 2013-4-13 07:16 | 显示全部楼层
新人啊。
最好先对比现成的例子,拿例子程序来下手。
 楼主| 你好陌生人 发表于 2013-4-13 09:35 | 显示全部楼层
airwill 发表于 2013-4-13 07:16
新人啊。
最好先对比现成的例子,拿例子程序来下手。

我就是那现成的例子,人家是用ads编译的 ,我把它抑制到iar上就成这样了,求版主解决啊
2012CMD 发表于 2013-4-13 10:10 | 显示全部楼层
曾经遇到过,下载到nand flash的0地址或者nor flash中即可,因为你在nor启动后下载到0x30000000中中断向量表不能正确加载(中断向量表本来要加载到0地址处,现在被你那个uboot或者什么boot的东东占据了位置)

 楼主| 你好陌生人 发表于 2013-4-13 15:55 | 显示全部楼层
2012CMD 发表于 2013-4-13 10:10
曾经遇到过,下载到nand flash的0地址或者nor flash中即可,因为你在nor启动后下载到0x30000000中中断向量 ...

谢谢啊,我试一下
310808020114 发表于 2013-5-19 19:02 | 显示全部楼层
2012CMD 发表于 2013-4-13 10:10
曾经遇到过,下载到nand flash的0地址或者nor flash中即可,因为你在nor启动后下载到0x30000000中中断向量 ...

我是新手,请问我该如何下载到norflash的0地址呢,如何设置?我试过,但没有成功
310808020114 发表于 2013-5-19 19:04 | 显示全部楼层
310808020114 发表于 2013-5-19 19:02
我是新手,请问我该如何下载到norflash的0地址呢,如何设置?我试过,但没有成功 ...

也遇到同样的问题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

152

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部