打印

LPC2103 PLL设置问题

[复制链接]
1761|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
schullar|  楼主 | 2013-5-15 14:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 schullar 于 2013-5-15 14:46 编辑

我刚刚接触lpc2103,看力天电子视频学习的....对视频中配置APBDIV有点疑惑,下面就是视频中配置APBDIV的代码.
/* 系统设置, Fosc、Fcclk、Fcco、Fpclk必须定义*/
#define Fosc       11059200              //晶振频率,10MHz~25MHz,应当与实际一至
#define Fcclk      (Fosc * 6)              //系统频率,必须为Fosc的整数倍(1~32),
#define Fcco      (Fcclk * 4)              //CCO频率,必须为Fcclk的2、4、8、16倍,
#define Fpclk      (Fcclk / 4) * 4        //APB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍/* 设置系统各部分时钟 */   
PLLCON = 1;
#if ((Fcclk / 4) / Fpclk) == 1  APBDIV = 0; #endif
#if ((Fcclk / 4) / Fpclk) == 2  APBDIV = 2; #endif
#if ((Fcclk / 4) / Fpclk) == 4  APBDIV = 1; #endif
/*********************************/
((Fcclk / 4) / Fpclk) 怎么算也小于1啊?
求指点。

相关帖子

沙发
huangxz| | 2013-5-16 10:42 | 只看该作者
楼主设置的好像有错

使用特权

评论回复
板凳
schullar|  楼主 | 2013-5-16 18:48 | 只看该作者
是吗,我新手,不是我设置的,我也觉得不对,能指点小弟么。

使用特权

评论回复
地板
schullar|  楼主 | 2013-5-16 18:49 | 只看该作者
huangxz 发表于 2013-5-16 10:42
楼主设置的好像有错

是吗,我新手,不是我设置的,我也觉得不对,能指点小弟么。

使用特权

评论回复
5
huangxz| | 2013-5-16 18:50 | 只看该作者
数据手册里面有啊,楼主稍微看几分钟就可以看出来了

使用特权

评论回复
6
schullar|  楼主 | 2013-5-16 18:52 | 只看该作者
这么久了,都没人帮忙啊,在网上也搜到过有人问这个问题,但都没人回复,我会耐心等的。

使用特权

评论回复
7
huangxz| | 2013-5-16 19:16 | 只看该作者
schullar 发表于 2013-5-16 18:52
这么久了,都没人帮忙啊,在网上也搜到过有人问这个问题,但都没人回复,我会耐心等的。 ...

服了你了

这么清楚的描述你还有什么不懂的?

使用特权

评论回复
8
huangxz| | 2013-5-16 19:17 | 只看该作者
schullar 发表于 2013-5-16 18:52
这么久了,都没人帮忙啊,在网上也搜到过有人问这个问题,但都没人回复,我会耐心等的。 ...

你那个/4就应该去掉才对啊

使用特权

评论回复
9
schullar|  楼主 | 2013-5-17 15:13 | 只看该作者
huangxz 发表于 2013-5-16 19:17
你那个/4就应该去掉才对啊

谢谢您的回复,其实我也是这么想的,但我也验证过,按他给的仿真,寄存器的值是正确的,但改了之后,寄存器的值就不对了,之后……之后我就短路了。要不我把程序发给你看看。

使用特权

评论回复
10
schullar|  楼主 | 2013-5-17 15:23 | 只看该作者

LED.C
/****************************************Copyright (c)**************************************************
**
**     力天电子
**        
**
**------------------------------------------------------------------------------------------------------
* 文件名:LEDCON.C
* 创建人:何呈
* 功能:LED闪烁控制。对发光二极管LED1、LED2、LED3进行控制,采用软件延时方法。
*      使用I/O口直接控制LED,采用拉电流的方式。
* 说明:将跳线器S4的LED1、LED2、LED3短接。
****************************************************************************/
#include  "..\inc\config.h"

/****************************************************************************
* 名称:Delay()
* 功能:长软件延时
* 入口参数:dly  延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  Delay(U32  dly)
{  U16  i;

   for(; dly>0; dly--)
      for(i=0; i<600; i++);
}


/*************************PLL设置************************************************/
void PLL_Init(void)
{
  /* 设置系统各部分时钟 */
    PLLCON = 1;
#if (Fcclk / Fpclk) == 1
  VPBDIV = 0;
#endif
#if (Fcclk / Fpclk) == 2
  VPBDIV = 2;
#endif
#if (Fcclk / Fpclk) == 4
  VPBDIV = 1;
#endif
#if (Fcco / Fcclk) == 2
  PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
#endif
#if (Fcco / Fcclk) == 4
  PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
#endif
#if (Fcco / Fcclk) == 8
  PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
#endif
#if (Fcco / Fcclk) == 16
  PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
#endif
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  while((PLLSTAT & (1 << 10)) == 0);
  PLLCON = 3;
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
}
/****************************************************************************
* 名称:main()
* 功能:控制LED闪烁
****************************************************************************/
void  main(void)
{
    PINSEL0 = 0x00000000;  // 设置所有管脚连接GPIO
    PINSEL1 = 0x00000000;

    IO0DIR = LED_MASK;    // 设置LED2控制口为输出
   
    IO0SET  = LED_MASK;                          //所有的灯都灭
   
    PLL_Init();
   
    while(1)
    {
          IO0CLR = LED1CON;   // 亮灯
          Delay(200);     // 延时
          IO0SET = LED1CON;   // 灭灯
         
          IO0CLR = LED2CON;   // 亮灯
          Delay(200);     // 延时
          IO0SET = LED2CON;   // 灭灯
         
          IO0CLR = LED3CON;   // 亮灯
          Delay(200);     // 延时
          IO0SET = LED3CON;   // 灭灯
    }
}





config.h
/****************************************Copyright (c)**************************************************
**
**     力天电子
**        
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#ifndef TRUE
#define TRUE  1
#endif

#ifndef FALSE
#define FALSE 0
#endif

typedef unsigned char  U8;            /* 无符号8位整型变量         */
typedef signed   char  S8;             /* 有符号8位整型变量         */
typedef unsigned short U16;              /* 无符号16位整型变量        */
typedef signed   short S16;               /* 有符号16位整型变量        */
typedef unsigned int   U32;            /* 无符号32位整型变量        */
typedef signed   int   S32;             /* 有符号32位整型变量        */
typedef float fp32;                     /* 单精度浮点数(32位长度)  */
typedef double fp64;             /* 双精度浮点数(64位长度)  */


/********************************/
/*   ARM的特殊代码    */
/********************************/

#include "LPC2103.h"


/********************************/
/*     应用程序配置   */
/********************************/

/********************************/
/*     本例子的配置   */
/********************************/
/* 系统设置, Fosc、Fcclk、Fcco、Fpclk必须定义*/
#define Fosc   11059200    //晶振频率,10MHz~25MHz,应当与实际一至
#define Fcclk     (Fosc * 4)             //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
#define Fcco   (Fcclk * 4)     //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk     (Fcclk / 4) * 1    //VPB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍

#include "target.h"                             //这一句不能删除

/********************************************
****  LED Define   ****
*********************************************/

#define         LED3CON (0x1<<17)                                     /*P0.17*/
#define  LED2CON (0x1<<18)                        /*P0.18*/
#define  LED1CON (0x1<<19)                        /*P0.19*/
#define  LED_MASK LED1CON|LED2CON|LED3CON


/********************************************
****  BUZZER Define   ****
*********************************************/

#define  BEEP 0x1<<21                               /*P0.21*/

/********************************************
****  PWMDAC Define   ****
*********************************************/

#define  PWM 0x1<<20                              /*P0.20*/


/********************************************
****   KEY Define  ****
*********************************************/

#define  KEY1 0x1<<16                       /*P0.16*/
#define  KEY2 0x1<<15                       /*P0.15*/
#define  ISP 0x1<<14                       /*P0.14*/


/********************************************
****  IIC EEPROM Define         ****
*********************************************/

#define  SCL     0x1<<2                       /*P0.2*/
#define  SDA     0x1<<3                        /*P0.3*/


/********************************************
****   Msster Clock   ****
*********************************************/
#define  MCK  11059200

/********************************************
****  ADC Define           ****
*********************************************/
#define          ADC0   0x01<<22                   /*P0.22*/
#define          ADC1   0x01<<23                   /*P0.23*/

/********************************************
****  LCD Define    ****
*********************************************/

#define  DB4 0x01<<4
#define  DB5 0x01<<5
#define  DB6 0x01<<6
#define  DB7 0x01<<7

#define  DBS 0xf<<4                              //数据位移

#define  RS 0x01<<26
#define  RW 0x01<<25                            //R/W
#define  EN 0x01<<24                            //DE
#define         LCDBL   0x01<<19
/********************************************
****  SPI Define   ****
*********************************************/
#define         SCLK  0x01<<4
#define         MISO  0x01<<5
#define         MOSI  0x01<<6
#define         RCK   0x01<<7




使用特权

评论回复
11
huangxz| | 2013-5-17 15:58 | 只看该作者
schullar 发表于 2013-5-17 15:23
LED.C
/****************************************Copyright (c)*************************************** ...

那好吧,小朋友,你看看这个还会不会短路
lpc21xx.rar (22.07 KB)


使用特权

评论回复
12
schullar|  楼主 | 2013-5-17 16:59 | 只看该作者
huangxz 发表于 2013-5-17 15:58
那好吧,小朋友,你看看这个还会不会短路

我把你的和他给的又都仿真了一遍,把
#define Fpclk   (Fcclk / 4) * 4
末尾的 4 分别改成1,2,4进行仿真,寄存器中APBDIV的值分别为0,2,1。
你的和他的结果一样,不同的是在定义时,你的 (Fcclk / 4) * 4  整个用括号括起来了,他的没有,我猜在除的时候他的
((Fcclk / 4) / Fpclk)是这样算的:
分母 Fpclk 的 (Fcclk/4) 和 4 相乘时没加括号,在被除时,末尾的 4 没被除反而被乘了。
如果这样理解的话就通了,你觉得有没有这可能啊。

使用特权

评论回复
13
schullar|  楼主 | 2013-5-17 17:03 | 只看该作者
schullar 发表于 2013-5-17 16:59
我把你的和他给的又都仿真了一遍,把
#define Fpclk   (Fcclk / 4) * 4
末尾的 4 分别改成1,2,4进行仿真 ...

还有我是用的J-link仿真器,非正品,用KEIL4仿真时提示J-link是克隆的,我用的IAR,极度不喜欢IAR,准备按网上的方法刷刷固件,再来用KEIl编程。谢谢你的指点了。

使用特权

评论回复
14
huangxz| | 2013-5-17 17:07 | 只看该作者
schullar 发表于 2013-5-17 16:59
我把你的和他给的又都仿真了一遍,把
#define Fpclk   (Fcclk / 4) * 4
末尾的 4 分别改成1,2,4进行仿真 ...

代码如何写并不重要,关键能够看懂数据手册上的内容,并让自己掌握

使用特权

评论回复
15
schullar|  楼主 | 2013-5-18 09:23 | 只看该作者
huangxz 发表于 2013-5-17 17:07
代码如何写并不重要,关键能够看懂数据手册上的内容,并让自己掌握 ...

再次感谢你对一个菜鸟的耐心讲解。

使用特权

评论回复
16
huangxz| | 2013-5-18 09:42 | 只看该作者
schullar 发表于 2013-5-18 09:23
再次感谢你对一个菜鸟的耐心讲解。

呵呵,别客气,建议一下楼主,如果有什么问题,尽量将demo工程建立之后贴在上面,这样网友就可以很快的帮你把问题找到.当然不是说要把完整代码贴出,只要能贴出反映问题的就可以了.我也是菜鸟,还要向大家学习.

使用特权

评论回复
17
DXYDZ| | 2015-1-7 10:15 | 只看该作者
这两天刚学习,刚看也不理解,现在终于明白了,其实还是c语言基础没学会
看语句
#if ((Fcclk / 4) / Fpclk) == 4  按定义将Fpclk 代掉,
拆开来就是 (Fcclk/4)/(Fcclk/4)*4  按照运算规则应该先左后右,最后是乘,那就可以理解了
不知是否正确。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

28

帖子

1

粉丝