Board logo

标题: 在使用mc9s08qg8 ,中断采样时的问题求助 [打印本页]

作者: jiney555    时间: 2007-7-8 12:31     标题: 在使用mc9s08qg8 ,中断采样时的问题求助

我采样内部时钟,ad采用中断方式!现在ad中断没有起作用,请版主及各位老大给咱诊断诊断!!!附程序如下!

#include /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#define N 10
uchar adc_result[N],i;
uint wendu1,temp;

void InitIcs(void)
{
ICSC1=0x04; /* CLKS for Internal reference clock, IREFS for internal reference */
ICSC2=0x08; /* BDIV divide by 1, LP for FLL disabled */
//ICSTRM=0x00; //内部振荡器调整因子
ICSSC =0X00;
}

void InitSys(void)
{
// SOPT:
SOPT1 = 0x03; // COPE=0,COPT=0,STOPE=0 ,BKGDPE=1,RSTPE=1;
SOPT2 = 0x80; //COPCLKS =1:INTERNAL 1KCLK IS SOURCE TO COP
//SDIDL = 0x09;
//SPMSC1 = 0x1c; //system power managememt status and control
//SPMSC2 = 0x00;
}

void InitPort(void)
{
PTADD=0xc8; // 1100 1000
PTAD=0xf7; // 1111 0111
PTAPE=0x07; // Internal Pullup Enable
//PTASE=0x3f; // Output Slew Rate Control Enable
//PTADS=0x08; // Output Drive Strength Selection
PTBD=0xff; // 1110 1110
PTBDD=0xff; // 0000 0000
PTBPE=0xff;// Internal Pullup Enable
//PTBSE=0xff; // Output Slew Rate Control Enable
//PTBDS=0x00; // Output Drive Strength Selection
//SPMSC3 = 0x00;
}
void InitAD(void)
{
uchar j;
ADCCFG = 0xb1; //high speed, 8bit ,bus_clk/2 ,long sample time
APCTL1 = 0xc0;
ADCSC1 = 0x40; //AIEN=1:INTERRUPT EN,ADCO=1:CONTINOUS,ad0
ADCSC2 = 0x00; //
for(j=0;j {
adc_result[j]=0;
}
}

void ad_deal(void)
{
uchar j;
uchar max,min;
if(i>=N)
{
//ADSCR=0x1f; //关闭ADC
i=0;
temp=0;
for(j=0;j {
max=adc_result[0];
min=adc_result[0];
if(max {
max=adc_result[j];
}
if(min>adc_result[j])
{
min=adc_result[j];
}
temp+=adc_result[j];
}
temp=temp-max-min/(N-2);
}
wendu1 = (temp*3000/255-500)/10; //采样,8位,3v参考电压
}

void main(void)
{
InitPort();
InitIcs();
InitAD();
InitSys();
EnableInterrupts;
for(;;) {
ad_deal();

// __RESET_WATCHDOG(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}


interrupt void _ADC_int(void)
{
ADCSC1_AIEN=0; //禁止中断
adc_result=ADCRL; //保存采样值
i++;
PTBD_PTBD7 = ~ PTBD_PTBD7;
ADCSC1=0x00; //选择通道0
ADCSC1_AIEN=1; //使能中断
// AD_flag=1;
}


作者: strongchen    时间: 2007-7-9 10:04

设个断点看一下,你的AD中断发生了吗?
作者: jiney555    时间: 2007-7-9 13:52

好像没有,我在中断里设置io口取反,io口没有反应!!!!
作者: jiney555    时间: 2007-7-9 14:03

我的ics和sys还有ad初始化对吗?
作者: jiney555    时间: 2007-7-9 14:06

我的ics和sys还有ad初始化对吗? 我采样内部时钟,ad采用中断方式?ad时钟用bus时钟

[此贴子已经被作者于2007-7-9 14:06:02编辑过]


作者: strongchen    时间: 2007-7-9 17:16

把整个project打包贴出来吧。
作者: jiney555    时间: 2007-7-9 20:41

版主帮我看一下,谢谢了
作者: jiney555    时间: 2007-7-9 20:45

http://bbs.chinaecnet.com/uploadImages/mc9s08.rar
附件
作者: strongchen    时间: 2007-7-10 11:01

你没有定义中断地址,中断当然不会发生。在PRM文件最后加一句说明即可:
VECTOR ADDRESS 0xFFD8 _ADC_int
作者: jiney555    时间: 2007-7-10 17:03

谢谢版主,我再试试,再问一下,就是软件仿真,如何设置ad参数,可以模拟ad中断吗?
作者: strongchen    时间: 2007-7-10 17:27

也许可以,但比较麻烦。
作者: jiney555    时间: 2007-7-15 23:32

adc中断就是进不去,版主帮我在分析分析是什么问题? 烦请各位能否给一个mc9s08qg8的ad中断的初始化和用内部系统时钟的初始化!谢谢,调试好久了,比较郁闷。。。谢谢,,。。

[此贴子已经被作者于2007-7-15 23:32:48编辑过]


作者: strongchen    时间: 2007-7-16 09:48

你改过PRM文件了吗?如果还不行,把你改过的project再贴出来看看吧。
作者: jiney555    时间: 2007-7-16 23:02

改过了,还不行!!我怀疑是ad时钟的问题吧!版主帮我看看 ,interrupt void _Vrti_Int()能进,就是ad中断进不了!

[此贴子已经被作者于2007-7-16 23:02:31编辑过]


作者: jiney555    时间: 2007-7-16 23:03

文件如下:
作者: jiney555    时间: 2007-7-16 23:10

上传附件 ,好像上传不了

[此贴子已经被作者于2007-7-16 23:10:56编辑过]


作者: strongchen    时间: 2007-7-17 09:44

可以发到:strongchen_free@yahoo.com.cn。
作者: jiney555    时间: 2007-7-18 20:11

版主,也发到你信箱,帮忙给看看1
作者: strongchen    时间: 2007-7-19 11:44

你并没有开启AD的连续转换功能(ADCO位没有置1),所以AD转换最多执行一次。你可以改为要么将ADCO位置1,要么在AD中断中再写一次ADCSC1,再次启动AD转换。
作者: wangyj    时间: 2007-7-19 13:33

建议试试:
1.检查总线时钟、AD转换的频率:
你的好像是8MHz的bus_clk,而AD转换频率为bus_clk/2,AD转换频率最好为1MHz。
2.开启连续转换功能(ADCO=1)试一下;

作者: jiney555    时间: 2007-7-19 14:07

就是,用内部晶振,系统时钟、总线时钟、ad时钟,它们是怎样一个关系呀?e文太差?请多多帮忙!!
作者: wangyj    时间: 2007-7-19 15:22

你的设置:ADCCFG = 0xb1,
即:ADCCFG-ADICLK=0x01 //Bus clock divided by 2
ADCCFG-ADIV=0x01 //Input clock ÷ 2
由此可见,你的AD转换频率为2MHz;

改为:ADCCFG=0xF0试试。
作者: jiney555    时间: 2007-7-19 17:13

哦,谢谢,bus时钟,和系统时钟之间是什么一个关系呢?系统内部晶振设置为11.0592k.那bus时钟就一定是8m吗?
作者: strongchen    时间: 2007-7-20 14:13

不是的,要看你的ICS中对FLL倍频系数的设置。
作者: jiney555    时间: 2007-7-20 21:49

好像必须设置ADCSC1_ADCO=1;,设置ADCSC1 = 0x60;好像没有用处!谢谢版主,谢谢wangyj !!!!
作者: jianw007    时间: 2007-7-27 22:14

jiney555 ,请问"现在ad中断没有起作用".是怎么判断出来的?
不好意思,我刚接触这个.





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