高级会员
- 积分
- 628
- 威望
- 372
- 贡献
- 132
- 兑换币
- 10
- 注册时间
- 2011-11-4
- 在线时间
- 62 小时
|
本帖最后由 夜尽天明211 于 2012-4-24 10:34 编辑
写了个AD转换的程序,怎么读不出数据啊,求指教。。。
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
int GyroATDData=0;
int GyroSoft0,GyroSoft1,GyroHardware,GyroATDOffset;
int ATDTime;
/*---------------------------------- 系统时钟初始化 ----------------------------------------*/
void CLK_init(void)
{
CLKSEL=0x00; //初始时还没有PLL
PLLCTL=0xe1; //时钟监控使能,PLL允许,VCOCLK调频2%,禁止快速苏醒,禁止自给时钟,伪停止下禁止实时中断和看门狗
SYNR=2;
REFDV=1; //PLLCLK=2*OSCCLK*(SYNR+1/((REFDV+1))=48M;
asm NOP;asm NOP;asm NOP; //等待锁相环稳定
while(!(CRGFLG&0x08)); //锁相环稳定标志位
CLKSEL=0x80; //时钟选择寄存器,Bus Clock=PLLCLK/2,停止模式下振荡器、系统时钟、锁相环、内核时钟、看门狗继续工作
}
void AD_init(void)
{
ATD0CTL0=0x02; //AD转换序列长度为2
ATD0CTL1=0x40;
ATD0CTL2=0x04;
ATD0CTL3=0x90;
ATD0CTL4=0x5f;
ATD0CTL5=0x30;
ATD0DIEN=0x00;
}
void PIT_init()
{
PITCFLMT_PITE=0; //关闭PIT
PITMTLD0=24-1; //先对总线时钟24分频 得到 1us 基准时钟
PITLD0=20000-1; //对时基10000分频,得到10ms定时
PITCE_PCE0=1; //使能PIT通道0
PITMUX_PMUX0=0; //选择微定时器做为时基
PITINTE_PINTE0=1; //使能PIT0中断
PITCFLMT_PITE=1; //开启PIT
}
void Get_ADData()
{
GyroATDData=((ATD0DR0H*256)+ATD0DR0L);
GyroHardware=((ATD0DR1H*256)+ATD0DR1L);
ATD0CTL2_AFFC=1;
}
void main(void) {
/* put your own code here */
CLK_init();
AD_init();
PIT_init();
EnableInterrupts;
for(;;) {
_FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
#pragma CODE_SEG NON_BANKED
void interrupt 66 PIT0()
{
GyroSoft0+=GyroATDData-GyroATDOffset;
GyroSoft1+=(GyroATDData-GyroATDOffset)*ATDTime;
}
|
|