首页>>科技 >>内容

lpc54102双核及LPC54102寄存器直接编程

发布时间:2024-01-10 21:14:03编辑:温柔的背包来源:

lpc54102双核及LPC54102寄存器直接编程

很多朋友对lpc54102双核及LPC54102寄存器直接编程不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

介绍

随着科技的进步,双核CPU被逐渐淘汰只是时间问题,四核甚至八核CPU也不再是什么新奇的东西,但是在微控制器领域,双核CPU是一个非常新奇的东西。很多工程师朋友在开发MCU应用系统时,如果系统功能复杂,一个MCU芯片无法满足要求,往往会使用多个MCU协同工作,把一些“打杂”的工作交给低端MCU,而高端MCU则可以放开“手脚”完成系统的主要任务。

但这样一来,系统研发的复杂度、成本和可靠性都会受到不同程度的影响,多微控制器方案带来的功耗问题也不容小觑。在这方面,恩智浦推出了基于ARM Cortex-M4和ARM Cortex-M0非对称双核架构的LPC54102系列微控制器,旨在为超低功耗传感器传感数据集成、传感器融合或其他传感器数据处理提供低功耗、高性能的双核解决方案。

好在我拿到了LPCXpresso54102开发套件,带LPC54102双核微控制器。该套件使用的包装与STM32 Nucleo系列板卡的外包装材质相同,均为透明塑料外壳。这种封装虽然降低了成本,但在视觉性能上并不逊色于其他封装。透明材质的使用凸显了板卡的精致,使得板卡的芯片资源“裸”在大家面前。

打开包装,取出LPCXpresso54102板。整板采用深蓝色阻焊,象牙色丝印,让人眼前一亮。pcb焊盘的沉金工艺更是高端大气。虽然LPCXpresso54102板的设计思路类似于STM32核板,是一种板载仿真器+核心板的结构,但相比核板,LPCXpresso54102显然要大很多,元器件布局也紧凑很多。

这块板有两个micro usb接口,用普通安卓手机给数据线充电就可以连接电脑。上面的接口是专门给LPC54102供电的,给LINK2仿真器以外的组件供电。该接口可以在不使用板载调试器的情况下连接。如果你细心的话,会发现这个micro usb接口的右边还有一个P3接口,是双线引脚排列,分别是5V和GND。这也是一个结合了工程师需求,并留下外接电源的接口。

下面的USB接口是LPCLINK2仿真器的接口。说到这里,我不得不把重点放在LPCLINK2模拟器上。在这个仿真器的设计上,恩智浦可以说是不惜一切代价,主控芯片的选择尽显霸气。LPC4322双核MCU让LINK2充满了“暴力”!

LPC54102有多个串行端口。我尝试直接用寄存器操作!经过多次测试,可以收发数据了!内部晶振12MHz,无锁频,波特率9600b/s,使用第一个串口!您也可以使用所有其他串行端口。参考代码:无符号long buf# define DELAY _ COUNT0x ffffvoid DELAY(long int COUNT){ for(;数数!=0;count-);} main(){ *(long *)0x 400000 c 0=0x e10b;///使能端口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;///9600 b/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 _ BASE0x1c 000000 ul #定义LPC _ DMA _ BASE

#定义LPC _ CRC _ BASE0x1C010000UL #定义LPC _ SCT _ BASE0x1C018000UL #定义LPC _ MBOX _ BASE0x1c 02 c 000 ul #定义LPC _ ADC _ BASE0x1C034000UL #定义LPC _ FIFO _ BASE0x1c 038000 ul#定义LPC _ SYSCON _ BASE0x40000000UL #定义LPC _定时器2_BASE0x400040

#定义LPC _ IOCON _ BASE0x 4001 c 000 ul #定义LPC _ UTICK _ BASE0x40020000UL #定义LPC _ FMC _ BASE0x40024000UL #定义LPC _ PMU _ BASE0x 4002 c 000 ul #定义LPC _ WWDT _ BASE0x 40038000 ul #定义LPC_RTC_BASE0x4003C000UL#定义LPC _异步_异步_ ul

#定义LPC _ I2C1 _ BASE0x40098000UL #定义LPC _ I2C 2 _ BASE0x 4009 c 000 ul #定义LPC _ SPI 0 _ BASE0x 400 a 4000 ul #定义LPC _ SPI 1 _ BASE0x 400 a 8000 ul #定义LPC _ time r0 _ BASE0x 400 b 4000 ul #定义LPC _ time R1 _ BASE0x 400 b 8000 ul #定义LPC_INMUX_BASE0x400500

#定义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 _ TIMER 4((LPC _ TIMER _ T *)LPC _ TIMER 4 _ BASE)#定义LPC _ GINT((LPC _ GPIOGROUPINT _ T *)LPC _ GPIO _ group INT 0 _ BASE)#定义LPC _ PIN _ INT _ BASE)#定义LPC _ IOCON((LPC _ IOCON _ T *)LPC _ IOCON _ BASE)#定义LPC _ UTICK((LPC _ UTICK _ UTICK

# define LPC _ ASYNC _ sys con((LPC _ ASYNC _ sys con _ T *)# define LPC _ USART 0((LPC _ USART _ T *)LPC _ USART 0 _ BASE)# define LPC _ USART 1((LPC _ USART _ T *)LPC _ USART 1 _ BASE)# define LPC _ USART 2((LPC _ USART _ T *)LPC _ USART 2 _ BASE)# define LPC _ USART 3((LPC _ USART _ T *)LPC

由于LPC54102支持1.62v~3.6v的单电源,为了保护MCU接口的安全,在板卡的设计中可以看到大量的双电源转换收发器。

以上知识分享希望能够帮助到大家!