首先介绍下恩智浦公司的MCU型号划分方法,这些MCU中,LPC3000、LH7A采用ARM9内核,LPC2000和LH7采用ARM7内核,LPC1000系列采用Cortex-M3或M0内核。开发板的芯片是LPC2148,属于LPC2100系列,所以再介绍下LPC2100系列MCU。LPC2100系列MCU基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-SCPU,并带有128/256k字节(kB)嵌入的高速Flash存储器。128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。
然后介绍下我常使用到的PDF文档,都有《开发板原理图》、周立功翻译的中文《LPC214X_user_cn》和英文说明文档《UM10139-LPC214X user manual》和周立功出的《深入浅出ARM7-LPC 213X/214X》下册。
其次是本次实验使用到管脚连接寄存器,因为有些管脚的功能是复用的,所以使用PINSEL0/1配置P0管脚的功能,PINSEL2配置P1管脚的功能。系统复位上电后,默认管脚的功能是GPIO输入状态。慢速GPIO功能使用VPB访问,速度较慢,使用到的寄存器有:
IOPIN 用于读管脚的值
IOSET用于写管脚高电平(写入 1 使对应管脚输出高电平。写入 0 无效。)
IODIR 设置管脚方向
IOCLR 用于写管脚低电平(写入 1 使对应管脚输出低电平。写入 0 无效)
最后是开发板的连接图,通过74HC244三态八缓冲区,通过端口P0.12控制,当为低电平时,数据能从左边流下右边。这部分代码:
#include <LPC214X.H>
void Led_Init(void)
{
IODIR0 |=1<<12;//LED使能端口输出
IODIR1=0x00FF0000;//LED端口输出
IOCLR0 |=1<<12;//P0.12=0 使能74HC244
IOCLR1 = 0x00FF0000;//熄灭8个LED
}
void delay (unsigned int num)
{
while(num--);
}
int main(void)
{
unsigned char i=0;
Led_Init();
while(1)
{
for(i=16;i<24;i++)
{
IOSET1=1<<i;//置高电平
delay(200000);
IOCLR1=1<<i;//置低电平
delay(200000);
}
}
}
|