在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → LPC824外设demo

LPC824外设demo

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.14M
  • 下载次数:9
  • 浏览次数:95
  • 发布时间:2021-09-08
  • 实例类别:嵌入式开发
  • 发 布 人:fk192313871
  • 文件格式:.rar
  • 所需积分:2
 相关标签: demo Pc 外设 24

实例介绍

【实例简介】

LPC824例程,比较全面 分享给大家


【实例截图】

from clipboard

【核心代码】

/*******************************************************************************
*                                 AMetal
*                       ---------------------------
*                       innovating embedded systems
*
* Copyright (c) 2001-2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.
* All rights reserved.
*
* Contact information:
* web site:    http://www.zlg.cn/
* e-mail:      ametal.support@zlg.cn
*******************************************************************************/

/**
 * \file
 * \brief PLL例程,通过HW层的接口实现
 *
 * - 实验现象:
 *   1. 打印PLL期望频率、实际输出频率和CLKOUT引脚输出频率;
 *   2. CLKOUT引脚(PIO0_27引脚)输出__CLKOUT_DIV分频后的主时钟频率。
 *
 * \par 源代码
 * \snippet demo_lpc82x_hw_pll.c src_lpc82x_hw_pll
 *
 * \internal
 * \par Modification history
 * - 1.00 15-07-20  win, first implementation.
 * \endinternal
 */

/**
 * \addtogroup demo_if_lpc82x_hw_pll
 * \copydoc demo_lpc82x_hw_pll.c
 */

/** [src_lpc82x_hw_pll] */
#include "ametal.h"
#include "am_board.h"
#include "am_vdebug.h"
#include "amhw_lpc82x_syscon.h"
#include "amhw_lpc82x_iocon.h"
#include "amhw_lpc82x_swm.h"
#include "amhw_lpc82x_clk.h"
#include "am_lpc82x_inst_init.h"


/**
 * \brief PLL时钟源,为以下一种:
 *        AMHW_LPC82X_CLK_PLLIN_SRC_IRC    或
 *        AMHW_LPC82X_CLK_PLLIN_SRC_SYSOSC 或
 *        AMHW_LPC82X_CLK_PLLIN_SRC_CLKIN;
 */
#define __PLL_CLKSRC                AMHW_LPC82X_CLK_PLLIN_SRC_IRC

/** \name PLL频率控制
 *
 * M = AM_CFG_SYSPLLCTRL_M 1
 * P = 2^(AM_CFG_SYSPLLCTRL_P)
 *
 * PLLOUT = M * PLLIN;
 * FCCO = 2 * P * PLLOUT;
 * @{
 */
 
/** \brief PLL 控制寄存器PSEL值 */
#define __PLL_CFG_PSEL               1

/** \brief PLL 控制寄存器MSEL值 */
#define __PLL_CFG_MSEL               3 

/** \brief PLL期望频率 */
#define __PLL_DESIREDRATE            (48000000UL)

/** \brief 选择输出时钟源 */
#define __CLKOUT_SRC                 AMHW_LPC82X_CLK_CLKOUT_SRC_MAINCLK 

/** \brief 输出时钟源分频 */
#define __CLKOUT_DIV                 48

/** @} */

extern void am_delay_init(void);

/**
 * \brief 例程入口
 */
void demo_lpc82x_hw_pll_entry (void)
{
    volatile uint32_t i;
       
    /* 开启内部IRC */
    if (__CLKOUT_SRC == AMHW_LPC82X_CLK_CLKOUT_SRC_IRC) {
        
        amhw_lpc82x_syscon_powerup(AMHW_LPC82X_SYSCON_PD_IRC);
        amhw_lpc82x_syscon_powerup(AMHW_LPC82X_SYSCON_PD_IRC_OUT);
        
    /* 开启WDT 时钟振荡器 */
    } else if (__CLKOUT_SRC == AMHW_LPC82X_CLK_CLKOUT_SRC_WDTOSC) {
    
        amhw_lpc82x_syscon_powerup(AMHW_LPC82X_SYSCON_PD_WDT_OSC);
        
    /* 开启系统振荡器 */
    } else if (__CLKOUT_SRC == AMHW_LPC82X_CLK_CLKOUT_SRC_SYSOSC) {
        
        amhw_lpc82x_syscon_powerup(AMHW_LPC82X_SYSCON_PD_SYS_OSC);
     }

    /* 配置PLL之前,改变主时钟源为IRC */
    amhw_lpc82x_clk_main_src_set(AMHW_LPC82X_CLK_MAIN_SRC_IRC);
    
    /* 设置PLL时钟源前的准备 */
    if (__PLL_CLKSRC == AMHW_LPC82X_CLK_PLLIN_SRC_SYSOSC) { 
         /* 系统振荡器作为PLL时钟源 */

        /* 将PIO0_8,、PIO0_9 配置为消极模式(无上拉和下拉)*/
        amhw_lpc82x_iocon_mode_set(AMHW_LPC82X_IOCON,
                                   PIO0_8,
                                   AMHW_LPC82X_IOCON_MODE_INACTIVE);
        
        amhw_lpc82x_iocon_mode_set(AMHW_LPC82X_IOCON,
                                   PIO0_9,
                                   AMHW_LPC82X_IOCON_MODE_INACTIVE);

        /* 使能PIO0_8_XTALIN,PIO0_9_XTALOUT 开关矩阵固定引脚功能 */
        amhw_lpc82x_swm_fixed_func_enable(AMHW_LPC82X_SWM,
                                          AMHW_LPC82X_SWM_PIO0_8_XTALIN);
        
        amhw_lpc82x_swm_fixed_func_enable(AMHW_LPC82X_SWM,
                                          AMHW_LPC82X_SWM_PIO0_9_XTALOUT);

        /* 外部 XTAL < 15MHz */
        amhw_lpc82x_clk_pll_bypass_set(FALSE, FALSE);
        
         /* 使能系统 OSC */
        amhw_lpc82x_syscon_powerup(AMHW_LPC82X_SYSCON_PD_SYS_OSC);

        for (i = 0; i < 200; i );
    }
    
    if (__PLL_CLKSRC == AMHW_LPC82X_CLK_PLLIN_SRC_CLKIN) { 
         /* 外部管脚输入作为时钟源   */

        /* 将PIO0_1 配置为消极模式(无上拉和下拉)*/
        amhw_lpc82x_iocon_mode_set(AMHW_LPC82X_IOCON,
                                   PIO0_1,
                                   AMHW_LPC82X_IOCON_MODE_INACTIVE);

        /* 使能PIO0_1 开关矩阵固定引脚功能 CLKIN */
        amhw_lpc82x_swm_fixed_func_enable(AMHW_LPC82X_SWM,
                                          AMHW_LPC82X_SWM_PIO0_1_CLKIN);
        for (i = 0; i < 200; i );
    }
    
    /* 设置PLL时钟源 */
    amhw_lpc82x_clk_pll_src_set(__PLL_CLKSRC);
        
    /* PLLOUT 时钟 */
    amhw_lpc82x_clk_pllctrl_set(__PLL_CFG_MSEL, __PLL_CFG_PSEL);
    amhw_lpc82x_syscon_powerup(AMHW_LPC82X_SYSCON_PD_SYS_PLL);
    
    /* 等待PLL锁定   */
    while (!amhw_lpc82x_clk_pll_locked_chk());  
    
    /* 配置主时钟为PLL输出 */
    amhw_lpc82x_clk_main_src_set(AMHW_LPC82X_CLK_MAIN_SRC_PLLOUT);

    /* 系统时钟分频为48 */
    amhw_lpc82x_clk_system_clkdiv_set(__CLKOUT_DIV);
    
    am_delay_init();
    
    /* 因为时钟改变了,必须重新初始化串口 */
    /* 调试初始化 */
    am_debug_init(am_lpc82x_usart0_inst_init(),
                  AM_CFG_DEBUG_BAUDRATE);
    
    AM_DBG_INFO("PLL configure Success!\r\n");
    AM_DBG_INFO("The Desired rate is %8d Hz\r\n", __PLL_DESIREDRATE);
    AM_DBG_INFO("The Actual Desired rate is %8d Hz\r\n", 
                 amhw_lpc82x_clk_pllout_rate_get());

    /*  配置引脚为时钟输出 */
    am_gpio_pin_cfg(PIO0_27, PIO_FUNC_CLKOUT);
    
    /* 配置输出时钟源和时钟分频参数 */
    amhw_lpc82x_clk_clkout_config(__CLKOUT_SRC, __CLKOUT_DIV);
    
    AM_DBG_INFO("The CLKOUT  rate is  %8d Hz\r\n", 
                amhw_lpc82x_clk_main_clkrate_get() / __CLKOUT_DIV);

    while (1) {
        am_led_on(LED0);
        am_mdelay(200);
        am_led_off(LED0);
        am_mdelay(200);
    }
}

/** [src_lpc82x_hw_pll] */

/* end of file */



标签: demo Pc 外设 24

实例下载地址

LPC824外设demo

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警