物联网项目---M0系统设置和时钟设置

今天看了一天的寄存器,把一些心得分享给大家,希望大家批评指正。

可能看到的东西有10分能理解的只有8分,能到总结好记住的不到五分,最后由于个人能力问题写到文档上的可能不到2分了,内容过于粗浅大家见谅。

1、Colink 固件升级
Colink板子链接
2、安装Colink驱动ColinkExUsbDriver-1.2.0,然后重启PC
3、Colink与keil链接调试插件安装CoMDKPlugin-1.4.2

win7 64 位ColinkExUsbDriver-1.2.0 安装方法

you need to download  Modified the inf file from:http://www.coocox.org/tools/patch/colinkex.inf, then do the following operation:

1.Open the Installation folder:  replace the inf file with the new one.

2.Delete the file:dpinst.xml.

3. run dpinst_amd64.exe.

PS: Only Windows  64bit  OS need to do the replacement.

For Nepi: Please do the same operation.If the driver is unable to be installed on vista 64bit, connect us.

We will release a new driver in a few days.


早上安装keil的一点小插曲,我的是vin7 64位没有对应的驱动,后来在网上查到的解决方法;

好了下面开始分析程序,在keil下建立工程就会生成对应的引导文件,也就是汇编写的,怎么引导c代码,这里掠过。

开始第一个main();

int main(void) 
{
  SystemInit();

  GPIOInit();
  
  CLKOUT_Setup(CLKOUTCLK_SRC_MAIN_CLK);   

/*这个主要是要设置CLKOUT,WDT CLOCK,SPI,UART,等输出时钟*/
  
  while(1)                       
  {  
  }
  
}


好了啃掉第一个函数SystemInit(),这里涉及到各种寄存器都要亲自动手去看芯片手册,


void SystemInit (void)
{
  uint32_t i;

  LPC_SYSCON->SYSMEMREMAP = 0x2;

/*这个函数是内存映射函数,0x2,是将flash映射到0x0地址,我看了一下手册,发现flash就在0x0地址,所以只要程序下载到flash中就可以运行,(注意,程序默认从0x0地址开始执行的)*/


  LPC_SYSCON->SYSOSCCTRL = 0x00;

/*系统晶振选择,0x00 是默认值,频率范围是1-20MHz*/

  
  LPC_SYSCON->PDRUNCFG &= ~(0x1<<5);

/*这个用来设置power-down 的,不知道怎么翻译好了,大家应该都懂得,这种表示是将第六位清零,其他位保持不变第六位是SYSOSC_PD 系统晶振*/


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

/*等待200us  */

  Main_PLL_Setup();  

/*又遇到一个函数,这个函数是对时钟进行设置的,上面选择了晶振然后设置时钟很正常的思路,具体解释看下面*/


  
  LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16);

/*使能IO时钟,注意,这里没有使能其他时钟,如果要用其他设备,可以在下面添加使能代码*/
  return;
}


void Main_PLL_Setup ( void )
{
  uint32_t regVal;


  ClockSource = OSC_CLK;  
  LPC_SYSCON->SYSPLLCLKSEL = MAIN_CLKSRCSEL_Val;    /* Select system OSC */
  LPC_SYSCON->SYSPLLCLKUEN = 0x01;                  /* Update clock source */
  LPC_SYSCON->SYSPLLCLKUEN = 0x00;                  /* toggle Update register once */
  LPC_SYSCON->SYSPLLCLKUEN = 0x01;
  while ( !(LPC_SYSCON->SYSPLLCLKUEN & 0x01) );     /* Wait until updated */
/*这一部分是选择时钟源的,将SYS-PLL时钟源设置为 System 晶振,并更新时钟源*/



  regVal = LPC_SYSCON->SYSPLLCTRL;
  regVal &= ~0x1FF;
  LPC_SYSCON->SYSPLLCTRL = (regVal | (MAIN_PLL_P_Val<<5) | MAIN_PLL_M_Val);
  
  
  LPC_SYSCON->PDRUNCFG &= ~(0x1<<7);

/*这个用来设置power-down 的,第八位代表 SYSPLL_PD晶振*/
  while ( !(LPC_SYSCON->SYSPLLSTAT & 0x01) );    


  LPC_SYSCON->MAINCLKSEL = 0x03;
  LPC_SYSCON->MAINCLKUEN = 0x01;
  LPC_SYSCON->MAINCLKUEN = 0x00;
  LPC_SYSCON->MAINCLKUEN = 0x01;
  while ( !(LPC_SYSCON->MAINCLKUEN & 0x01) );
/*这一部分是选择时钟源的,将MAINCLK 时钟源设置为 PLL clock,并更新时钟源*/

  LPC_SYSCON->SYSAHBCLKDIV = SYS_AHB_DIV_Val;


  SystemFrequency = ClockSource * (MAIN_PLL_M_Val+1);

  SystemAHBFrequency = (uint32_t)(SystemFrequency/SYS_AHB_DIV_Val);
  return;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值