main.c的LED闪烁驱动源码如下
#include "board.h"
#include "fsl_debug_console.h"
#include "fsl_gpio.h"
#include "pin_mux.h"
#include
__asm void Delay_ms(unsigned int nCount)
{
0
ldr r1, =24000 // arm clock = 96000000hz
1
subsr1, r1, #1
bne %B1
subsr0, r0, #1
bne %B0
bx lr
}
int main(void)
{
uint32_tport_state = 0;
/* Define theinit structure for the output LED pin*/
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput, 0,
};
/* Board pin,clock, debug console init */
/* attach 12MHz clock to FLEXCOMM0 (debug console) */
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
/* enable clockfor GPIO*/
CLOCK_EnableClock(kCLOCK_Gpio0);
CLOCK_EnableClock(kCLOCK_Gpio1);
BOARD_InitPins();
BOARD_BootClockFROHF96M();
BOARD_InitDebugConsole();
/* Print a noteto terminal. */
PRINTF("rn GPIO Driver examplern");
/* Init outputLED GPIO. */
GPIO_PinInit(GPIO, 0, 15, &led_config);
GPIO_WritePinOutput(GPIO, 0, 15, 0);
GPIO_PinInit(GPIO, 0, 19, &led_config);
GPIO_WritePinOutput(GPIO, 0, 19, 0);
GPIO_PinInit(GPIO,0, 21, &led_config);
GPIO_WritePinOutput(GPIO, 0, 21, 0);
GPIO_PinInit(GPIO, 0, 22, &led_config);
GPIO_WritePinOutput(GPIO, 0, 22, 0);
GPIO_PinInit(GPIO, 0, 25, &led_config);
GPIO_WritePinOutput(GPIO, 0, 25, 1);
GPIO_PinInit(GPIO,0, 26, &led_config);
GPIO_WritePinOutput(GPIO, 0, 26, 1);
GPIO_PinInit(GPIO, 0, 29, &led_config);
GPIO_WritePinOutput(GPIO, 0, 29, 1);
GPIO_PinInit(GPIO, 0, 30, &led_config);
GPIO_WritePinOutput(GPIO, 0, 30, 1);
while (1) {
GPIO_TogglePinsOutput(GPIO,0, 1u << 15);
GPIO_TogglePinsOutput(GPIO,0, 1u << 21);
GPIO_TogglePinsOutput(GPIO,0, 1u << 25);
GPIO_TogglePinsOutput(GPIO,0, 1u << 29);
Delay_ms(1000);
GPIO_TogglePinsOutput(GPIO,0, 1u << 19);
GPIO_TogglePinsOutput(GPIO,0, 1u << 22);
GPIO_TogglePinsOutput(GPIO,0, 1u << 26);
GPIO_TogglePinsOutput(GPIO,0, 1u << 30);
Delay_ms(1000);
}
}
d 工程设置编译完成后用fromelf命令生成二进制可执行代码firmware.bin,LPC5411x在启动时会对用户代码进行校验,只有合法的镜像才会执行,用checksum.exe对MDK编译生成的firmware.bin进行校验和的更正,用于二进制可执行代码的直接烧录。
e 工程设置编译器选项,预定义CPU_LPC54114J256BD64_cm4,用于sdk源码的编译要求,加入头文件定义,用--c99进行编译。
f 工程设置链接器,用LPC54114J256_cm4.scf分散加载文件。
g 工程设置调试器/烧录器,LPC54110开发板板载了CMSIS-DAP调试器。
对CMSIS-DAP Debugger进行设置
代码烧录设置,把LPC5411x_256.FLM烧录文件拷贝到MDK4安装目录 ARMFlash下,在Add选项下选择LPC5411x IAP 256kB Flash,其中LPC5411x_256.FLM为LPC5411x的IAP烧录代码实现,源码可以参考附件。设置好后,可以直接在MDK4下用调试器直接烧录代码。
h 编译,成功后会在工程目录生成可以直接烧录运行的二进制可执行代码firmware.bin。
3. 烧录运行设置好调试器烧录后,可以用烧录器直接下载代码并运行。
设置成u***启动,连接CN3,LPC5411x的u***通讯口,ISP会虚拟出一个存储设备(LPC5411x内部flash),里面有一个firmware.bin的文件,即为用户程序,可以把firmware.bin文件删除,重新把新的用户程序firmware.bin拷贝到存储设备中。设置成flash启动,重新上电即可运行更新的代码。
设置成串口启动,配合NXP提供的FlashMagic工具,用串口进行代码下载。
4. 附录此处以MDK4简单介绍LPC5411x工程开发的搭建过程,这对于其他编译集成环境(IAR、GCC等)都是类似的。
附件为基于MDK5的LPC54114J256官方sdk源码包SDK_2.2.1_LPC54114J256.zip,板载调试器官方固件以及串口驱动包LPC11Uxx-Debug-Probe-VCOM.zip,LPC5411x的IAP烧录源码工程以及烧录文件LPC5411x_256.FLM,基于MDK4的LED灯驱动工程,LPC5411x镜像校验码生成工具checksum.exe的win32源码。
https://pan.baidu.com/s/1qXJDMlm