曾经在校园时不知今后会干什么所以什么都学点,感觉什么有用就拿起学学,可是出来今后发现学没有致以用,所以也开端学者老前辈们诉苦当时教育与社会严峻脱钩,可是校园也有官样文章的理由,咱们教你的是思维,教你的是学习的办法。或许社会的实际便是这样吧,一遇到事,公说公有理,婆说婆有理,咱们又能怎么办?幸而咱们还有网络,幸而咱们还没有彻底被封口,所以咱们还能发发怨言,好了,时刻不早了,怨言发的差不多了,下面开端写学习总结。
由于项目所需,所以不得不开端研讨M3,我用的是NXP公司的LPC1768这个芯片,它是具有三级流水线的哈佛结构,带独立的本地指令和数据总线以及用于外设的略微低功用的第三条总线,还包含一个支撑随机跳转的内部预取指单元。关于LPC1768这个芯片的内部资源这儿就不罗列了,这些数据手册上都写的很具体,今后在学习总结中也会渐渐触及。好了,今日仅仅开始测验一下它的GPIO功用,所谓的GPIO
图1-1
硬件原理图很简单了,74LVC244是用来驱动LED的,74LVC244内部便是8个三态门,关于它的具体电气参数,请参阅它的数据手册。关于程序也不是太难,有几个当地要说一下。即然是GPIO试验,当然要重视GPIO的装备了,由于大部分引脚都具有一个以上功用,所以首先要装备引脚功用寄存器PINSEL,只有当引脚装备为GPIO功用时,GPIO的方向位才有用,关于其它功用来说,方向是主动的。关于引脚功用寄存器PINSEL功用如下表所示:
PINSEL0~PINSEL9的值 |
功用 |
复位后的值 |
00 |
默许功用,一般为GPIO口 |
00 |
01 |
第一个可选功用 |
|
10 |
第二个可选功用 |
|
11 |
第三个可选功用 |
PINSEL寄存器每两位操控一个引脚,由于各个引脚的功用不一样,所以PINSEL0~PINSEL9的装备也相应的有所不同,想具体了解这10个寄存器的功用能够参看《user.manual.lpc17xx》,这个手册能够到NXP的网站上去下载。由于这次试验仅仅用到GPIO功用,所以暂时不必管这个寄存器,用它的默许值就能够了。
另一个寄存器是引脚形式挑选寄存器PINMODE,它操控一切端口的作业形式,包含是否装备上拉/下拉电阻和特定的开漏操作形式等。引脚形式挑选寄存器PINMODE的功用如下表所示:
PINMODE0~PINMODE9的值 |
功用 |
复位后的值 |
00 |
引脚使能片内上拉电阻 |
00 |
01 |
中止形式 |
|
10 |
引脚没有使能片内上拉/下拉电阻 |
|
11 |
引脚使能下拉电阻 |
当引脚处于逻辑高电平时,中继形式使能上拉电阻,当引脚处于逻辑低电平时,使能下拉电阻,当引脚装备为输入且不是经过外部驱动时,引脚将坚持上一个已知状况。PINMODE_0D寄存器操控寄存器的开漏形式,引脚装备为输出且值为0时,开漏形式会正常地将引脚电平拉低。可是假如输出引脚为1,则引脚输出驱动封闭,等同于改变了引脚的方向,实际上是模拟了一个开漏输出。
PINMODE_0D0~PINMODE_0D4的值 |
功用 |
复位后的值 |
00 |
引脚处于正常形式(非开漏形式) |
00 |
01 |
引脚处于开漏形式 |
除了以上两个寄存器要装备,与GPIO端口相关的寄存器还有快速端口值寄存器FIOPIN能够用来读/写端口的值,端口输出置位寄存器FIOSET,当这个寄存器的相应方位1时,相应端口引脚输出1,当然也能够从这个寄存器读取当时引脚输出的值,与它对应的寄存器是FIOCLR,当寄存器FIOCLR相应方位1时,相应引脚输出0,但这个寄存器是只写寄存器,不能读取数据。好了,关于这些寄存器先总结到这,具体的装备还要看LPC1768的用户手册《user.manual.lpc17xx》,当然也能够经常去NXP网站逛逛看看其它的handbook或whitepaper
#include”main.h”
volatile unsigned long SysTickCnt;
void SysTick_Handler (void)
{
}
void DelayMs (unsigned long tick)
{
}
void PortInit(void)
{
}
int main(void)
{
}
typedef struct
{
__IO uint32_t FIODIR;
uint32_t RESERVED0[3];
__IO uint32_t FIOMASK;
__IO uint32_t FIOPIN;
__IO uint32_t FIOSET;
__O
} GPIO_TypeDef;
还有几个宏界说,如下所示:
1)、#define GPIO1
上面这个宏是把GPIO1指向芯片GPIO1的基址上,
2)、#define GPIO1_BASE
3)、#define GPIO_BASE
这三个宏就把GPIO的基址界说了出来,关于LPC1768内部地址的分配情况,能够参看它的数据手册,也可参阅一下《ARM Cortex-M3