4842|15

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

2440+CE5,ap中增加TIMER2定时中断,为何无法进入中断?? (冰天雪地跪求) [复制链接]



   
主程序:
:
PLC2->DT[900]=Init_TIMER2_Interrupt();
:
}


static    UINT32     g_TIMER2Irq = IRQ_TIMER2;
static    UINT32     g_TIMER2SysIntr = SYSINTR_UNDEFINED;
static    HANDLE     gTIMER2Thread;
static    HANDLE     gWaitEvent;
static    UINT32         fuck1;
UINT16 Init_TIMER2_Interrupt(void)
{
    DWORD IDThread;
    TIMER= (_TIMER*)V_Alloc((LPVOID)(TIMER_PH), sizeof(_TIMER));
    INTS= (_INTS*)V_Alloc((LPVOID)(INT_PH), sizeof(_INTS));

    //调用TIMER2, SRC=1 000 000 HZ
    TIMER->TCFG1&=~(0xf<<8);
    TIMER->TCFG1|=0x0<<8;            //div 2
   
    TIMER->TCNTB2=1000;            //每秒1000次
    TIMER->TCMPB2=500;
   
    TIMER->TCON&=~(0xf<<12);
    TIMER->TCON|=0x2<<12;
    TIMER->TCON&=~(0xf<<12);
    TIMER->TCON|=0x9<<12;            //启动TIMER-2+AUTO RELOAD模式

    gWaitEvent= CreateEvent(NULL, FALSE, FALSE, NULL);
    if (!gWaitEvent) return 0;
   
    // 从 OAL 请求一个 SYSINTR 值
    fuck1=KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &g_TIMER2Irq, sizeof(UINT32),&g_TIMER2SysIntr, sizeof(UINT32), NULL);
    PLC2->DT[14]=fuck1&0xffff;
    if (fuck1==NULL) return 1;
   
    if (!(InterruptInitialize(g_TIMER2Irq , gWaitEvent, NULL, 0)))  return 2;
   
     // 创建一个TIMER2中断处理线程 IST
    gTIMER2Thread= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TIMER2_IST,0, 0,&IDThread);
    if (gTIMER2Thread== NULL)      return 3;
    return 4;   

}


UINT32 TIMER2_IST(void)
{   

    DWORD ret;
    PLC2->DT[6]++;

    // 外部中断线程开始运行
    while (1) {
            PLC2->DT[8]++;
            ret = WaitForSingleObject(gWaitEvent, INFINITE);
            PLC2->DT[10]++;
            if (ret == WAIT_OBJECT_0)
            {
                //测试有无中断
                PLC2->DT[0]++;                        
            }
            else
            {   
                PLC2->DT[2]++;   
                return 0;   
            }
            // 通知内核: 中断处理结束
            InterruptDone(g_TIMER2SysIntr);   

    }   
   
      return 1;

}


***********************
调用timer2 pwm中断如上:
调用中断的步骤正常,(返回值正常)

timer2的pwm有正常产生

但是...停在WaitForSingleObject(gWaitEvent, INFINITE);
就没继续往下跑,

各位弟兄阿)))))))))))))
肯定出手相救阿))))))))))))

最新回复

请教~~我要用定时中断,可驱动里就是不进中断,不知道你怎么解决的,帮帮我,很急!!  详情 回复 发表于 2009-10-20 10:07
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
补充:
UINT32 TIMER2_IST(void)只有在
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TIMER2_IST,0, 0,&IDThread);
的时候来执行一次而已
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
汗。。。
小弟还没有在ap中这么用过呢
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
跪求各位弟兄阿
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

5
 
现在不喜欢这个贴代码的方式了! 看起来头大!
动态的没搞过,到现在为止!
动态的可以再ISR里面加 响应IRQ的代码,  触摸屏的触点的动作就是Timer的,你看看是怎么弄的!
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
这是在AP里的,我不确定在驱动和AP有啥差别
不过已经对过n个驱动了

现在就是中断不会产生
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 
使用应用程序读出相关寄存器,看是否符合中断的条件,
楼主以前是驱动开发网的红人啊。

哈哈,欢迎到eeworld开炉子!
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

8
 
http://download.eeworld.net/source/1309950

这个是基于2410的中断处理的驱动和APP。可以参考下。很简单易懂
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 
仔细研究了..
可是..
一定得用驱动+APP的方式 才能加硬件中断吗?
能不能在APP里直接设定调用??

 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
你总要把你所需要控制的PIN脚设置为中断响应脚,如果他本身就是终端响应就可以用。
以前貌似在hjb大牛的blog里面看到过越过driver去分析ARM寄存器的方法,Googleman也应该知道。你可以去他的blog翻翻。如果可以越过直接控制ARM寄存器就是完全可以跳过驱动来做。只不过是把对底层控制的权限上抬到了AP上。

祝好运

个人意见仅供参考

Mercury
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

11
 
这似乎不是单单ap可以读写寄存器就可以了..
目前知道TIMER2不能在AP层拿来当中断
TIMER0,1放在驱动里可以产生中断

但移到ap就死机了
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 harktrip 的回复:
这似乎不是单单ap可以读写寄存器就可以了..
目前知道TIMER2不能在AP层拿来当中断
TIMER0,1放在驱动里可以产生中断

但移到ap就死机了


老兄,你在驱动中使用过了吗?

是否已经被驱动使用了这个timer?

比如触摸屏是需要timer的

检查一下,少走弯路。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

13
 
gooogleman
我改以驱动方式,用timer0,1都可产生pwm中断.
可是问题已驱动方式很不方便阿,我必须在ap里作..

timer0,1的中断移到ap来宣告执行..就死了..唉..搞了两天了
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

14
 
搞定 结帖

因为测试败退出ap,改好ap再进入 还是失败
因为先前退出时 并未把timer0,1占用的中断给释放
so..答案出炉
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

15
 
同问:
如果是在CE6的时候呢?
看hjb写的ce6访问内存的工具,

可是问题来了,透过驱动去设定寄存器
那定时中断的IST呢? 不就得写在那驱动里了?
中断不会在自己的AP里执行了??

 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 13 楼 harktrip 的回复:
搞定 结帖

因为测试败退出ap,改好ap再进入 还是失败
因为先前退出时 并未把timer0,1占用的中断给释放
so..答案出炉

请教~~我要用定时中断,可驱动里就是不进中断,不知道你怎么解决的,帮帮我,很急!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表