
随着科技的进步,双核逐渐被淘汰是迟早的事,四核甚至八核CPU也不再是新鲜事物。不过双核在微控制器领域是一个很新颖的东西。很多工程师朋友在开发MCU应用系统时,如果系统功能复杂,一个MCU芯片无法满足要求,往往会使用多个MCU协同工作,把一些“零活”交给低端MCU,而高端MCU可以放开“手脚”,完成系统的主要任务。但这样一来,系统研发的复杂度、成本和可靠性都会受到不同程度的影响,多微控制器方案带来的功耗问题也不容忽视。因此,恩智浦推出了基于ARM Cortex-M4和ARM Cortex-M0非对称双核架构的LPC54102系列微控制器,旨在为超低功耗传感器的数据集成、传感器融合或其他传感器数据处理提供低功耗、高性能的双核解决方案。
幸运的是,我拿到了搭载LPC54102双核微控制器的LPCXpresso54102开发套件。这个套件的包装和STM32 Nucleo系列板卡的外包装材料一样,都是透明塑料外壳。这种封装虽然降低了成本,但在视觉性能上并不逊色于其他封装。透明材质的使用凸显了板卡的精致,使得板卡的芯片资源“裸”在大家面前。
打开包装,取出LPCXpresso54102板。整板采用深蓝色阻焊,乳白色丝印,让人眼前一亮。pcb焊盘的镀金工艺更高端。虽然LPCXpresso54102板的设计思路和STM32 Nucleo板类似,都是一个板上仿真器和核心板的结构,但是和Nucleo板相比,LPCXpresso54102板显然要大很多,元器件布局也紧凑很多。
这块板有两个micro usb接口,可以用普通安卓手机的充电数据线连接电脑。位于顶部的接口是专门给LPC54102供电的接口,LPC 54102给LINK2仿真器以外的组件供电,不需要板载调试器时可以连接到这个接口。如果你细心的话,你会发现这个micro usb接口的右边还有一个P3接口,是双线管脚阵列,分别是5V和GND。这一招也是结合了工程师的需求,留下了外接电源的接口。下面的USB接口是LPCLINK2仿真器的接口。这里不得不关注一下LPCLINK2模拟器。恩智浦在这款仿真器的设计上不惜成本,主控芯片的选择霸气十足。LPC4322双核MCU让LINK2充满了“暴力”!
LPC54102有多个串口,我尽量用寄存器直接操作!经过多次测试,可以收发数据了!内部晶振12MHz,无锁频,波特率9600b/s,用第一个串口!您也可以使用其他串行端口。
参考代码:
无符号long buf
#定义DELAY_COUNT0xFFFF
无效延迟(长整型计数)
{
for(;数数!=0;count-);
}
主()
{
*(long *)0x 400000 c 0=0xe 10b;///启用端口P0
*(long *)0x1c 002000=0xf 0000002;
*(long *)0x 4001 c 004=0x 191;///p01是串口。
*(long *)0x 4001 c 000=0x 191;///p00是串口
*(long *)0x 40000020=0x 1;
*(long *)0x 40080010=0x 8002;///
*(long *)0x 40084000=0x 4;
*(long *)0x 40084020=78;///9600b/s
*(long *)0x 40084000 |=0x 1;
///printf("hello world!");
ASM(“nop”);
*(long *)0x 4008401 c=' L ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' P ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 C=' C ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' 5 ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' 4 ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' 1 ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' 0 ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' 2 ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=0xd;///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=0xa;///buf;
而(!(*(long *)0x 400840080 x04));
while(1)
{
*(long *)0x 4008401 c=' L ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' P ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 C=' C ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' 5 ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' 4 ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' 1 ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' 0 ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=' 2 ';///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=0xd;///buf;
而(!(*(long *)0x 400840080 x04));
*(long *)0x 4008401 c=0xa;///buf;
而(!(*(long *)0x 400840080 x04));
DELAY(DELAY _ COUNT);
DELAY(DELAY _ COUNT);
DELAY(DELAY _ COUNT);
}
}
///下边是老外的头文件定义
#定义LPC_FLASHMEM_BASE0x00000000UL
#定义LPC_SRAM0_BASE0x02000000UL
#定义LPC_SRAM1_BASE0x02010000UL
#定义LPC_ROM_BASE0x03000000UL
#定义LPC_SRAM2_BASE0x03400000UL
#定义LPC_GPIO_PORT_BASE0x1C000000UL
#定义LPC_DMA_BASE0x1C004000UL
#定义LPC_CRC_BASE0x1C010000UL
#定义LPC_SCT_BASE0x1C018000UL
#定义LPC_MBOX_BASE0x1C02C000UL
#定义LPC_ADC_BASE0x1C034000UL
#定义LPC_FIFO_BASE0x1C038000UL
#定义LPC_SYSCON_BASE0x40000000UL
#定义LPC_TIMER2_BASE0x40004000UL
#定义LPC _定时器3_BASE0x40008000UL
#定义LPC_TIMER4_BASE0x4000C000UL
# define LPC _ GPIO _ group int 0 _ BASE0x 40010000 ul
# define LPC _ GPIO _ group int 1 _ BASE0x 40014000 ul
# define LPC _ PIN _ INT _ BASE0x 40018000 ul
#定义LPC_IOCON_BASE0x4001C000UL
#定义LPC_UTICK_BASE0x40020000UL
#定义LPC_FMC_BASE0x40024000UL
#定义LPC_PMU_BASE0x4002C000UL
#定义LPC_WWDT_BASE0x40038000UL
#定义LPC_RTC_BASE0x4003C000UL
# define LPC _ ASYNC _ SYSCON _ BASE0x 40080000 ul
#定义LPC_USART0_BASE0x40084000UL
#定义LPC_USART1_BASE0x40088000UL
#定义LPC_USART2_BASE0x4008C000UL
#定义LPC_USART3_BASE0x40090000UL
#定义LPC_I2C0_BASE0x40094000UL
#定义LPC_I2C1_BASE0x40098000UL
#定义LPC_I2C2_BASE0x4009C000UL
#定义LPC_SPI0_BASE0x400A4000UL
#定义LPC_SPI1_BASE0x400A8000UL
#定义LPC _定时器0_BASE0x400B4000UL
#定义LPC _定时器1_BASE0x400B8000UL
#定义LPC_INMUX_BASE0x40050000UL
#定义LPC _ ri timer _ BASE0x 40070000 ul
#定义LPC_MRT_BASE0x40074000UL
#定义LPC _ GPIO((LPC _ GPIO _ T *)LPC _ GPIO _ PORT _ BASE)
#定义LPC _ DMA((LPC _ DMA _ T *)LPC _ DMA _ BASE)
#定义LPC _ CRC((LPC _ CRC _ T *)LPC _ CRC _ BASE)
#定义LPC _ SCT((LPC _ SCT _ T *)LPC _ SCT _ BASE)
#定义LPC _ MBOX((LPC _ MBOX _ T *)LPC _ MBOX _ BASE)
#定义LPC _ ADC((LPC _ ADC _ T *)LPC _ ADC _ BASE)
#定义LPC _ FIFO((LPC _ FIFO _ T *)LPC _ FIFO _ BASE)
#定义LPC _ SYSCON((LPC _ SYSCON _ T *)LPC _ SYSCON _ BASE)
#定义LPC _ TIMER 2((LPC _ TIMER _ T *)LPC _ TIMER 2 _ BASE)
#定义LPC _ TIMER 3((LPC _ TIMER _ T *)LPC _ TIMER 3 _ BASE)
#定义LPC _ TIMER 4((LPC _ TIMER _ T *)LPC _ TIMER 4 _ BASE)
# define LPC _ GINT((LPC _ GPIOGROUPINT _ T *)LPC _ GPIO _ group int 0 _ BASE)
# define LPC _ PININT((LPC _ PIN _ INT _ T *)LPC _ PIN _ INT _ BASE)
# define LPC _ IOCON((LPC _ IOCON _ T *)LPC _ IOCON _ BASE)
#定义LPC _ UTICK((LPC _ UTICK _ T *)LPC _ UTICK _ BASE)
#定义LPC _ WWDT((LPC _ WWDT _ T *)LPC _ WWDT _基地)
#定义LPC _ RTC((LPC _ RTC _ T *)LPC _ RTC _ BASE)
# define LPC _ ASYNC _ SYSCON((LPC _ ASYNC _ SYSCON _ T *)LPC _ ASYNC _ SYSCON _ BASE)
#定义LPC _ use rt 0((LPC _ use rt _ t *)LPC _ use rt 0 _ base)
#定义LPC _ use rt 1((LPC _ use rt _ t *)LPC _ use rt 1 _ base)
#定义LPC _ use rt 2((LPC _ use rt _ t *)LPC _ use rt 2 _ base)
#定义LPC _ use rt 3((LPC _ use rt _ t *)LPC _ use rt 3 _ base)
#定义LPC _ I2C 0((LPC _ I2C _ t *)LPC _ I2C 0 _基)
#定义LPC _ I2C 1((LPC _ I2C _ t *)LPC _ I2C 1 _基)
#定义LPC _ I2C 2((LPC _ I2C _ t *)LPC _ I2C 2 _基)
#定义LPC_SCT0
#定义LPC _ SPI 0((LPC _ SPI _ t *)LPC _ SPI 0 _ base)
#定义LPC _ SPI 1((LPC _ SPI _ t *)LPC _ SPI 1 _ base)
#定义LPC _ timer 0((LPC _ timer _ t *)LPC _ timer 0 _ base)
#定义LPC _ timer 1((LPC _ timer _ t *)LPC _ timer 1 _ base)
#定义LPC _ immux((LPC _ immus _ t *)LPC _ immus _ base)
#定义LPC _ rit imer((LPC _ rit imer _ t *)LPC _ rit imer _ base)
#定义LPC _ mrt((LPC _ mrt _ t *)LPC _ mrt _ base)
#定义LPC _ PMU((LPC _ PMU _ t *)LPC _ PMU _ base)
由于LPC54102足球俱乐部支持单电源1.62伏~ 3.6伏供电是吗?为了保护麦考接口安全是吗?在板子的设计上可以看到大量的双电源转换收发器-你好。









