历史上的今天
今天是:2025年01月13日(星期一)
2021年01月13日 | 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();
史海拾趣
|
高密度电源的工艺设计(看看什么叫牛!140mm*44mm*90mm做到5000W) 高密度电源的工艺设计(看看什么叫牛!140mm*44mm*90mm做到5000W) 在网上看到“斜阳古道”大哥发了篇“高密度电源的工艺设计”,看了之后简直是叹服!拿出来与大家分享。在网上找了半天也没找到原理图什么的, ...… 查看全部问答> |
|
最近公司里两台热辊里的温度传感器出现一个偏高(实测126℃),一个偏低(实测121℃),后来把两个温度传感器交换了一下,两个传感器都变成了123℃,可能是什么原因?温度传感器后面有个放大器。… 查看全部问答> |
|
内存控制器和mmu有什么区别? 现在接触davinci系列处理器,其中包含arm926、vpss(主要用于视频处理)、dsp 这些东西都在内存控制器之下工作,而mmu只在arm端有,想问是内存控制器是在arm内还是另外在片内独立的一个东西,而mmu和内存控制器有什么 ...… 查看全部问答> |
|
大侠们好。 最近做有关MPEG4编解码的项目,用的是Intel PXA270处理器。现在发现编码程序的代码中 mp4emblk.c里ippiCopyBlock_8x8_8u和ippiReconBlock_8x8这两个函数不能够链接。也就是说Intel IPP库里面没有这两个函数。 我下的IPP版本是5.0的。 ...… 查看全部问答> |
|
我现在用的是LM3S6965,我想请问一下这个的串口与51单片机的串口可以直接相连吗?RX接TX,TX接RX可以吗?我正在试,好像不行。问什么啊?哪位帮帮我?… 查看全部问答> |
|
线性匹配独立电流源与传统白光 LED 驱动器解决方案之间的对比 摘要 WLED 解决方案集成了白光 LED 工艺的优点以及创新型节能方案(例如:环境光控照明),从而可以在更广范围内应用,并获得了比过去任何时候都更高的效率。现有的绝大多数 WLED 驱动器解决方案仍然要和电压升压驱动器解决方案搭配使用;但是,随 ...… 查看全部问答> |
|
STM8的ADC连续模式EOC什么时候清零? 连续模式下,ADC连续转换:EOC会置位,然后清零,再转换。是这样的吗? 如果是的话,那我们怎么引用其中一次的转换结果呢?… 查看全部问答> |
|
StellarisWare Software Update (2011.11.08) 很久没关注M3发展了,今天更新了一下进度发现原流明网站(LuminaryMicro)已经随风而挺,都跑到TI官网上。老实说,TI官网的呈现方式不如旧网站直觉,而且下载软件得受限美国软件输出协议,有点麻烦。新的StellarisWare Software Update专页于:http:// ...… 查看全部问答> |




