`
isiqi
  • 浏览: 16572163 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

【.Net Micro Framework PortingKit - 06】设置芯片时钟

阅读更多

上两篇《修改启动代码&重写向量表》《SRAM初始化&设置NVIC中断表偏移》文章中,我们设置了中断向量表,初始化了RAM,并重设了向量表的地址,本篇文章是相对重要的一篇,我们将设置芯片时钟。

1、新建CortexM3.h头文件

.\DeviceCode\Targets\Native\CortexM3目录中新建 CortexM3.h文件,并编写如下代码:

#ifndef _CORTEXM3_H_

#define _CORTEXM3_H_1

#include <cores\arm\include\cpu.h>

typedef volatile unsigned long VU32;

typedef volatile unsigned short VU16;

typedef volatile unsigned char VU8;

extern "C"

{

void BootstrapCode_Clocks();

}

/*------------------------ Reset and Clock Control ---------------------------*/

struct CortexM3_RCC

{

static const UINT32 c_Base = 0x40021000;

static const UINT8 FLAG_HSIRDY = ((UINT8)0x20);

static const UINT8 FLAG_HSERDY = ((UINT8)0x31);

/****/ volatile UINT32 CR;

static const UINT32 CR_HSEBYP_Reset = ((UINT32)0xFFFBFFFF);

static const UINT32 CR_HSEBYP_Set = ((UINT32)0x00040000);

static const UINT32 CR_HSEON_Reset = ((UINT32)0xFFFEFFFF);

static const UINT32 CR_HSEON_Set = ((UINT32)0x00010000);

static const UINT32 CR_HSITRIM_Mask = ((UINT32)0xFFFFFF07);

/****/ volatile UINT32 CFGR;

static const UINT32 CFGR_SYSCLK_Div1 = ((UINT32)0x00000000);

static const UINT32 CFGR_SYSCLK_Div2 = ((UINT32)0x00000080);

static const UINT32 CFGR_SYSCLK_Div4 = ((UINT32)0x00000090);

static const UINT32 CFGR_SYSCLK_Div8 = ((UINT32)0x000000A0);

static const UINT32 CFGR_SYSCLK_Div16 = ((UINT32)0x000000B0);

static const UINT32 CFGR_HCLK_Div1 = ((UINT32)0x00000000);

static const UINT32 CFGR_HCLK_Div2 = ((UINT32)0x00000400);

static const UINT32 CFGR_HCLK_Div4 = ((UINT32)0x00000500);

// 省略部分代码 .....

/****/ volatile UINT32 APB1RSTR;

/****/ volatile UINT32 AHBENR;

/****/ volatile UINT32 BDCR;

/****/ volatile UINT32 CSR;

static void Initialize();

static bool GetFlagStatus(UINT8 Flag);

};

struct CortexM3

{

static CortexM3_RCC & RCC() { return *(CortexM3_RCC *)(size_t)(CortexM3_RCC::c_Base); }

};

#endif // _CORTEXM3_H_1

2、编写BootStrap代码

我们从.\DeviceCode\Drivers\Stubs\Processor\stubs_bootstrap目录到.\DeviceCode\Targets\Native\CortexM3\DeviceCode,并修改目录的名字为BootStrap,下一步我们在BootStrap.cpp文件编写如下代码:

#include <tinyhal.h>

#include "..\CortexM3.h"

//--//

#pragma arm section code = "SectionForBootstrapOperations"

void __section(SectionForBootstrapOperations) CortexM3_RCC::Initialize (void)

{

CortexM3_RCC &RCC = CortexM3::RCC();

// RCC system reset(for debug purpose)

/* Set HSION bit */

RCC.CR |= (UINT32)0x00000001;

/* Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], ADCPRE[1:0] and MCO[2:0] bits */

RCC.CFGR &= (UINT32)0xF8FF0000;

/* Reset HSEON, CSSON and PLLON bits */

RCC.CR &= (UINT32)0xFEF6FFFF;

// 省略部分代码 .....

/* Enable GPIOA, GPIOB, GPIOF, GPIOG and AFIO clocks */

RCC.APB2ENR |= CortexM3_RCC::APB2RSTR_GPIOA | CortexM3_RCC::APB2RSTR_GPIOB | CortexM3_RCC::APB2RSTR_GPIOF |CortexM3_RCC::APB2RSTR_GPIOG |CortexM3_RCC::APB2RSTR_AFIO;

}

bool __section(SectionForBootstrapOperations) CortexM3_RCC::GetFlagStatus(UINT8 Flag)

{

UINT32 tmp = 0;

UINT32 statusreg = 0;

CortexM3_RCC &RCC = CortexM3::RCC();

/* Get the RCC register index */

tmp = Flag >> 5;

if (tmp == 1) /* The flag to check is in CR register */

{

statusreg = RCC.CR;

}

else if (tmp == 2) /* The flag to check is in BDCR register */

{

statusreg = RCC.BDCR;

}

else /* The flag to check is in CSR register */

{

statusreg = RCC.CSR;

}

/* Get the flag position */

tmp = Flag & ((UINT8)0x1F);

return ((statusreg & ((UINT32)1 << tmp)) != 0);

}

void __section(SectionForBootstrapOperations) BootstrapCode_Clocks()

{

CortexM3_RCC::Initialize();

}

extern "C"

{

void __section(SectionForBootstrapOperations) BootstrapCode()

{

BootstrapCode_Clocks();

}

}

#pragma arm section code

3、修改.\Solutions\STM3210E\NativeSample\NativeSample.proj文件

NativeSample.proj文件中作如下修改:

<ItemGroup>

<RequiredProjects Include="$(SPOCLIENT)\DeviceCode\Targets\Native\CortexM3\DeviceCode\stubs_bootstrap\dotNetMF.proj" />

<DriverLibs Include="cpu_bootstrap_stubs.$(LIB_EXT)" />

</ItemGroup>

修改为:

<ItemGroup>

<RequiredProjects Include="$(SPOCLIENT)\DeviceCode\Targets\Native\CortexM3\DeviceCode\BootStrap\dotNetMF.proj" />

<DriverLibs Include="BootStrap.$(LIB_EXT)" />

</ItemGroup>

4、编译修改并调试运行,我想这次会有很大的成就感,因为LED闪烁的节奏明显的加快了,我们的CPU在高速运行了!

即将过去的2010年的前三天,对我来说是辛苦的三天,平均每天工作16个小时以上,不仅编写了相关代码,还写了以上六篇文章。希望我的这些努力能点燃.Net Micro Framework爱好者心中的热情,动起手来一起移植.Net Micro Framework,其实这对自己的嵌入式开发功力的提高也大有裨益。明天就要上班了,我将又回到开发Wifi相关接口的工作上来,后续的文章我想只有到下周末才能相见了,到那时我们将编写串口驱动,系统的一些调试信息将可以通过串口传输给PC机上的串口调试程序,这一步将是关键的一步,非常值得的期待,希望我能顺利完成这步工作!

分享到:
评论

相关推荐

    《玩转.NET Micro Framework移植-基于STM32F10x处理器》源程序.rar

    《玩转.NET Micro Framework移植-基于STM32F10x处理器》这本书的主题聚焦于将.NET Micro Framework(简称.NET MF)应用到STM32F10x系列微控制器上,这是一个涉及嵌入式系统开发、C#编程以及硬件平台集成的重要技术...

    《玩转.NET Micro Framework 移植-基于STM32F10x处理器》一书源代码

    《玩转.NET Micro Framework 移植-基于STM32F10x处理器》一书所有的源代码。其它更多的资源可以访问我的blog:http://blog.csdn.net/norains 谢谢!

    Expert .NET Micro Framework

    The Microsoft .NET Micro Framework is a small and efficient .NET runtime environment used to run managed code on devices that are too small and resource constrained for Windows CE and the Compact ...

    Microsoft .net micro framework 4.0 SDK 含源码

    1. **编译器**:这个SDK内含了专门针对.NET Micro Framework优化的C#编译器,使得开发者可以使用C#语法编写代码,同时保持与标准.NET Framework的兼容性。 2. **类库**:NETMF提供了一套丰富的类库,这些类库包括...

    Microsoft .NET Micro Framework嵌入式编程(美 汤普逊)

    《Microsoft .NET Micro Framework嵌入式编程》是美国作者汤普逊所著的一本深入探讨.NET Micro Framework(简称.NET MF)技术的专业书籍。这本书旨在帮助读者理解和掌握如何在嵌入式系统中应用.NET Micro Framework...

    Microsoft .NET Micro Framework 2.5 SDK

    **Microsoft .NET Micro Framework 2.5 SDK** 微软的.NET Micro Framework(简称.NET MF)是一个专为嵌入式设备设计的轻量级.NET运行时环境,它允许开发者使用C#和.NET编程语言来构建和控制低功耗、资源受限的硬件...

    .Net Micro Framework 移植说明文档

    ### .Net Micro Framework 移植说明文档 #### 概述 .Net Micro Framework(.Net MF)是微软为小型设备设计的一个精简版的.NET框架。它不仅继承了.NET的硬件独立性,还提供了两个关键的抽象层:硬件抽象层(HAL)与...

    Expert .NET Micro Framework(德 Jens Kühner)

    《Expert .NET Micro Framework》是由Jens Kühner编著的一本专著,该书深入探讨了.NET Micro Framework这一小巧而强大的嵌入式系统开发框架。.NET Micro Framework是微软推出的一个开源平台,旨在为资源有限的设备...

    .net micro framework file

    .NET Micro Framework(简称.NET MF)是微软开发的一个轻量级.NET框架,主要针对嵌入式设备和物联网(IoT)应用。它提供了基础的.NET编程模型,使得开发者能够使用C#、VB.NET或其他.NET语言来编写高效能的嵌入式程序。...

    .NET Micro Framework Key文件部署说明

    ### .NET Micro Framework Key文件部署说明 #### 一、概述 .NET Micro Framework(.NET MF)是一种用于构建和运行小型嵌入式设备上的应用程序的框架。它为开发人员提供了类似于桌面版.NET Framework的功能,但针对...

    GHI .NET Micro Framework培训教材(英文版)

    - **系统设置**:首先需要设置开发环境,安装必要的软件工具,如.NET Micro Framework SDK和Visual Studio。 - **使用模拟器**:可以通过模拟器测试和调试程序,无需连接实际硬件。 - **创建项目**:在Visual Studio...

    .NET Micro Framework for Windows 7(X64) USB驱动安装说明

    .NET Micro Framework(简称.NET MF)是微软开发的一个嵌入式平台,主要面向资源有限的设备,如物联网(IoT)设备、智能家居控制器等。它提供了一个运行环境,使得开发者能够利用C#或VB.NET等高级语言进行编程,而无需...

    expert .net micro framework

    expert .net micro frameworkexpert .net micro frameworkexpert .net micro framework

    .NET Micro Framework Testing Batch File Generator

    .NET Micro Framework自动化测试工具,需.NET Micro Framework3.0和.NET Micro Framework Test Kit支持...

    .NET Micro Framework开发板使用手册(红牛开发板)

    .NET Micro Framework(简称.NET MF)是微软公司推出的一个嵌入式操作系统平台,主要设计用于资源有限的设备,如物联网(IoT)中的智能硬件、工业自动化设备和消费电子等产品。红牛开发板是一款基于.NET Micro ...

    基于Cortex-M3处理器的.Net Micro Framework移植.pdf

    4. **系统启动和初始化**:移植还包括创建一个启动加载器,它负责初始化处理器状态、设置堆栈、加载.NET Micro Framework的运行时环境,并最终启动应用程序。 5. **优化和调试**:在移植过程中,性能优化和调试是必...

    .Net Micro Framework开发板用户简明手册

    近来有些刚入门的用户,不太了解.NET Micro Framework开发板的使用,所以写了这篇文档,以期缩短用户对开发板的熟悉时间。

Global site tag (gtag.js) - Google Analytics