4041|8

928

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

LM3s8962体验之六……时钟寄存器操作 [复制链接]

时钟设置

一、简介

    本程序实验使用更改寄存器,设置系统时钟变化。软件延时因系统时钟而改变。进一步促使蜂鸣时间间隔变化。

二、时钟原理

1、时钟源

  1)、外部振荡器、050MHZ

  2)、主振荡器、

  3)、内部振 荡器、误差太大,主要用来查测主振荡器和PLL的故障。以及响应外部事件且不基于时间的外设(UART)。15MHz+/-50

4)、分频的内部振荡器

 PLL 可以以上四个做为输入。3.579545MHz8.192MHz

2、寄存器

   运行模式时钟配置(RCC

 

相关位。

  SYSDIV 可设系统时钟分频值

  USESYSDIV 使能系统分频器

  PWRDN   PLL掉电

  BYPASS  PLL旁路 

  XTAL  指定主振荡器相关值

  OSCSRC  振荡源

  IOSCDIS  内部振荡器

  MOSCDIS  主振荡器

3、函数

Void  SysCtlClockSet(unsigned long ulConfig)

这个函数配置器件的时钟。输入晶体频率、使用的振荡器、PLL 的使用和系统时钟分频 器全部用这个函数来配置。

系统时钟分频器   YSCTL_SYSDIV_1……64

PLL 的使用由 SYSCTL_USE_PLL SYSCTL_USE_OSC 来选择

外 部 晶 体 频 率  SYSCTL_XTAL_MHZ

?SYSCTL_OSC_MAIN SYSCTL_OSC_INT SYSCTL_OSC_INT4SYSCTL_OSC_INT30 SYSCTL_OSC_EXT32

内部振荡器和主振荡器分别用 SYSCTL_INT_OSC_DIS SYSCTL_MAIN_OSC_DIS 标 志来禁止

最新回复

楼主是什么软件的界面  指示一下  详情 回复 发表于 2010-12-13 16:59
 
点赞 关注
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709

回复
举报

928

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

三、程序解析 实验程序基本实现功能改变蜂鸣器的鸣声时间间隔。由于本程序是对时钟的控制,如果更改不当,会促使处理器的 JTAG接口连接失效的问题,即遇到用调试器再也无法连接的情况。为了预防此种情况,应当在程序一开始的地方,加一函数,当需要 JTAG 连接时,先按住 设定的KEY 不松手,再复位,则程序进入一个死循环,有一指示灯示意以等待 JTAG连接,在此状态下JTAG就可以正常使用。通过以下介面可以观察各种GPIO口各系统时钟的状态。

 

 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 

回复

928

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

1、使用库函数     方便,简捷。

   1)、调用库函数的头文件,方便引用库函数

#include "hw_memmap.h"

#include "hw_types.h"

#include "ssi.h"

#include "gpio.h"

#include "sysctl.h"

#include "systick.h"

   2)、

定义延时函数

void delay (unsigned long uld)

JTAG 失效函数

Void JTAGProtect(void);

  3 主函数

通过更变时钟,更改蜂鸣的鸣响间隔。

int main (void)

{

    unsigned long  i;

    JTAGProtect();  

        

         while (1) {

    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC |

                   SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);  /*  设置直接使用外部晶体        */

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);               /*  GPIOG提供时钟  */

/* 设定 GPIO PG1引脚为推挽2MA输出   */

    GPIOPadConfigSet(GPIO_PORTG_BASE, BEEP, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);

    /* 设定 GPIO PG1 引脚为GPIO输出口       */

    GPIODirModeSet(GPIO_PORTG_BASE, BEEP, GPIO_DIR_MODE_OUT); 

    for (i = 0; i < 10; i++) {                                                      //10次蜂鸣

        GPIOPinWrite(GPIO_PORTG_BASE,BEEP,~BEEP);

        delay(200000);

        GPIOPinWrite(GPIO_PORTG_BASE,BEEP,BEEP);

        delay(200000);

    }

  

    SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_OSC_MAIN |

                   SYSCTL_USE_PLL   | SYSCTL_XTAL_8MHZ); /*  设置使用PLL10分频         */

    for (i = 0; i < 10; i++) {

        GPIOPinWrite(GPIO_PORTG_BASE,BEEP,~BEEP);                //10次蜂鸣

        delay(200000);

        GPIOPinWrite(GPIO_PORTG_BASE,BEEP,BEEP);

        delay(200000);

    }

         JTAGProtect ();

 } 

  

}

       

 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 

回复

928

帖子

0

TA的资源

五彩晶圆(高级)

4
 

2、直接寄存器

   进一加深理解。

1

预定义寄存器,便于访问。

 

#define HWREG(x)               (*((volatile unsigned long *)(x)))

 

#define SYSCTL_PERIPH_GPIOE     0x20000010                              /*  GPIO E                      */

#define SYSCTL_PERIPH_GPIOF     0x20000020       /*  GPIO F                      */         #define SYSCTL_PERIPH_GPIOG     0x20000040        /*  GPIO G                      */

#define SYSCTL_RCGC2                       0x400fe108         /*  运行模式时钟选通控制寄存器     */

#define SYSCTL_RCC                                0x400fe060     /*  运行模式时钟门控寄存器2     */

#define GPIO_PORTE_BASE         0x40024000        /*  GPIO Port E                 */

#define GPIO_PORTF_BASE         0x40025000        /*  GPIO Port F                 */

#define GPIO_PORTG_BASE         0x40026000         /*  GPIO Port G                 */

#define GPIO_O_DIR                  0x00000400           /*  数据方向寄存器              */

#define GPIO_O_AFSEL                  0x00000420            /*  模式控制寄存器              */

#define GPIO_O_DATA                      0x00000000     /*  数据寄存器                  */

#define GPIO_O_DR4R             0x00000504      /*  4mA驱动选择                 */

#define GPIO_O_DEN              0x0000051C      /*  数字输入使能                */

#define  GPIO_O_WPU                                 0x00000510      /*  上拉使能                    */

#define KEY                                 0x00000004       /*  定义KEY LEFT                */

#define LED                      0x00000001        /*  定义LED PF0                 */

#define BEEP                    0x00000002    /*  定义BEEP PG0                 */

 

 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 

回复

928

帖子

0

TA的资源

五彩晶圆(高级)

5
 
2)

  延时函数同上

  防止JTAG失效的程序

void JTAGProtect (void)

{   

   unsigned long  i;

HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOF & 0x0fffffff;

/*  使能GPIO PF口外设           */

HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOE & 0x0fffffff;

/* 使能GPIO PE口外设           */

         for (i = 0; i < 4; i++);

    HWREG(GPIO_PORTE_BASE + GPIO_O_DIR) &= ~KEY; /*  GPIO PE2为输入              */

    HWREG(GPIO_PORTE_BASE + GPIO_O_AFSEL) &= ~KEY; /*  PE2为GPIO功能               */

  

    HWREG(GPIO_PORTF_BASE + GPIO_O_DIR) |= LED; /*  GPIO PB6为输出              */

    HWREG(GPIO_PORTF_BASE + GPIO_O_AFSEL) &= ~LED; /*  PB6为GPIO功能              */         /*设置为4mA驱动                 */

         HWREG(GPIO_PORTE_BASE + GPIO_O_DR4R) = (HWREG(GPIO_PORTE_BASE + GPIO_O_DR4R) | KEY);              /*设置为推挽管脚                */

         HWREG(GPIO_PORTE_BASE + GPIO_O_DEN) = (HWREG(GPIO_PORTE_BASE + GPIO_O_DEN) | KEY); /*设置为上拉                  */

         HWREG(GPIO_PORTE_BASE + GPIO_O_WPU) = (HWREG(GPIO_PORTE_BASE + GPIO_O_WPU) | KEY); /* 设置为4mA驱动              */

         HWREG(GPIO_PORTF_BASE + GPIO_O_DR4R) = (HWREG(GPIO_PORTF_BASE + GPIO_O_DR4R) | LED);                               /*设置为推挽管脚                */

         HWREG(GPIO_PORTF_BASE + GPIO_O_DEN) = (HWREG(GPIO_PORTF_BASE + GPIO_O_DEN) | LED);



while((HWREG(GPIO_PORTE_BASE + (GPIO_O_DATA + (KEY << 2))))==0) {      

/*  读KEY1引脚的值,并判断,如果为 低,则熄灭LED              */

                      HWREG(GPIO_PORTF_BASE + (GPIO_O_DATA + (LED << 2))) = LED;

             }                        

HWREG(GPIO_PORTF_BASE + (GPIO_O_DATA + (LED << 2))) = ~LED;

/*  否则点亮LED3                */

}

3)主函数

int main (void)

{

    unsigned long  i;

         unsigned  long  div;

    div = 1<<23;        

    JTAGProtect();

         HWREG(SYSCTL_RCC) =0x078E3B80;   

HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOG & 0x0fffffff; /*使能GPIO PG口外设       */

         for (i = 0; i < 4; i++);

    HWREG(GPIO_PORTG_BASE + GPIO_O_DIR) |= BEEP;  /*  GPIO PG0为输出              */

HWREG(GPIO_PORTG_BASE + GPIO_O_AFSEL) &= ~BEEP; /* PG0为GPIO功能               */

         /* 设置为4mA驱动              */

         HWREG(GPIO_PORTG_BASE + GPIO_O_DR4R) = (HWREG(GPIO_PORTG_BASE + GPIO_O_DR4R) | BEEP);                      /*设置为推挽管脚                */

         HWREG(GPIO_PORTG_BASE + GPIO_O_DEN) = (HWREG(GPIO_PORTG_BASE + GPIO_O_DEN) | BEEP);

  

    for (i = 0; i < 10; i++) {                      //10次蜂鸣

                     HWREG(GPIO_PORTG_BASE + (GPIO_O_DATA + (BEEP << 2))) = BEEP;

               delay(200000);                  

          HWREG(GPIO_PORTG_BASE + (GPIO_O_DATA + (BEEP << 2))) = ~BEEP;

/*  否则点亮LED               */

                     delay(200000);         

    }

            HWREG(SYSCTL_RCC) =0x04CE0380;

   while (1) {

      

   for (i = 0; i < 10; i++) {                      //10次蜂鸣

                     HWREG(GPIO_PORTG_BASE + (GPIO_O_DATA + (BEEP << 2))) = BEEP;

               delay(200000);                  

          HWREG(GPIO_PORTG_BASE + (GPIO_O_DATA + (BEEP << 2))) = ~BEEP;   

                     delay(200000);         

    }     

         HWREG(SYSCTL_RCC) += div;       //循环改变时钟     

    div += 1<<23;

         if(      HWREG(SYSCTL_RCC) > 0x07000000 ) div= 1<<23;

                   JTAGProtect ();

    }  

   

}
 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 

回复

545

帖子

0

TA的资源

一粒金砂(高级)

6
 

赞一个

 
 
 

回复

1万

帖子

16

TA的资源

版主

7
 

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

802

帖子

23

TA的资源

五彩晶圆(中级)

8
 
楼主是什么软件的界面  指示一下
 
个人签名生活在激情中 ... 希望 哈哈

https://home.eeworld.com.cn/?80086
 
 

回复

928

帖子

0

TA的资源

五彩晶圆(高级)

9
 

原帖由 HOHO 于 2010-12-13 16:59 发表 楼主是什么软件的界面 指示一下

 

keil啊。

 
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表