最近用CDCE421A做一个1024MHZ的时钟输出,配置后无输出,芯片焊接和电源都没有问题,时钟输入用的是插针时钟32MHZ,针两端接15PF的电容(电容不焊接同样无输出),为了配置时钟芯片,用单片机设置定时时间分别为3us和12us(设为定时函数),这样只需改变单片机上的引脚电平就能实现芯片手册上的时序,15us的周期符合芯片手册上说的SADATA引脚输入时钟60khz到80khz之间。下面有些问题恳请ti专业人员解答:
问题一:依照ti提供的gui软件算出word0-5的配置字C7 9E 27 7A 80 00进行配置,还是没有输出,为此对比了CDCE421和CDCE421A芯片手册的区别发现了如下图的区别这是CDCE421的表格,下图为CDCE421A的表格
这两个区别主要是t6的时间差别,一个是16us,一个是16ms,请问一下CDCE421A到底时间单位是ms还是us?
问题二:按照配置时序要求上升沿和下降时间为2ns,而我用的单片机当引脚配置为IO输出时,上升和下降时间最小为3ns,最大为5ns,SADATA走线长度大约9mm,请问这个因素影响配置结果吗?
问题三:单片机的CPU工作频率为50Mhz,在每次调用定时函数后,定时器启动之前,要执行三条定时寄存器装载语言(c语言),这个影响配置结果吗?
折腾了将近一个月了,求解答
honghong lee:
回复 Kailyn Chen:
能够起振,32MHZ的频率,用示波器观察过
honghong lee:
回复 Kailyn Chen:
已经拉高了,芯片有输出了,可是不满足输出1024M的要求,输出只有60多Mhz,而且用示波器观察还很不稳定,等于说输出是输入的2倍左右,我该怎样解决这个问题?谢谢你哈
honghong lee:
回复 Kailyn Chen:
原理图和单片机应用程序粘贴如下,原理图如下图
CDCE和SADATA分别接单片机的IO口,MCCLK为时钟输出引脚。
软件部分如下:
bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 bit 8 bit9 bit 10
word0: 0 0 0 1 1 1 0 0 0 1 1 //除去寄存器地址位后,由高位到低位为0xc7,
word1: 1 0 0 0 1 1 1 1 0 0 1 //除去寄存器地址位后,由高到低为0x9e
word2到word5依次按照上面的顺序排序。
为了配置CDCE421A芯片,在软件中编了两个函数如下:
void out0(uint16_t s) //此函数代表向CDCE421A写0,形参s代表写入0的个数
{ while(s!=0)
{ LPC_GPIO0->DATA |= 1<<4; //向SADATA线上写1
T16B0_delay_us(3); //定时器查询延时3us
LPC_GPIO0->DATA &= ~(1<<4); //向SADATA线上写0
T16B0_delay_us(12); //延时12us
s–; }
}
void out1(uint16_t s) //此函数代表向CDCE421A写1,形参s代表写入1的个数
{ while(s!=0)
{ LPC_GPIO0->DATA |= 1<<4; //向SADATA线上写1
T16B0_delay_us(12); //定时器查询延时12us
LPC_GPIO0->DATA &= ~(1<<4); //向SADATA线上写0
T16B0_delay_us(3); //延时3us
s–; }
}
部分主函数如下:
LPC_GPIO0->DATA |= (1<<5); //CDCE线置高
T16B0_delay_us(45); //延时3t时间,t=15us
out0(2); //输入两个0
out1(2);
out0(2);//进入编程模式
out0(3);
out1(3);
out0(3);
out1(2);//写入word0,从bit0开始依次写入,即写3个0,3个1,3个0,2个1.
word1-word5省略。
honghong lee:
回复 honghong lee:
硬件部分和软件部分如上,把32Mhz晶振两端的电容去除,输出很不稳定,在64MHZ和128Mhz两个频率点来回跳变,就是输不出来1024MHZ的时钟,除去3位寄存器地址位,word0-word5的配置字为c7 9e 27 7a 80 00,写入时序按照bit0到bit10的顺序写入。求求各位帮帮我吧,搞这个时钟已经很长时间了
honghong lee:
回复 Kailyn Chen:
谢谢您的关注,请您帮我看下我的硬件原理图和软件程序有没有问题,谢谢您了