low_level_init.c

来自「最新版IAR FOR ARM(EWARM)5.11中的代码例子」· C语言 代码 · 共 62 行

C
62
字号
/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2007
 *
 *    File name   : low_level_init.c
 *    Description : S3F4A0K low level init module
 *
 *    History :
 *    1. Date        : August 1, 2007
 *       Author      : Stanimir Bonev
 *       Description : Create
 *
 *    $Revision: 18083 $
 **************************************************************************/
#include "arm_comm.h"
#include "board.h"
#include "gic.h"
#include "vectors.h"

/*************************************************************************
 * Function Name: __low_level_init
 * Parameters: none
 * Return: int
 *
 * Description: S3F4A0K low level init
 *
 *************************************************************************/
int __low_level_init (void)
{
  // Clock init
  // set clock to Master oscillator
  CM_CSR = 1;
  CM_SELR_bit.CMCLK_SEL = 0;
  while(CM_SR_bit.STABLE);
  // Set master clock divider <= 40MHz
  CM_MDIVR = (0xACDC << 16) | ((CLK_DIV-1) << 10) | ((LOW_CLK_DIV-1) << 13) | (MCLK_DIV-1);
  // Init PLL
  CM_PDPR  = (0x7AB2UL<<16) | (PRE_DIV_PLL << 10) |(POST_DIV_PLL << 8) | MUL_PLL;
  // Set PCLK divider <= 20MHz
  CM_DIVBR_bit.PCLK1DIV = PCLK_DIV-1;
  // Init Flash wait states
#ifndef RAM_DEBUG
  IFC_MR =(0xAC << 8) | (1UL << 7) | ((CORE_CLK_FREQ > 20MHZ)?1<<2:0);
#endif // RAM_DEBUG
  // set clock to PLL
  CM_CSR = 1;
  CM_SELR = (0xD0C9UL<<16) | 1;
  while(CM_SR_bit.STABLE);

#ifdef DFC_ENA
  // DFC init
  DFC_ECR = 2;
  DFC_MR = 0x80000000 | (0x78 << 8) | (1UL<<7);
#endif

  // GIC init
  GIC_Init((void *)DefaultIrqHandler,(void *)SpuriousHandler);
  return(1);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?