单片机
返回首页

lpc1768之开发板初始化工作

2021-01-13 来源:eefocus

要写一个点亮led的程序,首先要做的开发板的初始化工作。要初始化哪些部分呢?


一.开发板初始化操作


1.首先要配置的是:引脚模式选择寄存器。


#define PINMODE0(*(volatile unsigned long *)0x4002C040)


PINMODE0寄存器控制 port0口p0.0---p0.15的上拉电阻/下拉电阻配置


PINMODE1寄存器控制 port0口p0.16---p0.26的上拉电阻/下拉电阻配置




PINMODE2寄存器控制 port1口p1.0---p1.15的上拉电阻/下拉电阻配置


PINMODE3寄存器控制 port1口p1.16---p1.31的上拉电阻/下拉电阻配置




PINMODE4寄存器控制 port1口p2.0---p2.15的上拉电阻/下拉电阻配置


PINMODE5寄存器控制 port1口p2.16---p2.31的上拉电阻/下拉电阻配置




PINMODE6寄存器控制 port1口p3.0---p3.15的上拉电阻/下拉电阻配置


PINMODE7寄存器控制 port1口p3.16---p3.31的上拉电阻/下拉电阻配置




PINMODE8寄存器控制 port1口p4.0---p4.15的上拉电阻/下拉电阻配置


PINMODE9寄存器控制 port1口p4.16---p4.31的上拉电阻/下拉电阻配置


配置方式为:32位寄存器对应管脚的位置0,选择片内上拉电阻方式。


2.禁止全部中断。


__asm int32s IrqDisable (void)

{

CPSIDI

MOVR0, #0

BXLR

}




3.存储器加速模块配置。


#define FLASHCFG(*(volatile unsigned long *)0x400FC000)




FLASHCFG = ((0x05ul << 12) & (~(0x003f))) | 0x003a;


这样将该寄存器的位配置为:0101 0000 0011 1010,使用一个缓冲区可用于指令取指缓冲操作,使用一个缓冲区来处理数据访问的缓冲操作,加速时能,flash访问使用6个cpu时钟。


4.为每个部件设置系统时钟。


#define PCLKSEL0(*(volatile unsigned long *)0x400FC1A8)


#if (FPCLK / (FCCLK / 4)) == 1

PCLKSEL0 = 0x00000000;

PCLKSEL1 = 0x00000000;

#endif


CLKOUTCFG = 0;


5.关闭锁相环PLL0,避免调速错误。

if ((PLL0STAT >> 24) == 1)

{

PLL0CON = 1;

PLL0FEED = 0xAA;

PLL0FEED = 0x55;

}

PLL0CON = 0;

PLL0FEED = 0xAA;

PLL0FEED = 0x55;

while(PLL0STAT & (3 << 24))

{}


6.设置主要时钟。


SCS = (SCS & 0x04) | 0x20;


while ((SCS & (1ul << 6)) == 0)

{}


CLKSRCSEL = 0x01;


PLL0CFG= (((PLL_NVALUE - 1) << 16) | (PLL_MVALUE - 1));

PLL0FEED= 0xAA;

PLL0FEED= 0x55;


PLL0CON= 1;

PLL0FEED= 0xAA;

PLL0FEED= 0x55;


while ((PLL0STAT & (1ul << 24)) == 0)

{}


CCLKCFG = (FCCO / FCCLK) - 1;


while (((PLL0STAT & (1ul << 26)) == 0))

{}

while (((PLL0STAT & 0x00007FFF) != (PLL_MVALUE - 1)) &&

(((PLL0STAT & 0x00FF0000) >> 16) != (PLL_NVALUE - 1)))

{}


PLL0CON= 3;

PLL0FEED = 0xAA;

PLL0FEED = 0x55;

while ((PLL0STAT & (1ul << 25)) == 0)

{}

7.设置usb时钟。




#if FUSBCLK_EN == 1

#if (FCCO % (FUSBCLK * 2)) != 0

PLL1CON = 1;

PLL1CFG = ((FUSBCLK / FOSC) - 1) | (1 << 5);


PLL1FEED = 0xaa;

PLL1FEED = 0x55;

while ((PLL1STAT & (1 << 10)) == 0)

{}

PLL1CON= 3;

PLL1FEED = 0xaa;

PLL1FEED = 0x55;

#else

USBCLKCFG = (FCCO / (FUSBCLK * 2)) - 1;

PLL1CON= 0;

PLL1FEED= 0xaa;

PLL1FEED= 0x55;

#endif

#endif



8.设置存储器加速模块


#if FCCLK <= 20000000

FLASHCFG = ((0x01ul << 12) & (~(0x003f))) | 0x003a;

#endif


#if FCCLK > 20000000 && FCCLK <= 40000000

FLASHCFG = ((0x02ul << 12) & (~(0x003f))) | 0x003a;

#endif


#if FCCLK > 40000000 && FCCLK <= 60000000

FLASHCFG = ((0x03ul << 12) & (~(0x003f))) | 0x003a;

#endif


#if FCCLK > 60000000 && FCCLK <= 80000000

FLASHCFG = ((0x04ul << 12) & (~(0x003f))) | 0x003a;

#endif


#if FCCLK > 80000000 && FCCLK <= 100000000

FLASHCFG = ((0x05ul << 12) & (~(0x003f))) | 0x003a;

#endif


STCALIB = FCCLK / 100;


IrqEnable();


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • CCD图像传感器在微光电视系统中的应用

  • 光控音效发生器电路

  • 如何利用ESP8266制作一个简单的四轴飞行器

  • 非常简单的150W功放电路图

  • 一个简单的警笛电路图

  • 如何使用LED驱动器LM3915制作振动计

    相关电子头条文章