lpc1788 lcd芯片什么时候面市的

LPC1788(11)
LPC1788系统时钟的设置
LPC1788有3个独立的振荡器。他们是主振荡器,内部RC振荡器,RTC振荡器。复位后,LPC1788将用内部的RC振荡器运行,直到被软件切换。这样就能在没有任何外部晶振的情况下运行。LPC1788的时钟控制如图1所示(英文手册)
&&&&&&&&& 使用12M的晶振作为主振荡器,它通过锁相环PLL0来提高频率提供CPU。由于芯片总是从内部的RC振荡器开始工作,因此主振荡器只会应软件的请求而启动。实现方法是设定SCS寄存器中的OSCEN位使能。主振荡器提供一个状态标志SCS寄存器的OSCSTAT位,这样软件就可以确定何时主振荡器在运行稳定。此时,软件可以控制切换到主振荡器,使其作为时钟源。在启动以前,必须通过SCS的OSCRANGE位,选择一个频率范围。在确定了主振荡器之后,需要进行锁相环的配置。
1)&&&&&& 配置CLKSRCSEL选择正确的时钟源,内部振荡器切换为主振荡器
配置将正确的PLL0设置值写入PLL0CFG寄存器并且在PLL0CON中使能PLL0,向PLLFEED寄存器中写入馈送序列0xAA,0x55;
配置,同;
设置所需的时钟分配器如CCLKSEL,PCLSEL,EMCCLKSEL,以及USBCLKSEL寄存器。
在转载的有提到启动代码程序完成如下内容的工作:
在&Reset_Handler函数中会执行SystemInit函数,这个函数在文件system_LPC177x_8x.c中。&
#define CLOCK_SETUP&&&&&&&&&& 1
#define SCS_Val&&&&&&&&&&&&&& 0x
#define PLL0_SETUP&&&&&&&&&&& 1
#define PLL0CFG_Val&&&&&&&&&& 0x
#define PLL1_SETUP&&&&&&&&&&& 1
#define PLL1CFG_Val&&&&&&&&&& 0x
#define CCLKSEL_Val&&&&&&&&&& (0x&&8))
#define USBCLK_SETUP&&&&&&&&&&& & 1
#define USBCLKSEL_Val&&&&&&&& (0xx02&&8))
#define EMCCLKSEL_Val&&&&&&&& 0x
#define PCLKSEL_Val&&&&&&&&&& 0x
#define PCONP_Val&&&&&&&&&&&& 0x042887DE
#define CLKOUTCFG_Val&&&&&&&& 0x
void SystemInit (void)
#if (CLOCK_SETUP)&&&&&&&&&&&&&&&&&&&&&& /* Clock Setup&&&&&&&&&&&&&&&&&&&&&&& */
& LPC_SC-&SCS&&&&&& = SCS_V
& if (SCS_Val & (1 && 5)) {&&&&&&&&&&&& /* If Main Oscillator is enabled&&&&& */
&&& while ((LPC_SC-&SCS & (1&&6)) == 0);/* Wait for Oscillator to be ready&&& */
& LPC_SC-&CLKSRCSEL = CLKSRCSEL_V&&& /* Select Clock Source for sysclk/PLL0*/
#if (PLL0_SETUP)
& LPC_SC-&PLL0CFG&& = PLL0CFG_V
& LPC_SC-&PLL0CON&& = 0x01;&&&&&&&&&&&& /* PLL0 Enable&&&&&&&&&&&&&&&&&&&&&&& */
& LPC_SC-&PLL0FEED& = 0xAA;
& LPC_SC-&PLL0FEED& = 0x55;
& while (!(LPC_SC-&PLL0STAT & (1&&10)));/* Wait for PLOCK0&&&&&&&&&&&&&&&&&&& */
#if (PLL1_SETUP)
& LPC_SC-&PLL1CFG&& = PLL1CFG_V
& LPC_SC-&PLL1CON&& = 0x01;&&&&&&&&&&&& /* PLL1 Enable&&&&&&&&&&&&&&&&&&&&&&& */
& LPC_SC-&PLL1FEED& = 0xAA;
& LPC_SC-&PLL1FEED& = 0x55;
& while (!(LPC_SC-&PLL1STAT & (1&&10)));/* Wait for PLOCK1&&&&&&&&&&&&&&&&&&& */
& LPC_SC-&CCLKSEL&& = CCLKSEL_V&&&&& /* Setup Clock Divider&&&&&&&&&&&&&&& */
& LPC_SC-&USBCLKSEL = USBCLKSEL_V&&& /* Setup USB Clock Divider&&&&&&&&&&& */
& LPC_SC-&EMCCLKSEL = EMCCLKSEL_V&&& /* EMC Clock Selection&&&&&&&&&&&&&&& */
& LPC_SC-&PCLKSEL&& = PCLKSEL_V&&&&& /* Peripheral Clock Selection&&&&&&&& */
& LPC_SC-&PCONP&&&& = PCONP_V&&&&&&& /* Power Control for Peripherals&&&&& */
& LPC_SC-&CLKOUTCFG = CLKOUTCFG_V&&& /* Clock Output Configuration&&&&&&&& */
#if (FLASH_SETUP == 1)&&&&&&&&&&&&&&&&& /* Flash Accelerator Setup&&&&&&&&&&& */
& LPC_SC-&FLASHCFG& = FLASHCFG_Val|0x03A;
#ifdef& __RAM_MODE__
& SCB-&VTOR& = 0x & 0x3FFFFF80;
& SCB-&VTOR& = 0x & 0x3FFFFF80;
在system_LPC177x_8x.c中,主要涉及到的时钟配置宏如下:
1.系统时钟控制器的配置&
系统控制与状态寄存器(SCS—0x400F&C1A0),一般以下这一项,我们不用修改。需要注意的是&BIT4位的&振荡器的频率范围选择,根据具体情况而定,具体设置如下图:
#define&CLOCK_SETUP&&&&&&&&&&&1
#define&SCS_Val&&&&&&&&&&&&&&&0x
2.系统时钟源配置
&val&=&0,&选择内部RC振荡器作为系统时钟和PLL0的时钟源(默认)。
&val&=&1,&选择主振荡器作为系统时钟和PLL0的时钟源。
#define&CLKSRCSEL_Val&&&&&&&&&0x
3.系统PLL0以及PLL1配置
&PLL0&为主振荡器&用于系统主时钟输入源。
&PLL1&为副振荡器&用于USB&48M时钟源输入。
以下参数配置的结果为系统时钟=120M
&具体设置如下图:
The value written to the MSEL bits in the PLLCFG register is M -1
LPC_SC-&PLL0CFG =0x配置为120Mhz 12mhz*(9+1)
#define&PLL0_SETUP&&&&&&&&&&&&1
#define&PLL0CFG_Val&&&&&&&&&&&0x
#define&PLL1_SETUP&&&&&&&&&&&&1
#define&PLL1CFG_Val&&&&&&&&&&&0x
4.CPU时钟选择与分频配置
&CPU时钟设置为1分频=120MH,CPU时钟分频器时钟源选型配置为&PLL0,一般不改动。
#define&CCLKSEL_Val&&&&&&&&&&&0x
5.USB&时钟选择与分频配置
USB时钟分频器时钟源选型配置为&PLL1,一般不改动。
#define&USBCLKSEL_Val&&&&&&&&&0x
6.EMC分频配置
&分频=0,EMC与CPU使用同一个时钟,
分频=1,EMC使用CPU的一半时钟。
&根据需求配置。
以下配置结果为&EMC&=&60M
#define&EMCCLKSEL_Val&&&&&&&&&0x
7.外设时钟配置
范围(1-31)&根据需求配置。
以下配置结果为&PCLK&=&60M
#define&PCLKSEL_Val&&&&&&&&&&&0x
8.功耗模式配置
一般不用修改,若需要用到低功耗,则按需修改:
#define&PCONP_Val&&&&&&&&&&&&&0x042887DE
9.外部时钟输出配置
为了便于系统测试与开发,任何一种内部时钟均可引入CLKOUT功能(在P1[25]或P1[27]管脚可使用),&根据需求配置。
以下配置结果为&0100&&选择RTC振荡器作为CLKOUT的时钟源
#define&CLKOUTCFG_Val&&&&&&&&&0x
参考文献:/lichy2012/item/7dd114d90e449a
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:86897次
积分:1429
积分:1429
排名:千里之外
原创:37篇
转载:87篇
评论:11条
(1)(11)(1)(1)(3)(7)(1)(7)(2)(2)(21)(16)(7)(39)(13)LPC寸LCD LPC1788开发板-商品详细资料
&&&&用户名:
&&&&密&&码:
&&&&验证码:
&&&&&& &nbsp
|||||||||||||
&&&&&&&&&&&&&&&&&&&&
电话:020-传真:020-手机:邮箱:
技术支持: ("$"换成"@")Q Q: (常用)
目前位置: >
NO090号商品详细资料
LPC寸LCD LPC1788开发板
&&详 细 说 明
&基于NXP LPC1788芯片(Cortex-M3内核)
&&&&&&&&&&&&&&&&&&&&&&&&
&& EM-LPC1788是我们最新推出的一款基于恩智浦LPC1788(Cortex-M3内核)处理器的全功能评估套件。开发板板载USB转串口电路,用户只需一根USB线即可完成开发烧写等过程,同时开发板支持多种供电方式。&&&&&&LPC1788 是NXP半导体针对各种高级通讯,高质量图像显示等应用场合而设计的一款具有高集成度,以Cortex-M3为内核的微控制器,该微控制器包含有LCD控制器,10/100的以太网EMAC,USB全速Device/Host/OTG控制器, CAN总线控制器,SPI,SSP,IIC,IIS以及外部存储控制器EMC等资源,特适用于工业控制和医疗系统的应用场合。
&&&&&&&&&&&&&&&&&
NXP LPC1788,Cortex-M3内核,主频120MHz.
512KB内部Flash96KB 内部SRAM
128MB外扩Nandflash4MB 外扩Norflash32MB外扩SDRAM1MB 外扩SRAM
20Pin JTAG调试接口,支持JTAG模式,SWD模式
USB转RS232接口 1个3线RS232串行口 1个9线RS232串行口 2路CAN总线接口 SD Card接口 I2S音频输入/接口 8个用户LED灯 USB Host *1,USB Device*110/100M Ethernet 接口 TFT- LCD屏接口(标配4.3寸屏)四线电阻式触摸 ADC可调电位器 RTC(带后备电池)64个I/O扩展 (CPU资源) 20PIN 标准JTAG调试接口
4个用户按键
支持USB2UART mini USB/USB1/USB2/EXT 5V供电方式 .
&&&&&&&&&&&&&&&&&&&&&&&&&&&
01-Adc_Polling
用ADC 轮询模式进行转化数据
02-Adc_Interrupt
用ADC 中断模式进行转化数据
03-Adc_Dma
用ADC DMA模式进行转化数据
04-Adc_Burst
用ADC 触发模式进行转化单个或者多个数据输入,当触发通道正在运行的时候,形成ADC注入转化组
05-CAN_Selftest
测试CAN总线的回环模式
06-CAN_Bypass
测试CAN总线的旁路模式
07-CAN_Aflut
测试CAN动态建立和更新AFLUT表
08-Crc_Dma
在DM支持下测试CRC 产生器
09-Crc_Demo
测试CRC产生器
10-DAC_Dma
测试是使用DMA 传输和接受DAC转化的数据
11-DAC_SineWave
使用DAC产生一个正弦信号
12-Dma_Flash2Ram
测试DMA 传输数据从flash 到RAM
13-EEPROM_Demo
测试EEPROM的读写功能
14-EMAC_Easyweb
测试网口实现一个简单web网站的功能
15-EMAC_Raw
测试网口不依赖与上层TCP/IP层收发原始数据包的帧格式
16-EMAC_Uip
生成一个简单网络接口,包括IP,ICMP,UDP和TCP 协议
17-EMC_Nandflash
测试外部存储控制器(EMC)操作板上的NAND FLASH
18- EMC_Norflash
测试外部存储控制器(EMC)操作板上的NOR FLASH
19- EMC_SDRAM
测试外部存储控制器(EMC)操作板上的SDRAM
20- EMC_SRAM
测试外部存储控制器(EMC)操作板上的SRAM
21-GPIO_Interrupt
测试GPIO 中断功能
22-GPIO_LedBlinky
利用GPIO中断功能去控制LED
测试I2C去控制 PCA9532.
11 I2S Audio
24-I2S_Interrupt
测试I2S 使用中断模式去传输数据
25- I2S_Dma
测试I2S的DMA模式
26- I2S_Mclk
测试I2S 主时钟作为I2S的时钟源
27-I2S_4Wire
测试I2S使用4线模式
28- I2S_Audio
测试利用I2S接口传输音频数据并且播放这段音乐,能够通过耳机听到这段音乐。
测试 LCD和触屏
30-SD_Card
测试SD_Card
测试 PWM 汽车电子模块
32-NVIC_Prioties
配置 NVIC 优先级组去测试中断链或者抢占式中断模式
33-NVIC_Vector
重定向中断向量表
34-Single_Edge
使用PWM单边沿模式在6个通道处产生PWM信号
35- Pwm_DualEdge
在3个通道处使用PWM双边沿模式产生PWM信号
36- Pwm_MatchInterrupt
PWM的比较功能并且比较成功触发一次中断
37- Pwr_Sleep
测试系统进入睡眠模式并且通过外部中断进行唤醒
38- Pwr_DeepSleep
测试系统进入深度睡眠模式并且通过外部中断进行唤醒
39- Pwr_PowerDown
测试系统进入掉电模式并且通过不可屏蔽中断进行唤醒
40- Pwr_DeepPowerDown
测试系统进入深入掉电模式并且通过RTC中断进行唤醒
使用正交编码器接口(QEI)组件进行速率计算
42- RTC_Alarm
每1秒钟产生一次中断,每隔10秒钟产生一次闹铃
43- RTC_Calibration
校准RTC时钟
测试使用SSP接口通过DMA传输数据
21 SYSTICK
45- Systick_10msBase
系统滴答时钟每隔10ms产生一次中断
46- Systick_Stclk
配置系统滴答时钟使用外部时钟源STCLK
47- Timer_MatchInterrupt
测试Timer模块在制定的时间到来时产生一个中断
48- Timer_Capture
测试Timer模块的输入捕获的功能
49- Timer_FreqMeasure
测试Timer模块去得到一个信号的频率
50- Uart_Polling
测试UART轮询模式
51- Uart_Interrupt
测试UART中断模式
52- Uart_Dma
测试UART的DMA模式
53- Uart_Autobaud
测试UART自动匹配波特率模式
54- Uart_FullModem
测试UART完全的调制解调器模式
55- Uart_IrdaTransmit
测试UART使用红外模式传送数据
56- Uart_IrdaReceive
测试UART使用红外模式接受数据
57- USB_MassStorage
把开发板作为一个U盘设备被PC机识别,并且支持拷贝数据
58- USB_VirtualCom
开发板的USB虚拟成一个串口功能收发数据
59- WDT_Interrupt
在一个设置的时间之后WDT产生一个中断
60- WDT_Reset
在一个设置的时间之后WDT触发CPU重启
61- WDT_WindowMode
测试窗口看门狗的窗口模式功能
开发板配件
& 开发板 一块&&&&&&&&&&&& USB 线&&&&&&&&& &&光盘&&&& &&& &&&&&& 网线&&&&&&&&&&&& &串口线
本商品浏览次数: 6897 次 &&
&&同 类 推 荐
简&&介:板子采用机器焊接.性能稳定可靠.
ARM7 LPC23XX KIT 是一款性价比高的ARM7入门学习板.RJ45网络接口,CAN总线,双串口,一个USB2.0接口,可接MMC卡(作U盘),作USB声卡,LCD12232接口,EEPROM存贮器AT24C16. 此板兼容LPC2364,LPC2366,LPC2368.update
简&&介:ARM7 KIT是一款性价比高的ARM7入门学习板.双串口,一个USB2.0接口,可接MMC卡(作U盘),作USB声卡(音质不错),LCD/TFTLCD液晶接口,EEPROM存贮器AT24C16.
此板兼容LPC213X/LPC214X系列芯片
LPC2131,LPC2132,LPC2134,LPC2136,LPC2138
LPC2141,LPC2142,LPC2144,LPC2146,LPC2148
简&&介:LPC1768 开发板配置有LPC1768微处理器(运行速度高达100MHz)以及彩色TFT液晶显示器,100M以太网,双CAN,2个串口,USB2.0 HOST/OTG/Device,SD/MMC接口.
ARM JTAG II
简&&介:支持ARM7/ARM9调试,支持JTAG及Serial wire debug (SWD)。 Mini ARM JTAG Adapter不仅具有ULINK仿真器的所有功能,还增加了串行调试(SWD)支持,返回时钟支持和实时代理等功能。开发工程师通过结合使用RealView MDK的调试器和Mini ARM JTAG Adapter,可以方便的在目标硬件上进行片上调试(使用on-chip JTAG, SWD和 OCDS)、Flash编程
AVR_JTAGICE
简&&介:本站的AVR JTAGICE 支持:AT90CAN128,ATmega128, ATmega128L, ATmega16, ATmega162, ATmega162V, ATmega165, ATmega165V, ATmega169, ATmega169V, ATmega16L, ATmega32, ATmega323, ATmega323L, ATmega32L, ATmega64, ATmega64L 。
两款型号可选:
RS232 接口的AVR JTAGICE
USB 接口的AVR JTAGICE
简&&介:ULINK2 USB-JTAG Adapter支持ARM7/ARM9调试,支持JTAG及Serial wire debug (SWD)。
ULINK2是ARM公司最新推出的配套RealView MDK使用的仿真器,是ULink仿真器的升级版本。ULINK2不仅具有ULINK仿真器的所有功能,还增加了串行调试(SWD)支持,返回时钟支持和实时代理等功能。开发工程师通过结合使用RealView MDK的调试器和ULINK2,可以方便的在目标硬件上进行片上调试(使用on-chip JTAG, SWD和 OCDS)、Flash编程
简&&介:实现了ARP、ICMP、TCP、UDP协议。ARP中实现了缓存(学习、更新、老化、轮转替换),发包电路实现了缓存。上位机可以ping这块板子,下位机也可以ping上位机(通过上位机小程序,连串口),可以用tcp进行数据传送,可以跨网关通讯.
简&&介:B:cpu是F149+LCD 价格450元
C:cpu是F169+LCD 价格470元
关于我们购物指南服务保证客户服务其它说明
Copyright & 版权所有 &超前科技>>网上商城Email:
Tel:020- FAX:020- Mobile:(转)Cortex-M3 (NXP LPC1788)之SDRAM操作 - tdyizhen1314 - 博客园
网上看到了一些关于1788&& SDRAM的调试代码,基本上都一样,本人在调试1788 SDRAM过程中,遇到了一些大麻烦,本人使用的的SDRAM芯片为MT48LC16M162.&& 本人遇到的问题如下:
1:&& 1788芯片硬件仿真初期,调试SDRAM寄存器配置错误,导致1788芯片无法进入仿真状态,只能用Flash Magic才能擦除。
2:& 1788芯片的SDRAM有一个很重要的寄存器,官方驱动为&& LPC_SC-&EMCDLYCTL 寄存器的设置,就算你和官方所使用芯片一样,只要电路板有差异,这个寄存器的设置将有可能导致SDRAM在使用过程中出现错误。
3:& 还有对于时序的设置,这一步相对来说就比较简单了。
下面例举出我的示例代码:
1:&& 至于端口配置本人参考官方NXP网站,如果你的端口有充足情况下面,本人建议你不要修改。
2:&& 本人的CPU主频为108M,不是120M,因为我的电路板的原因,在120M的时候,偶尔会有无法启动SDRAM的情况,所以为了安全本人使用了108M的主频。
1 #define SDRAM_REFRESH
2 #define SDRAM_TRP
3 #define SDRAM_TRAS
4 #define SDRAM_TAPR
5 #define SDRAM_TDAL
6 #define SDRAM_TWR
7 #define SDRAM_TRC
8 #define SDRAM_TRFC
9 #define SDRAM_TXSR
10 #define SDRAM_TRRD
11 #define SDRAM_TMRD
15 void EMC_Init(void)
CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCEMC, ENABLE);
LPC_SC-&EMCDLYCTL
= (0x10 && 8) | (0 && 16) | (0 && 24) | 4;
LPC_EMC-&Control
LPC_EMC-&Config
PINSEL_ConfigPin(2,14,1);
PINSEL_ConfigPin(2,15,1);
PINSEL_ConfigPin(2,16,1);
PINSEL_ConfigPin(2,17,1);
PINSEL_ConfigPin(2,18,1);
PINSEL_ConfigPin(2,19,1);
PINSEL_ConfigPin(2,20,1);
PINSEL_ConfigPin(2,21,1);
PINSEL_ConfigPin(2,22,1);
PINSEL_ConfigPin(2,23,1);
PINSEL_ConfigPin(2,24,1);
PINSEL_ConfigPin(2,25,1);
PINSEL_ConfigPin(2,26,1);
PINSEL_ConfigPin(2,27,1);
PINSEL_ConfigPin(2,28,1);
PINSEL_ConfigPin(2,29,1);
PINSEL_ConfigPin(2,30,1);
PINSEL_ConfigPin(2,31,1);
for(i = 0; i & 32; i++)
PINSEL_ConfigPin(3,i,1);
PINSEL_ConfigPin(4,i,1);
56 int Sdram_Debug(void)
INT32U i=0,j,k;
volatile INT32U
pmp = (volatile INT32U *)BASE_SDRAMADDR;
j = SDRAM_SIZE/sizeof(*pmp);
for(i=0;i&j;i++)
for (k =0; k
for(i=0;i&j;i++)
if(pmp[i] != i)
return FALSE;
return TRUE;
83 #define P2C(Period)
(((Period&SDRAM_PERIOD)?0:(uint32_t)((float)Period/SDRAM_PERIOD))+1)
85 void SDRAMInit(void)
uint32_t uC
float SDRAM_PERIOD;
LPC_EMC-&DynamicConfig0
uClk = CLKPWR_GetCLK(CLKPWR_CLKTYPE_EMC);
uClk /= 1000000UL;
SDRAM_PERIOD = (float)1000/uC
LPC_EMC-&DynamicRP = P2C(SDRAM_TRP);
LPC_EMC-&DynamicRAS = P2C(SDRAM_TRAS);
LPC_EMC-&DynamicSREX = P2C(SDRAM_TXSR);
LPC_EMC-&DynamicAPR = SDRAM_TAPR;
LPC_EMC-&DynamicDAL = SDRAM_TDAL+P2C(SDRAM_TRP);
LPC_EMC-&DynamicWR = P2C(SDRAM_TWR);
LPC_EMC-&DynamicRC = P2C(SDRAM_TRC);
LPC_EMC-&DynamicRFC = P2C(SDRAM_TRFC);
LPC_EMC-&DynamicXSR = P2C(SDRAM_TXSR);
LPC_EMC-&DynamicRRD = P2C(SDRAM_TRRD);
LPC_EMC-&DynamicMRD
= SDRAM_TMRD;
LPC_EMC-&DynamicConfig0
LPC_EMC-&DynamicRasCas0
LPC_EMC-&DynamicReadConfig = 0x;
TIM_Waitms(100);
LPC_EMC-&DynamicControl
= 0x; /* Issue NOP command */
TIM_Waitms(200);
LPC_EMC-&DynamicControl
LPC_EMC-&DynamicRefresh
for(i = 0; i & 0x100; i++);
122 LPC_EMC-&DynamicRefresh
= P2C(SDRAM_REFRESH)&&4;
LPC_EMC-&DynamicControl
= 0x; /* Issue MODE command */
= *((volatile int *)(SDRAM_BASE_ADDR | (0x33&&12)));
LPC_EMC-&DynamicControl
LPC_EMC-&DynamicConfig0
for(i = 0; i & 20000; i++);
Sdram_Debug();
上面的LPC_SC-&EMCDLYCTL
是我自己调试出来的准确的值,所以固定了。当然Segger公司有一个更好的办法计算LPC_SC-&EMCDLYCTL,以下为参考Segger公司的函数。
1 static int _TestSDRAM(void) {
volatile uint32_t * pWriteL
volatile uint16_t * pWriteS
pWriteLong
= (uint32_t*)SDRAM_BASE_ADDR;
pWriteShort = (uint16_t*)SDRAM_BASE_ADDR;
// Fill 16 bit wise
for (i = 0; i & (SDRAM_SIZE / 0x40000); i++) {
for (j = 0; j & 0x100; j++) {
*pWriteShort++ = (i + j);
*pWriteShort++ = (i + j) + 1;
// Verifying
pWriteLong = (uint32_t*)SDRAM_BASE_ADDR;
for (i = 0; i & (SDRAM_SIZE / 0x40000); i++) {
for (j = 0; j & 0x100; j++) {
Data = *pWriteLong++;
if (Data != (((((i + j) + 1) & 0xFFFF) && 16) | ((i + j) & 0xFFFF))) {
34 static void _FindDelay(int DelayType) {
uint32_t D
uint32_t M
uint32_t M
Delay = 0x00;
// Test for DLY min./max. values
while (Delay & 32) {
// Setup new DLY value to test
if (DelayType == 0) {
= LPC_SC-&EMCDLYCTL & ~0x001Ful;
LPC_SC-&EMCDLYCTL = v | D
= LPC_SC-&EMCDLYCTL & ~0x1F00ul;
LPC_SC-&EMCDLYCTL = v | (Delay && 8);
// Test configured DLY value and find out min./max. values that will work
if (_TestSDRAM() == 0) {
// Test passed, remember min. DLY value if not done yet
if (Min == 0xFF) {
// Test failed, if a min. value has been found before, remember the current value for max.
if (Min != 0xFF) {
// Calc DLY value
(Max != 0xFF) {
// If we found a min. and max. value we use the average of the min. and max. values to get an optimal DQSIN delay
Delay = (Min + Max) / 2;
} else if (Min != 0xFF) {
// If we found only a min. value we use the average of the min. value and the longest DLY value to get an optimal DQSIN delay
Delay = (Min + 0x1F) / 2;
// No working max. and/or min. values found
while (1);
// Fatal error
// Setup DLY value to work with
if (DelayType == 0) {
= LPC_SC-&EMCDLYCTL & ~0x001Ful;
LPC_SC-&EMCDLYCTL = v | D
= LPC_SC-&EMCDLYCTL & ~0x1F00ul;
LPC_SC-&EMCDLYCTL = v | (Delay && 8);
99 static uint32_t _CalibrateOsc(void) {
uint32_t C
// Init start values
// Calibrate osc.
for (i = 0; i & 10; i++) {
LPC_SC-&EMCCAL = (1 && 14);
// Start calibration
v = LPC_SC-&EMCCAL;
while ((v & (1 && 15)) == 0) {
// Wait for calibration done
v = LPC_SC-&EMCCAL;
Cnt += (v & 0xFF);
return (Cnt / 10);
122 static void _AdjustEMCTiming(uint32_t Delay) {
uint32_t CmdD
uint32_t FBD
uint32_t FBClkD
FBDelay = _CalibrateOsc();
v = LPC_SC-&EMCDLYCTL;
0x001Ful) * Delay / FBDelay) & 0x1F;
0x1F00ul) * Delay / FBDelay) & 0x1F00;
LPC_SC-&EMCDLYCTL =
(v & ~0x1F1Ful) | FBClkDly | CmdD
137 void SDRAMInit(void)
139 uint32_
141 uint32_t uC
142 float SDRAM_PERIOD;
143 LPC_EMC-&DynamicConfig0 = 0x;
145 uClk = CLKPWR_GetCLK(CLKPWR_CLKTYPE_EMC);
146 uClk /= 1000000UL;
147 SDRAM_PERIOD = (float)1000/uC
148 LPC_EMC-&DynamicRP = P2C(SDRAM_TRP);
149 LPC_EMC-&DynamicRAS = P2C(SDRAM_TRAS);
150 LPC_EMC-&DynamicSREX = P2C(SDRAM_TXSR);
151 LPC_EMC-&DynamicAPR = SDRAM_TAPR;
152 LPC_EMC-&DynamicDAL = SDRAM_TDAL+P2C(SDRAM_TRP);
153 LPC_EMC-&DynamicWR = P2C(SDRAM_TWR);
154 LPC_EMC-&DynamicRC = P2C(SDRAM_TRC);
155 LPC_EMC-&DynamicRFC = P2C(SDRAM_TRFC);
156 LPC_EMC-&DynamicXSR = P2C(SDRAM_TXSR);
157 LPC_EMC-&DynamicRRD = P2C(SDRAM_TRRD);
158 LPC_EMC-&DynamicMRD = SDRAM_TMRD;
160 LPC_EMC-&DynamicConfig0 = 0x;
161 LPC_EMC-&DynamicRasCas0 = 0x;
162 LPC_EMC-&DynamicReadConfig = 0x;
164 TIM_Waitms(100);
165 LPC_EMC-&DynamicControl = 0x; /* Issue NOP command */
167 TIM_Waitms(200);
168 LPC_EMC-&DynamicControl = 0x;
169 LPC_EMC-&DynamicRefresh = 0x;
171 for(i = 0; i & 0x100; i++);
173 LPC_EMC-&DynamicRefresh = P2C(SDRAM_REFRESH)&&4;
175 LPC_EMC-&DynamicControl = 0x; /* Issue MODE command */
177 dwtemp = *((volatile int *)(SDRAM_BASE_ADDR | (0x33&&12)));
179 LPC_EMC-&DynamicControl = 0x;
181 LPC_EMC-&DynamicConfig0 = 0x;
i = _CalibrateOsc();
_FindDelay(0);
_FindDelay(1);
// FBCLKDLY
_AdjustEMCTiming(i);
本人因为SDRAM的问题,折腾了进半个月的时间,移植UCOSIII,YAFFS2,UCGUI , LWIP中间,程序本来是没有问题,因为SDRAM的问题,曾经好几次让我想放弃这个芯片,翻过了不知道多少遍M3的手册,看了不知道多少遍数据手册,不过最后我还是很幸运的调试出来....如果你现在的问题也出在SDRAM上面,那么希望本篇文章能给你些帮助。
随笔 - 154http://zgmgypb./blog/static//
RM学习笔记--LPC1788引脚分析&&
一、电源分析
要弄清楚单片机的电源引脚,首先必须得对数字电路的电源标识有一个了解:
VCC:C=circuit 表示电路的意思, 即接入电路的电压;   VDD:D=device 表示器件的意思, 即器件内部的工作电压;   VSS:S=series 表示公共连接的意思,通常指电路公共接地端电压;   VEE:E=electron
表示构成物质的基本粒子之一,因带负电,也写作e,通常指负电压供电;   VDDH:H=high 表示高压,即高压供电端。
看完数字电路的电源标识后我们对标识有了一个了解,然后来看一下LPC1788的电源说明:
VSS:LPC1788有10个VSS的pin作为输入,说明书上说是数字0V,也就是相对于IO口的0V
VSSREG:LPC1788有3个&VSSREG的pin作为输入,说明书上说是逻辑0V
VSSA:LPC1788有1个,其中A代表analog,说明书上说这是模拟地,也就是GND
VDD:LPC1788有10个VDD的pin作为输入,这里就是芯片电源电压3.3V
VDDREG:LPC1788有3个VDDREG的pin作为输入,这里是指逻辑高电平3.3V
VDDA:LPC1788有1个pin,其中A代表analog,给ADC或DAC供电,这里是3.3V
VREFP:LPC1788有1个pin,这里是ADC和DAC操作的逻辑高电平3.3V
VBAT:LPC1788有1个pin,RTC供电电压3.3V
在单片机的设计过程中,很多地方需要稳定的干净的电源,就需要在进入电源上加入磁珠,磁珠专用于抑制信号线、电源线上的高频噪声和尖峰干扰,还具有吸收静电脉冲的能力。磁珠是用来吸收超高频信号,象一些RF电路,PLL,振荡电路,含超高频存储器电路(DDRSDRAM,RAMBUS等)都需要在电源输入部分加磁珠,而电感是一种蓄能元件,用在LC振荡电路,中低频的滤波电路等,其应用频率范围很少超过50MHZ。
磁珠有很高的电阻率和磁导率,等效于电阻和电感串联,但电阻值和电感值都随频率变化。像VDDA这些为了确保AD测量准确就需要加入磁珠隔离一些干扰。
二、晶振电路
晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。
在lpc1788中晶振接入的两个脚是XTAL1和XTAL2
XTAL1:内部振荡电路反向放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时此引脚接地。
XTAL2:内部振荡电路反相放大器的输出端,是外接晶体的另一端,当采用外部振荡器时,此引脚接外部振荡源。
晶振的电路连接如下:
如何选择晶振电路中的电容大小呢?
(1)因为每一种晶振都有各自的特性,所以最好按制造厂商所提供的数值选择外部元器件。
(2)在许可范围内,C1、C2值越低越好。C值偏大虽有利于振荡器的稳定,但将会增加起振时间。&
(3)应使C2值大于C1值,这样可使上电时,加快晶振起振。
三、复位电路
对于复位,它的作用是使单片机的各IO状态恢复到初始状态,让寄存器还有存储器等恢复到默认的初始状态,复位分为上电复位和手动复位两种,在lpc1788中reset引脚的复位需要低电平触发,电路图如下:
复位引脚是一个输入引脚。
RSTOUT引脚:这是一个输出引脚,用于输出lpc1788的复位状态,若出于复位中,输出低电平,反之高电平输出。
四、RTC时钟电路
RTCX1引脚:这是一个输入引脚,输入RTC 32KHZ极低功耗的振荡电路&
RTCX2引脚:这是一个输出引脚,从RTC 32KHZ极低功耗的振荡电路输出
RTC_ALARM引脚:这是一个输出引脚,当RTC出现警报,它会输出一个低电平
我个人理解RTC是独立于单片机的一个小系统,它有自己的供电VBAT,有自己的32K的晶振作为时钟频率,脚RTCX1、2类似于晶振的XTAL1、2,所以他们的电路也很相似,下面是RTC的外围电路:
RTC是在系统中作为一个时钟基准,所以关于RTC的操作在以后将会单独的列出学习。
这里我们要有一个理解,就是RTC是分离与单片机的,在系统中我们只要配置好了RTC,随时读取RTC的值都是准确的。
五、JTAG调试口电路
由于JTAG调试是整个arm中最重要的环节,关系到程序的仿真等等,所以在以后将会专门进行一个系统的分析学习,这里只是初步理解一下。
LPC1788中有5个pin脚用于JTAG调试的电路:
JTAG_TDO (SWO) :这是一个输出引脚,TDO:test data out for JTAG interface 调试数据输出&SWO:&Serial
wire trace output串行 & & & & & & & & &线跟踪
JTAG_TDI & & & :这是一个输入引脚,TDI:Test Data In for JTAG interface 调试数据输入,这个引脚在内部是有一个上拉的
JTAG_TMS & & & :这是一个输入引脚,TMS:Test Mode Select for JTAG interface 调试模式选择
(SWDIO) & & & &:SWDIO:Serial wire debug data input/output 串行调试数据输入输出
JTAG_TRST & & &:这是一个输入引脚,TRST:Test Reset for JTAG interface 测试复位
JTAG_TCK & & & :这是一个输入引脚,TCK:Test Clock for JTAG interface JTAG测试时钟,该实中必须低于六分之一的cpu时钟频率&
(SWDCLK) & & & :SWDCLK:Serial wire clock 串行时钟
LPC引脚就先写到这里,对于GPIO以及它的复用,我在学习的过程中将以实践的方式给出,当然主要是我这个项目要用到的东西。
唉!咋感觉进度这么慢呢,白天就是事情太多了啊,看来晚上才是我工作的黄金时段啊……,分析了RTC,下面就写一个RTC的demo练练手吧。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:66024次
排名:千里之外
原创:17篇
转载:107篇
(5)(1)(7)(18)(2)(1)(14)(17)(7)(1)(22)(14)(1)(11)(3)

我要回帖

更多关于 lpc1788 lcd 的文章

 

随机推荐