[英]PSoC timer interrupt
在我看來,我的計時器中斷無法正常工作。 問題是中斷功能內部的計數器僅增加一次。 這是我的主要和計時器設置的代碼。
#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);
}
大多數中斷服務程序都需要重新准備調用該中斷的中斷(有時稱為“確認中斷”)。否則,ISR僅被調用一次。通常,這是在ISR的關鍵部分完成之后完成的。
對於503418,我認為重新啟用是通過讀取計數器寄存器來完成的。 看到代碼在底部此 。
您可能遇到的一個問題是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
reti
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.