📄 interrupt_tasks.c
字号:
#include <hidef.h> //基本定义和宏定义
#include <mc9s12dg128.h> //硬件定义
#include "..\Sources\common_defs.h" //自定义常量
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
//各种中断处理例程
//文件名:interrupt_tasks.c
//编码人:梁霄
//最后更新时间:2008.06.05 23:28
//外部变量声明
extern unsigned int isGraph1; //存储区域切换标志
extern unsigned int canScan; //允许采集图像标志
extern unsigned int lineCounter; //行计数器
extern unsigned int dotCounter; //像素计数器
extern unsigned int skipLines; //跳过行计数器
extern unsigned int processAllow; //允许处理的场标志
extern byte graph[GRAPHBLOCKNUM][MAX_LINES_PER_FIELD][MAX_DOTS_PER_LINE]; //图像存储区
//模块变量声明
//跳过初始半场信号标志
unsigned int skipFirstHalf = 0;
interrupt 6 void IRQ_ISR(void)
{
//临时变量,用于清除AD转换标志
int tmp;
//关中断
DisableInterrupts;
//如果能够采集,则每隔若干行进行采集
if(canScan)
skipLines++;
//如果能够采集,并且需要间隔的行已经跳过,则开始采集
if(canScan && skipLines==SKIPLINE)
{
//重置间隔行计数器
skipLines=0;
//先清除可能存在的AD转换完成标志
tmp=ATD0DR0;
//如果行数没有采够,则继续采集
if(lineCounter<MAX_LINES_PER_FIELD)
{
for(dotCounter=0;dotCounter<MAX_DOTS_PER_LINE;dotCounter++)
{
//等待AD采样完成
while(ATD0STAT1_CCF0==0);
//清除AD采样完成标志
tmp=ATD0DR0;
//存储像素点
graph[isGraph1][lineCounter][dotCounter]=ATD0DR0L;
}
lineCounter++;
}
else
{
//进行到这里说明一场已经采集完毕,进行一些变量的初始化工作
//以便采集下一场图像时使用
skipLines=0;
canScan=0;
lineCounter=0;
ATD0CTL2_ADPU=0;
}
}
//开中断
EnableInterrupts;
}
interrupt 9 void IOC1_ISR(void)
{
//关中断
DisableInterrupts;
//清中断标志位
TFLG1 = 0x02;
//启动时的第一个场中断往往是不稳定的图像信号,因此不要
if(!skipFirstHalf)
{
//跳过第一个场中断
skipFirstHalf = 1;
}
else
{
//允许采集
canScan = 1;
//指示哪一场可以进行后续的数据处理
processAllow=isGraph1;
//切换采集区域
isGraph1 = !isGraph1;
//重新初始化AD(莫名其妙...)
//ATD0CTL2:禁止发生中断,忽略外部触发,软件方式清除中断
//暂时不启动转换(等待奇偶场同步信号)
ATD0CTL2 = 0x40;
//ATD0CTL3:结果不映射到转换序列,转换序列长度为1
ATD0CTL3 = 0x08;
//ATD0CTL4:8位精度,ATD时钟为4MHz,按照公式
//ADClock=BusClock*0.5/(PRS+1),BusClock=24MHz,
//故PRS=2,精采样时间为2个AD时钟周期,AD转换时间为1微秒
ATD0CTL4 = 0x82;
//ATD0CTL5:单通道采样;连续A/D转换;转换结果无符号,右对齐;
//模拟信号从AN0引脚输入
ATD0CTL5 = 0xA0;
//禁止数字输入
ATD0DIEN = 0x00;
//开AD转换
ATD0CTL2_ADPU = 1;
}
//开中断
EnableInterrupts;
}
interrupt 26 void MDC_ISR(void)
{
//关中断
DisableInterrupts;
//开中断
EnableInterrupts;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -