[ZLG-ARM] 时钟问题

[复制链接]
1446|1
 楼主| reeper 发表于 2009-4-9 14:59 | 显示全部楼层 |阅读模式
#include&nbsp;<br />#include&nbsp;<br />#include&nbsp;&nbsp;<br />typedef&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;uchar&nbsp;;<br />typedef&nbsp;unsigned&nbsp;int&nbsp;&nbsp;uint;<br />#define&nbsp;P_262&nbsp;P1&nbsp;&nbsp;&nbsp;//口线连线(从高到低):A3,A2,A1,A0,D1,D0,Wr,_<br />&nbsp;&nbsp;sbit&nbsp;P_wr&nbsp;=&nbsp;P_262^1;<br />&nbsp;&nbsp;sbit&nbsp;Fclk_S2=P2^2;&nbsp;//CPLD选择Fclk控制线<br />&nbsp;&nbsp;sbit&nbsp;Fclk_S1=P2^1;<br />&nbsp;&nbsp;sbit&nbsp;Fclk_S0=P2^0;<br />sbit&nbsp;PFS0=P2^3;//工作模式工作模式选择0<br />sbit&nbsp;PFS1=P2^4;//工作模式工作模式选择1<br />long&nbsp;FLCK&nbsp;=&nbsp;1000000&nbsp;;&nbsp;//MAX262工作频率<br />uchar&nbsp;Mod=2;//工作模式0,1,2,3<br />#define&nbsp;PI&nbsp;3.1415926<br /><br />#define&nbsp;delay_262()&nbsp;&nbsp;_nop_();_nop_();_nop_()<br />void&nbsp;delay(unsigned&nbsp;int&nbsp;d)<br />{unsigned&nbsp;char&nbsp;j;<br />while(d!=0)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;d--;<br />&nbsp;&nbsp;&nbsp;j=70;<br />&nbsp;&nbsp;&nbsp;do&nbsp;{j--;}&nbsp;while(j!=0);<br />&nbsp;&nbsp;}<br />}<br />//***************************************************************<br />//写两比特的数据<br />void&nbsp;write(uchar&nbsp;add,uchar&nbsp;dat2bit)<br />{<br />&nbsp;&nbsp;&nbsp;P_262=(P_262&0x0f)|(add&lt&lt4);<br />&nbsp;&nbsp;P_262=(P_262&0xf3)|((dat2bit&lt&lt2)&0x0c);<br />&nbsp;&nbsp;P_wr=0;<br />&nbsp;&nbsp;delay_262();<br />&nbsp;&nbsp;P_wr=1;<br />&nbsp;&nbsp;delay_262();<br />}<br />//**************************************************************<br />//设置A通道工作模式<br />void&nbsp;Set_AM(uchar&nbsp;mod)<br />{<br />&nbsp;&nbsp;&nbsp;write(0,mod);<br />&nbsp;&nbsp;}<br />//设置A通道F值<br />void&nbsp;Set_AF(uchar&nbsp;datF)<br />{<br />&nbsp;&nbsp;&nbsp;write(1,datF);<br />&nbsp;&nbsp;&nbsp;datF=datF&gt&gt2;<br />&nbsp;&nbsp;&nbsp;write(2,datF);<br />&nbsp;&nbsp;&nbsp;datF=datF&gt&gt2;<br />&nbsp;&nbsp;&nbsp;write(3,datF);<br />&nbsp;&nbsp;}<br />//设置A通道Q值<br />void&nbsp;Set_AQ(uchar&nbsp;datQ)<br />{<br />&nbsp;&nbsp;&nbsp;write(4,datQ);<br />&nbsp;&nbsp;&nbsp;datQ=datQ&gt&gt2;<br />&nbsp;&nbsp;&nbsp;write(5,datQ);<br />&nbsp;&nbsp;&nbsp;datQ=datQ&gt&gt2;<br />&nbsp;&nbsp;&nbsp;write(6,datQ);<br />&nbsp;&nbsp;&nbsp;datQ=(datQ&gt&gt2)&1;<br />&nbsp;&nbsp;&nbsp;write(7,datQ);<br />&nbsp;&nbsp;}<br />//设置B通道工作模式<br />void&nbsp;Set_BM(uchar&nbsp;mod)<br />{<br />&nbsp;&nbsp;&nbsp;write(8,mod);<br />&nbsp;&nbsp;}<br />//设置A通道F值<br />void&nbsp;Set_BF(uchar&nbsp;datF)<br />{<br />&nbsp;&nbsp;&nbsp;write(9,datF);<br />&nbsp;&nbsp;&nbsp;datF=datF&gt&gt2;<br />&nbsp;&nbsp;&nbsp;write(10,datF);<br />&nbsp;&nbsp;&nbsp;datF=datF&gt&gt2;<br />&nbsp;&nbsp;&nbsp;write(11,datF);<br />&nbsp;&nbsp;}<br />//设置A通道Q值<br />void&nbsp;Set_BQ(uchar&nbsp;datQ)<br />{<br />&nbsp;&nbsp;&nbsp;write(12,datQ);<br />&nbsp;&nbsp;&nbsp;datQ=datQ&gt&gt2;<br />&nbsp;&nbsp;&nbsp;write(13,datQ);<br />&nbsp;&nbsp;&nbsp;datQ=datQ&gt&gt2;<br />&nbsp;&nbsp;&nbsp;write(14,datQ);<br />&nbsp;&nbsp;&nbsp;datQ=(datQ&gt&gt2)&1;<br />&nbsp;&nbsp;&nbsp;write(15,datQ);<br />&nbsp;&nbsp;}<br />//***************************************************************<br />//基本计算<br />//***************************************************************<br />//根据截止频率fc计算中心频率f0<br />//<br />/*<br />uchar&nbsp;CopF0(float&nbsp;q,&nbsp;float&nbsp;fc)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;&nbsp;=&nbsp;&nbsp;pow(q,&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;&nbsp;=&nbsp;&nbsp;(float)q*2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;&nbsp;=&nbsp;(float)(q-1)/q;//1-(1/q)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fc&nbsp;=&nbsp;(float)fc&nbsp;*&nbsp;sqrt(sqrt(1+pow(q,2))-q);<br />&nbsp;&nbsp;}<br />float&nbsp;CopF0_tx(float&nbsp;q,&nbsp;float&nbsp;fc)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;&nbsp;=&nbsp;&nbsp;pow(q,&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;&nbsp;=&nbsp;&nbsp;(float)q*2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;&nbsp;=&nbsp;(float)(q-1)/q;//1-(1/q)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fc&nbsp;=&nbsp;fc&nbsp;*&nbsp;sqrt(sqrt(1+pow(q,2))+q);<br />&nbsp;&nbsp;}<br />*/<br />//根据中心频率求设定值FN<br />float&nbsp;CopFn(uchar&nbsp;mod,&nbsp;float&nbsp;f0)<br />{<br />if&nbsp;(1==mod)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;return&nbsp;((float)((FLCK*2.8284271247/f0)/PI)-26);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;return&nbsp;((float)((FLCK*2/f0)/PI)-26);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />//根据Q求设定值QN<br />uchar&nbsp;CopQn(uchar&nbsp;mod,&nbsp;float&nbsp;q)<br />{<br />if&nbsp;(1==mod)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(128-(float)(90.51/q));<br />&nbsp;&nbsp;&nbsp;}<br />else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(128-(float)(64/q));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />//***************************************<br />//功能接口函数<br />//设定频率<br />Set_F0(uchar&nbsp;mod,float&nbsp;f0&nbsp;)<br />{<br />&nbsp;&nbsp;if(f0&gt28612)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fclk_S2=0;Fclk_S1=0;Fclk_S0=0;//Fclk&nbsp;4M<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLCK=4000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;else&nbsp;if(f0&gt14306)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fclk_S2=0;Fclk_S1=0;Fclk_S0=1;//Fclk&nbsp;2M<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLCK=2000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;else&nbsp;if(f0&gt7153)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fclk_S2=0;Fclk_S1=1;Fclk_S0=0;&nbsp;//Fclk&nbsp;1M<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLCK=1000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;else&nbsp;if(f0&gt3683)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fclk_S2=0;Fclk_S1=1;Fclk_S0=1;//Fclk&nbsp;512K<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLCK=512000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;else&nbsp;if(f0&gt1831)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fclk_S2=1;Fclk_S1=0;Fclk_S0=0;//Fclk&nbsp;256<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLCK=256000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fclk_S2=1;Fclk_S1=0;Fclk_S0=1;//Fclk&nbsp;128<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLCK=128000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />Set_AF(CopFn(mod,f0));<br />Set_BF(CopFn(mod,f0));<br />}<br />//设置滤波器模式&nbsp;,&nbsp;0为底通、1为高通、2为带通<br />Set_PFmod(uchar&nbsp;mod)<br />{<br />if(mod&lt3)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(mod)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;case&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFS1=0FS0=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mod=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFS1=0FS0=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mod=2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFS1=1FS0=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mod=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set_AM(Mod);&nbsp;Set_BM(Mod);<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />//uint&nbsp;Tx;<br /><br />float&nbsp;Tx;<br />void&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;/*<br />&nbsp;&nbsp;&nbsp;Tx=CopFn(Mod,120048);<br />&nbsp;&nbsp;&nbsp;Tx=CopQn(Mod,1);<br />&nbsp;&nbsp;&nbsp;Tx=CopF0(0.7,60000);<br />&nbsp;&nbsp;&nbsp;Tx=CopF0_tx(0.7,Tx);&nbsp;*/<br />&nbsp;&nbsp;&nbsp;delay(10000);delay(10000);delay(10000);<br />&nbsp;&nbsp;&nbsp;Set_AM(Mod);<br />&nbsp;&nbsp;&nbsp;Set_AQ(CopQn(Mod,1));<br />&nbsp;&nbsp;&nbsp;Set_BM(Mod);<br />&nbsp;&nbsp;&nbsp;Set_BQ(CopQn(Mod,1));<br />&nbsp;&nbsp;//Set_AF(CopFn(Mod,5000));<br />&nbsp;&nbsp;//Set_BF(CopFn(Mod,5000));<br />&nbsp;&nbsp;&nbsp;Set_PFmod(2);<br />&nbsp;&nbsp;Set_F0(Mod,8000);<br />&nbsp;&nbsp;for(;;);<br />}<br /><br /><br />请各位帮忙看看。这个程序中52单片机的时钟信号是怎么输入给MAX262的。硬件应该怎么样连接?
zcying 发表于 2009-4-9 15:00 | 显示全部楼层

SPI?还是通过单片机那个自动引脚?

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

139

主题

185

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部