在我看来,我的计时器中断不能正常工作。问题是,中断函数内部的计数器只增加一次。这里是我的主要和定时器设置的代码。
#include <m8c.h>
#include "PSoCAPI.h"
#include <stdio.h>
#include <stdlib.h>
char theStr[] = "PSoC LCD";
static char tmp[3];
static int counter = 0;
void main(void){
LCD_Start();
LCD_Position(0,5);
LCD_PrString(theStr);
M8C_EnableGInt;
Timer8_EnableInt();
Timer8_Start();
while (1);
}
#pragma interrupt_handler myTimerInt
void myTimerInt(void){
counter ++;
LCD_Position(1,0);
itoa(tmp, counter, 10);
LCD_PrString(tmp);
}发布于 2014-04-02 00:29:58
大多数中断服务例程都需要重新启动调用它的中断(有时称为“确认中断”)。否则,ISR只被调用一次。通常,这是在ISR的关键部分完成后完成的。
在503418的情况下,我认为重新启用是通过读取计数器寄存器完成的。请参阅这底部的代码。
发布于 2014-04-02 21:48:00
您可能遇到的一个可能的问题是Timer8INT.asm中的中断服务例程配置错误。在使用指令#pragma interrupt_handler时,需要确保使用正确的指令调用Timer8INT.asm ISR中的C中断服务例程。
如果定义了此指令,将在该函数的末尾添加一个reti指令,如果使用lcall从Timer8INT.asm调用该C函数,则这是不正确的。在这种情况下,您实际上需要对这个C函数执行一个简单的ljmp指令。
在使用指令时,#pragma interrupt_handler Timer8INT.asm应该有
_Timer8_ISR:
ljmp _myTimerInt
reti如果没有指令,#pragma interrupt_handler Timer8INT.asm应该有
_Timer8_ISR:
PRESERVE_CPU_CONTEXT
lcall _myTimerInt
RESTORE_CPU_CONTEXT
retihttps://stackoverflow.com/questions/22743142
复制相似问题