Board logo

标题: 请高手指点:AD定时中断采样问题 [打印本页]

作者: lihenshui    时间: 2007-6-5 15:16     标题: 请高手指点:AD定时中断采样问题

各位高手请看好:
片子是DP256B,通过MDC定时1.25ms中断采样,但是进入中断后AD采样始终通不过。具体程序如下:
void MCU_Initial(void)
{
// 模数递减计数器设定
MCCTL=0xC6; //模数递减计数器中断使能,连续中断,允许工作,
MCCNT=1250; //总线频率为8M,预分频因子为8 11000110,计数1250, t=1us*1250=1.25ms 产生1次中断,中断时进行AD采样

//MCFLG_MCZF=1; //清除模数计数器中断标志位,这样可以重新计时
//MCCTL_FLMC=1; //强制加载模数常数寄存器的值
}
void AD_Initial(void) //AD初始化
{
ATD0CTL2 = 0x80; //AD0正常工作模式,中断下继续运行,禁止ATD中断
ATD0CTL3 = 0x00; //八通道,背景后激活继续转换
ATD0CTL4 = 0x01; //转换结果为10位,两个采样时间,4分频
//ATD0CTL5 = 0x90; //转换结果右对齐,无符号;多通道,单次转换
ATD1CTL2 = 0x80; //AD1正常工作模式
ATD1CTL3 = 0x00; //八通道转换
ATD1CTL4 = 0x01; //转换结果为10位
//ATD1CTL5 = 0x90; //转换结果右对齐,无符号;多通道,单次转换
}

void ISR_MDCU(void) //1.25ms模数计数器中断一次进行AD采样,
{ //中断16次(20ms一个电源周波)计算一次
uchar i; //中断160次(200ms)喂狗一次

MCFLG_MCZF=1; //清除模数计数器中断标志位,这样可以重新计时

Sample_N++;
AD_over=1;

for(i=0;i {
ATD0CTL5 = 0x90; //AD0转换开始
while (ATD0STAT0_SCF==0) //AD0转换完毕
{}
ATD1STAT0_SCF=1;//清除AD0转换完毕标志位

VolAi_AD0=ATD0DR0; //VolAi_AD0存放A相输入电压值4个采样值
}
}

帮我看看卡在哪里?

作者: lihenshui    时间: 2007-6-5 15:21

对我上面的帖子的补充:
Sample_N++; //该参数记录中断次数,16次后由主函数将其清零
AD_over=1; //每中断一次该参数置1,外面由主函数判断作相关的处理




作者: strongchen    时间: 2007-6-5 15:32

中断服务程序有没有放入非分页地址?
作者: lihenshui    时间: 2007-6-5 16:02

嘿嘿。。窃喜,谢谢斑竹。我刚才从论坛里面下载了那个HC9S12的中文资料,看了那个HCS12配置的PPT,有以下解说:

中断函数需要放在固定页
#pragma TRAP_PROC表示以下的函数将用RTI指令返回
如果使用interrupt关键字,则不必再写#pragma TRAP_PROC
__NEAR_SEG显性地表示这段代码放在固定页


我试着将中断程序放在所有程序的最下面,并在中断程序的前面加上了#pragma TRAP_PROC

再次下载到板子里,成功了。。。

我在论坛里看到有人把问题发上来,看到有的中断程序前面用了关键字interrupt,一直不解,因为我的师兄们没有用,所以我也没有用,但是又对他们用的这个#pragma TRAP_PROC不解,现在解了。。谢谢斑竹,谢谢你们在论坛上留下这么多好咚咚

以后有了问题再来请教


问题已经解决,谢谢

作者: guocai_yao    时间: 2007-6-10 08:12

我整了两天,才把部分中断整明白,还有ECT中断、MCAN都还不大明白,ATD还没有来得及整,还有模糊指令什么的,单片机真是好玩!




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0