这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 替网友询问:LPC1766的问题

共5条 1/1 1 跳转至

替网友询问:LPC1766的问题

高工
2010-11-10 16:06:37     打赏
近日使用lpc1766,想实现外部计数功能,发现除了用捕获输入产生中断计数可行外,用计数器模式不行,配置CCTR无效,不知道是怎么回事,读出的TC始终是定时值,资料是很清楚的表示可以对外部脉冲采样?



关键词: 网友     询问     LPC1766     问题    

院士
2010-11-10 16:08:27     打赏
2楼

LPC1766 用户手册学习笔记之第一章 ----- LPC17XX系统简介

 

因公司扩展需要,从今年开始要使用LPC1766作为开发平台,所以打算将LPC1766深入了解。因为此芯片网上资料奇少(大家都用STM32的芯片了),所以我将从LPC1766的用户手册入手,深入的和大家一起学习。

 

(因为周立功已经将此手册大部分翻译成中文,所以我将以nxp原版英文手册为主,周立功翻译的为辅助对比学习,英文版用户手册为 201014日 Rev.01版)

 

1. 简介(兼初步印象)

LPC1766ARMv7-M结构,在简介中最大的亮点是100Mhz的操作频率,应该是现在上市的Cortex-M3构架芯片中操作频率最高的一款。

LPC1766的片上SRAM比较特殊,其结构式32KB SRAM + 16KSRAM x 2 ,由于这样的结构使它的内存映射和其他基于ARM-Cortex M3的芯片不同,具体将在下面详述。

 

对于我做开发比较有用的功能还有:UART对于RS-485的支持。

嵌入了I2S接口也是比较特殊的。

 

100管脚封装只有70GPIO,因为IO口少了(和STM32F103ZET比较),所以有部分IO口不连续,这个在应用中也比较麻烦。

 

TIMER部分和STM32的芯片比较下被简化了很多(例如同步计数、可选的向上或者向下的计数方式等都没有)。只有外部捕获输入、比较输出和向上递增一种计数方式。

 

功能非常强的片上RTC时钟,完整的万年历功能,据说是所有ARM Cortex-M3系列芯片中做的最好的。

 

因为GPIO被移到了AHB总线上了,所以对GPIO操作频率无法设定了。(非常遗憾的缺点)

 

据说此芯片的Moto控制功能也很强大,可惜我用不到 :)

 

LPC1766其他部分的功能和其他此构架的芯片差不多,所以也不另外详述了。


院士
2010-11-10 16:12:42     打赏
3楼

LPC1766 用户手册学习笔记之第二章 -----存储器映射

1. LPC1766存储器使用分布图


2. LPC1766内存映射图





3. APB0 外设基地址表



4. APB1 外设基地址表


院士
2010-11-10 16:13:31     打赏
4楼
LPC1766 定时器在CMSIS库中使用笔记   一、替代传统定时器的用法 1. 定义两个定时器结构变量 (1)     TIM_TIMERCFG_TYPY Tim_ConfigStruct; TIM_MATCHCFG_TYPE Tim_MatchConfigStrtuct   2. 在主程序开始部分初始化要用的定时器        // 初始化定时器0 ,设定定时器频率为1M(系统主频频为100M)   //设定PrescalValue为微秒数,如果设定成TIM_PRESCALE_TICKVAL则为实际的计数值。(如同51一样) //TIM_PRESCALE_TICKVAL: Prescale in absolute value //TIM_PRESCALE_USVAL: Prescale in microsecond value TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_USVAL;   //设定PrescaleValue数值        TIM_ConfigStruct.PrescaleValue   = 100;        //设定使用通道0 MR0 // use channel 0, MR0        TIM_MatchConfigStruct.MatchChannel = 0;   //设定当MR0中数值符合TC中的数值时是否除能中断        // Disable interrupt when MR0 matches the value in TC register        TIM_MatchConfigStruct.IntOnMatch   = TRUE;   //设定当MR0中数值符合TC的数值的时候是否复位定时器         //Enable reset on MR0: TIMER will reset if MR0 matches it        TIM_MatchConfigStruct.ResetOnMatch = TRUE;   //设定档MR0中数值符合TC的数值的时候是否停止定时器        //Stop on MR0 if MR0 matches it        TIM_MatchConfigStruct.StopOnMatch  = FALSE;   //设定当MR0中数值符合TC的数值的时候是否翻转MR0.0引脚状态        //Toggle MR0.0 pin if MR0 matches it        TIM_MatchConfigStruct.ExtMatchOutputType =TIM_EXTMATCH_TOGGLE;     //设定计数值,实际定时时间为MatchValue * PrescaleValue        // Set Match value, count value of 10000 (10000 * 100uS = 1S --> 1Hz)        TIM_MatchConfigStruct.MatchValue   = 10000;          //将上面的设定正式应用 // Set configuration for Tim_config and Tim_MatchConfig        TIM_Init(LPC_TIM0, TIM_TIMER_MODE,&TIM_ConfigStruct);        TIM_ConfigMatch(LPC_TIM0,&TIM_MatchConfigStruct);   //设定定时器中断优先级   NVIC_SetPriority(TIMER0_IRQn, ((0x01<<3)|0x01));   //使能中断   NVIC_EnableIRQ(TIMER0_IRQn);   //使能TIMER0        TIM_Cmd(LPC_TIM0,ENABLE);     定时器中断部分   程序头部申明中断服务函数 void TIMER1_IRQHandler(void);   中断服务函数实现部分 void TIMER0_IRQHandler(void)   {       uint32_t temp;                //重要,清中断标志,不清除的话只会进入中断服务程序一次       TIM_ClearIntPending(LPC_TIM0,0);           //以下部分为中断实际要进行的操作代码可以根据需要自行变化       temp = LPC_GPIO2->FIOPIN;       LPC_GPIO2->FIOPIN = ~temp; }

院士
2010-11-10 16:14:01     打赏
5楼

LPC1766学习笔记---引脚设定

 

一、设定单个GPIO

 

定义一个结构变量

PINSEL_CFG_Type  PinCfg;

 

填入设定参数

//设定P1.26 为 CAP0.0

 

PinCfg.Funcnum = 3;   //引脚功能设定

 

 

PinCfg.OpenDrain = 0;   //引脚OD模式设定

 

 

PinCfg.Pinmode = 0;     //引脚模式设定

 

 

PinCfg.Portnum = 1;   //端口设定

 

 

PinCfg.Pinnum = 26;     //引脚位设定

 

 

//调用函数应用设定

PINSEL_ConfigPin(&PinCfg);


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]