📄 interrupts.c
字号:
//*************************************************************************
//* *
//* **********************中断函数************************* *
//* *
//*************************************************************************
#include "Includes.h"
#define SAMPLING_STATE ATD1STAT1_CCF0
#define SAMPLING_DATA ATD1DR0L
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned int ui_SpeedCount=0; //用于测速脉冲计数。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//当前采样图像的行和列。
unsigned int ui_SampleRow=0,ui_SampleColumn=0;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//图像数据缓存
unsigned char uca_Buffer1[IMAGE_ROW][IMAGE_COLUMN];
unsigned char uca_Buffer2[IMAGE_ROW][IMAGE_COLUMN];
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//指向当前采集数据采样缓存首地址的指针
unsigned char *puca_BufferSample=&uca_Buffer1[0][0];
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//指向当前处理数据采样缓存首地址的指针
unsigned char *puca_BufferProcess=&uca_Buffer2[0][0];
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//用于图像采集和处理交换缓存。
//(注意:在每次交换指针后保证puca_BufferTemp与puca_BufferSample相同)
unsigned char *puca_BufferTemp=&uca_Buffer1[0][0];
#pragma CODE_SEG NON_BANKED
//*************************************************************************
//* *******************输入捕捉2通道中断函数******************** *
//*************************************************************************
//行同步 ,用于数据采集。
void interrupt 10 vIC2ISR(void)
{
unsigned char ucTemp;
unsigned char *pucTemp;
TFLG1_C2F=1;
PORTB_BIT2=~PORTB_BIT2;
if(ui_SampleRow>=SAMP_ROW_START&&ui_SampleRow<SAMP_ROW_MAX)
{
if(ui_SampleRow%SAMP_ROW_SEP==0)
{
for(ui_SampleColumn=0;ui_SampleColumn<SAMP_COL_MAX;ui_SampleColumn++)
{
while(!SAMPLING_STATE);
if(ui_SampleColumn>=SAMP_COL_START)
{
if(ui_SampleColumn%SAMP_COL_SEP==0)
{
pucTemp=puca_BufferSample
+((ui_SampleRow-SAMP_ROW_START)/SAMP_ROW_SEP)*IMAGE_COLUMN
+(ui_SampleColumn-SAMP_COL_START)/SAMP_COL_SEP;
*pucTemp=SAMPLING_DATA;
}
}
}
}
}
ucTemp=SAMPLING_DATA;
ui_SampleRow++; //采样行坐标加一。
}
//*************************************************************************
//* *******************输入捕捉1通道中断函数******************** *
//*************************************************************************
//场同步,交换缓存以及图像处理和模型车控制。
void interrupt 9 vIC1ISR(void)
{
TFLG1_C1F=1;
ui_SampleRow=0; //把采样行坐标清零。
ui_SampleColumn=0;
PORTB_BIT1=~PORTB_BIT1;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//交换图像采集和处理缓存
puca_BufferSample=puca_BufferProcess;
puca_BufferProcess=puca_BufferTemp;
puca_BufferTemp=puca_BufferSample;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//系统时间加一。
ul_SystemTime++;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//开中断,允许行信号中断进行采样。
EnableInterrupts;
if(uc_CarState==STATE_START)
{
//分析图像,获取路径参数,根据路径参数控制模型车。。
vImageProcess();
//根据路径参数控制模型车。
vAutoControl();
}
}
//*************************************************************************
//* *******************输入捕捉0通道中断函数******************** *
//*************************************************************************
//用于测速,每当测速脉冲到来时,脉冲计数加一。
void interrupt 8 vIC0ISR(void)
{
TFLG1_C0F=1;
ui_SpeedCount++;
}
//*************************************************************************
//* *********************定时器溢出中断函数******************** *
//*************************************************************************
void interrupt 16 vTimerOverflowISR(void) //用于测量赛车速度。
{
TFLG2_TOF=1;
ui_DetectSpeed=ui_SpeedCount;
ui_SpeedCount=0;
//<<<<<<<<<<<<<<<<<<<<<<<<<执行按键处理程序>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableInterrupts;
vKeyProcess();
}
//*************************************************************************
//* *********************串口接收中断********************** *
//*************************************************************************
void interrupt 20 SerialISR(void)
{
SCI0SR1_RDRF=1;
//<<<<<<<<<<<<<<<<<<<<<<<<<获取命令字符串>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vGetString(SCI0DRL);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -