2
、直接阅读创龙的
GEL
文件可以知道
PLL0_SYSCLK
(
1~7
)和
PLL1_SYSCLK
(
1~3
)的配置情况。简单贴一点删减了的代码,具体程序阅读创龙的
GEL
文件即可,这里的代码只做示意之用。
Set_Core_456MHz() {
device_PLL0(0,18,0,0,1,3,9);
}
Set_DDRPLL_156MHz() {
device_PLL1(12,0,0,1,2);
}
Set_DDR2_156MHz() {
Set_DDRPLL_156MHz();
DEVICE_DDRConfig();
}
Core_456MHz_DDR2_156MHz() {
Set_Core_456MHz();
Set_DDR2_156MHz();
}
device_PLL0(unsigned int CLKMODE, unsigned intPLLM, unsigned int POSTDIV,unsigned int PLLDIV1, unsigned int PLLDIV2, unsignedint PLLDIV3, unsigned int PLLDIV7 ) {
}
device_PLL1(unsigned int PLLM,unsigned intPOSTDIV,unsigned int PLLDIV1, unsigned int PLLDIV2, unsigned int PLLDIV3 ) {
}
从程序可以知道
PLL0
的配置情况如下:
1
)、外部有源晶振:
24MHz
;
2
)、
CLKMODE=0
;
PLLM=18
;
POSTDIV=0
;
PLLDIV1=0
;
PLLDIV2=1
;
PLLDIV3 =3
;
PLLDIV7=9
。
阅读
6748
技术参考手册可以知道:
24*
(
18+1
)
=456 MHz
;
456/1=456 MHz
;
SYSCLK1=456/1=456 MHz
;
SYSCLK2=456/2=228 MHz
;
SYSCLK3=456/4=114MHz
;
SYSCLK7=456/1=45.6 MHz
;
同理,
PLL1
的配置情况如下:
1
)、外部有源晶振:
24MHz
;
2
)、
PLLM=12
;
POSTDIV=0
;
PLLDIV1=0
;
PLLDIV2=1
;
PLLDIV3 =2
。
阅读
6748
技术参考手册可以知道:
24*
(
12+1
)
=312MHz
;
312/1=312 MHz
;
SYSCLK1=312/1=312 MHz
;
SYSCLK2=312/2=156 MHz
;
SYSCLK3=312/3=104MHz
。
3
、使用读取内存的方式配置寄存器,从而查看各模块时钟。
PLL0
时钟查看分如下几步:
1
)、点亮
2
个
LED
灯
D7
、
D9
,验证
DEBUG
模式正常运行;
2
)、
CLKOUT
引脚复用选择;
3
)、选择
PLL0_SYSCLK(1~7)
中的一个,在
CLKOUT
引脚观察输出。
具体代码如下:
4
、用示波器观察输出。
CLKOUT
引脚位于
C4748
底板扩展口
J3-pin11(up_OBSCLK)
;
接地线我连的
J3-pin15
(
GND
)。
由下图配置寄存器,选择输出时钟:
先上开发板上点亮
D7
、
D9
的图。注意只有
2
个
LED
亮了,只是太亮感觉
4
个都亮了。
1
)、当
OCSEL
配置为
1Dh
时,理论值
SYSCLK7=456/1=45.6 MHz
,实际观察为:
45.599MHz
,符合要求。
2
)当
OCSEL
配置为
19h
时,理论值
SYSCLK3=456/4=114MHz
;实际观察为:
113.997MHz
,符合要求。
3
)当
OCSEL
配置为
18h
时,理论值
SYSCLK2=456/2=228 MHz
;实际观察为:
227.995MHz
,符合要求。
4
)当
OCSEL
配置为
17h
时,理论值
SYSCLK1=456/1=456 MHz
;实际观察为:
20~98kHz
变动,显然不符合要求。
5
、另外,用示波器观察
PLL1
的时钟
SYSCLK1
、
SYSCLK2
、
SYSCLK3
,没有得到正确的显示结果。所以这一部分我还要继续查找原因。
这是观察
PLL1
时钟的配置,各位可以帮我看看有什么错误?帮忙分析原因!