最近在用2407做AD采样,采样采用定时器启动AD模块,要求采样周期为8us.在程序调试过程中遇到时间提不上去的问题.反复修改定时周期,通过示波器观察采样周期最小都在16US.请高手帮我分析一下原因.
程序如下.
int *addr =(int *)0x8000;
unsinged char t=0x8000;
main()
{
SystemInit(); //系统初始化
MCRA=MCRA & 0x0000;
ADINIT(); //定时器,AD初始化
asm(\" CLRC INTM \"
;
while(1);
}
void SystemInit()
{
asm(\" SETC INTM \"
; /* 关闭总中断 */
asm(\" CLRC SXM \"
; /* 禁止符号位扩展 */
asm(\" CLRC CNF \"); /* B0块映射为 on-chip DARAM*/
asm(\" CLRC OVM \"); /* 累加器结果正常溢出*/
SCSR1=0x83FE; /* 系统时钟CLKOUT=20*2=40M */ WDCR=0x006F; /* 禁止看门狗/
KickDog(); /* 初始化看门狗 */
IMR=0x0001; /* 打开中断1*/
IFR=0xFFFF; /* 清除中断标志 */
MCRA=MCRA & 0x80FF; //IOPB0-6设为IO口模式
PBDATDIR=0x8000;
}
void ADINIT()
{
EVAIFRA=0xFFFF; // ad初始化 清除中断标志
ADCTRL1=0x10;
ADCTRL2=0x8504;
MAXCONV=0x0000;
CHSELSEQ1=0x0000; //第0通道
GPTCONA=0x2100; //定时器初始化
T1PR=40;
T1CNT=0;
T1CON=0x144E;
}
void interrupt c_int1() /*定时器1中断服务程序*/
{
t=t^0x0080;
PBDATDIR=t;
while( (ADCTRL2&0x1000)==0x1000);
*addr=RESULT0>>8;
addr++;
ADCTRL2=ADCTRL2|0x4200;
}
void KickDog() /*踢除看门狗 */
{
WDKEY=0x5555;
WDKEY=0xAAAA;
}