打印

关于中断的问题

[复制链接]
3845|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lizhengang2009|  楼主 | 2009-11-15 17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI, timer, ST, AN, se
我设计的程序用C语言编写的,只有一个Timer8和LED,程序如下
#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#pragma interrupt_handle timer;

void main()
{
while(1)
{
  Timer8_1_EnableInt();
  M8C_EnableGInt;
  Timer8_1_Start();
  LED_1_Start();
  LED_1_Switch(1);
}

}
void timer()
{
Timer8_1_Stop();
LED_1_Invert();
Timer8_1_WritePeriod(999);
Timer8_1_Start();
}

Timer8_1INT.asm里改的部分:
_Timer8_1_ISR:
   ;@PSoC_UserCode_BODY@ (Do not change this line.)
   ;---------------------------------------------------
   ; Insert your custom code below this banner
   ;---------------------------------------------------
   ;   NOTE: interrupt service routines must preserve
   ;   the values of the A and X CPU registers.
   jmp _timer
   ;---------------------------------------------------
   ; Insert your custom code above this banner
   ;---------------------------------------------------
   ;@PSoC_UserCode_END@ (Do not change this line.)
   reti

但是好像不执行,有朋友给点提议吗??
沙发
god_like| | 2009-11-15 17:45 | 只看该作者
顶一个

使用特权

评论回复
板凳
juventus9554| | 2009-11-15 19:16 | 只看该作者
帮顶

使用特权

评论回复
地板
lizhengang2009|  楼主 | 2009-11-15 19:23 | 只看该作者
谁能帮忙想想办法啊。。。。

使用特权

评论回复
5
Apnote| | 2009-11-15 22:22 | 只看该作者
楼主不介意把例子发上来,大家帮忙看看... :)

使用特权

评论回复
6
suoma| | 2009-11-15 23:01 | 只看该作者
不如把程序问题有盲点的问题描述描述,大家都不喜欢看程序的

使用特权

评论回复
7
lizhengang2009|  楼主 | 2009-11-16 18:48 | 只看该作者
其实这个问题困扰我好长时间了,我试了好多办法,总是跳不进中断函数timer()。。。

使用特权

评论回复
8
god_like| | 2009-11-16 23:54 | 只看该作者
估计是你逻辑没设计好,或者中断没配置好

使用特权

评论回复
9
love_life| | 2009-11-16 23:59 | 只看该作者
你的中断入口地址在哪定义了?

使用特权

评论回复
10
lizhengang2009|  楼主 | 2009-11-17 16:26 | 只看该作者
这是我的那个全部实现,大家帮忙看看吧,谢谢了  :handshake
Timer8.rar (364.5 KB)

使用特权

评论回复
11
lobby| | 2009-11-18 14:23 | 只看该作者
我也下下来,
瞧瞧

使用特权

评论回复
12
Apnote| | 2009-11-18 16:41 | 只看该作者
中断部分在main.c加上
#pragma interrupt_handler timer;
....
void timer()
{...}
....

同时在Timer8INT.asm中要加上:  ljmp _timer (如下)
_Timer8_1_ISR:
   ;@PSoC_UserCode_BODY@ (Do not change this line.)
   ;---------------------------------------------------
   ; Insert your custom code below this banner
   ;---------------------------------------------------
   ;   NOTE: interrupt service routines must preserve
   ;   the values of the A and X CPU registers.
   ljmp _timer
   ;---------------------------------------------------
   ; Insert your custom code above this banner
   ;---------------------------------------------------
   ;@PSoC_UserCode_END@ (Do not change this line.)
   reti

其实控制LED可以不用加LED模块,直接控制GPIO来实现就可以了。

使用特权

评论回复
13
Apnote| | 2009-11-18 16:51 | 只看该作者
你的project文件时CY8C27443的,用CY8C29466试了一下。:)
改了LED_1_Invert()...
void Timer8_1_ISR_C()
{
LED_1_Invert();
}
或者不用LED直接:
void Timer8_1_ISR()
{
     PRT2DR ^= 0x01;   
}

Timer8_LED_CY8C29466.zip

210.27 KB

使用特权

评论回复
14
lizhengang2009|  楼主 | 2009-12-27 15:30 | 只看该作者
我的程序和楼上的相同,但是LED仍然没有变化,始终是亮的,这是怎么回事??

使用特权

评论回复
15
juventus9554| | 2009-12-27 23:30 | 只看该作者
一个月了还是没解决?……

使用特权

评论回复
16
huamunv| | 2009-12-29 23:26 | 只看该作者
真的很有耐心

使用特权

评论回复
17
lovelyegle| | 2009-12-30 22:42 | 只看该作者
看看

使用特权

评论回复
18
rocky_bian| | 2010-1-5 13:25 | 只看该作者
耐心十足 金霸王

使用特权

评论回复
19
wood6569| | 2010-1-6 14:53 | 只看该作者
其实这个问题很简单,你的
#pragma interrupt_handle timer;
有问题。
看来你的程序,如果你把这个改为
#pragma interrupt_handle timer8_1_ISR         //没有分号

void timer8_1_ISR()
{
Timer8_1_Stop();
LED_1_Invert();
Timer8_1_WritePeriod(999);
Timer8_1_Start();
}

这样就可以。你的声明和程序中的名字不一致。
CYPRESS 一级代理商增你强 FAE.

使用特权

评论回复
20
god_like| | 2010-1-6 22:52 | 只看该作者
这个没太大关系吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

35

帖子

0

粉丝