[原创] 菜鸟学习笔记4---系统时钟设置,Oled使用

blackwc2006   2010-12-25 21:10 楼主
先说说系统时钟设置

系统时钟的获取如下所示:

基础时钟源-------->[PLL锁相环倍频(400M/2)]-------->系统分频-------->系统时钟

其中PLL倍频部分是可选的。


在设置系统时钟的时候我们必需指定四个参数:
1)系统的基础时钟源(外部晶振还是内部振荡器);
2)外部晶振的频率是多少;
3)系统时钟源(是否使用锁相环);
4)系统分频系数;

LM3S8962的基础时钟源可以是外部主振荡器,12M内部振荡器,12M内部振荡器/4,30K内部振荡器。
支持的主振荡器频率值参考8962的数据手册,板子上用的是8MHZ的。
内部振荡器频率为12MHZ,但是有30%的误差。
如果既要使用内部振荡器又要使用锁相环,那么必须使用内部振荡器/4作为时钟源。
内部30K时钟源主要用于睡眠模式。

基础时钟源的参数可以是:
SYSCTL_OSC_MAIN     使用主振荡器
SYSCTL_OSC_INT         使用12M内部振荡器
SYSCTL_OSC_INT4       使用12M内部振荡器/4
SYSCTL_OSC_INT30     使用30K内部振荡器
(注:中文版数据手册在寄存器描述部分没有对时钟源的描述有误,见下图)
中文版
2.JPG
英文原版
1.JPG

使用外部振荡器时需要指定主振荡器频率,这样PLL倍频的时候才能提供比较准确的400M时钟。
外部振荡器频率的参数为如下格式:SYSCTL_XTAL_**MHZ,**为晶振的频率值(详细信息可以看sysctl.h文件)。


系统时钟源的参数可以是:
SYSCTL_USE_OSC:直接使用振荡器
SYSCTL_USE_PLL:使用锁相环倍频
如果使用锁相环,外部振荡器频率必须是3.5795M到8.192M之间,内部振荡器必须是12M内部振荡器/4。
PLL输出的频率是200M。


系统分频系数的参数为如下格式:SYSCTL_SYSDIV_**,**为分频系数,可以是1-64。需要注意的是在使用PLL的情况下分频系数必须是4以上。


我们通过SysCtlClockSet(unsigned long ulConfig)来实现系统时钟的设置。ulConfig以上四个参数进行逻辑或运算组成的。举几个例子
如果我们想用外部8MHZ振荡器做系统时钟,可以写
    SysCtlClockSet(SYSCTL_OSC_MAIN|SYSCTL_XTAL_8MHZ|SYSCTL_USE_OSC|SYSCTL_SYSDIV_1);
如果想用25M的时钟,那么可以写
    SysCtlClockSet(SYSCTL_OSC_MAIN|SYSCTL_XTAL_8MHZ|SYSCTL_USE_PLL|SYSCTL_SYSDIV_8);



可以通过SysCtlClockGet()函数来获取系统当前时钟频率。


下面说说Oled的使用

板上有一个宽x高=128x96的oled屏,每个点有4bit的灰度,也就是16阶灰度。处理器通过SSI总线控制Oled。
在StellarisWare\boards\el-lm3s8962\drivers里有rit128x96x4.h和rit128x96x4.c两个文件,这就是Oled的驱动了。它为我们提供了如下API。

void RIT128x96x4Clear(void);//清屏
void RIT128x96x4StringDraw(const char *pcStr,unsigned long ulX,unsigned long ulY,unsigned char ucLevel);//显示写字符串
void RIT128x96x4ImageDraw(const unsigned char *pucImage,unsigned long ulX,unsigned long ulY,unsigned long ulWidth,unsigned long ulHeight);//显示图像
void RIT128x96x4Init(unsigned long ulFrequency);//初始化Oled,参数为SSI总线的时钟频率
void RIT128x96x4Enable(unsigned long ulFrequency);//使能连接Oled的SSI总线
void RIT128x96x4Disable(void);//禁能SSI总线
void RIT128x96x4DisplayOn(void);//显示开
void RIT128x96x4DisplayOff(void);//显示关

在使用时先调用RIT128x96x4Init(unsigned long ulFrequency)来初始化Oled,Frequency一般设为1M。
之后就可以调用其它函数了,最常用的就是RIT128x96x4StringDraw(const char *pcStr,unsigned long ulX,unsigned long ulY,unsigned char ucLevel)。它的四个参数分别是要显示的字符串指针,X坐标,Y坐标,灰度(0-15)。

下面这个程序简单演示了系统时钟设置和Oled使用。
testoled.rar (105.32 KB)
(下载次数: 64, 2010-12-25 21:10 上传)


回复评论 (4)

怎么能说是菜鸟的,明明很厉害啊
我爱电子!
点赞  2010-12-25 22:17

不错顶下

http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2010-12-26 07:19
不仅是不错
点赞  2011-7-13 22:10
点赞  2012-3-6 17:14
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复