MicroPython之LPC1788移植

发布者:DazzlingSmile最新更新时间:2021-10-19 来源: eefocus关键字:MicroPython  LPC1788  移植 手机看文章 扫描二维码
随时随地手机看文章
环境搭建

环境搭建就不多说了,按照官方的wiki进行搭建就好了。


移植步骤


说明

micropytho使用gcc进行编译,因此使用官方的lpcopen_2_10_lpcxpresso_ea_devkit_1788开发包。将MCUXpresso IDE也下载安装好,后面有用。


需要的文件

ports目录下有个minimal目录,这是micropython的最小移植,后面都所有操作都在这个移植的基础上进行。

下面看看,这个移植里面都有哪些文件:


文件说明
main.cmicropython的入口,初始化啥的都在这了
Makefile这个不多说,编译就靠这个了
mpconfigport.hmicropython的功能配置,根据自己的需要进行更改
mphalport.h暂时用不到
qstrdefsport.h暂时用不到
stm32f405.ldGNU链接文件,需要根据芯片和板子进行编写
uart_core.c这个移植使用串口访问板子,因此这里是串口收发的实现

So,

  • 拷贝一份minimal,然后重命名为lpc17xx_40xx,里面的stm32f405.ld重命名为lpc1788.ld。

  • 然后从lpcopen_2_10_lpcxpresso_ea_devkit_1788中拷贝lpc_chip_177x_8x到这并重命名为Library,将lpc_board_ea_devkit_1788拷贝到boards并重命名为Edeboy(这是我板子的名字)。

  • 此外,从lpcopen_2_10_lpcxpresso_ea_devkit_1788periph_uart_rbexamplesrc中拷贝cr_startup_lpc177x_8x.c、sysinit.c到下图中位置。

    到此,准备工作完成!!!

链接文件

.ld文件一般厂家都会提供,但是lpcopen_2_10_lpcxpresso_ea_devkit_1788开发包里并没有这个,因此前面安装的MCUXpresso IDE就派上用场了。导入开发包,并编译一次periph_uart_rb工程,就可以得到了。

我将这三个文件合为了一个。


配置文件

mpconfigport.h 中作如下改动


#define MICROPY_HW_BOARD_NAME "Edeboy"

#define MICROPY_HW_MCU_NAME "LPC1788"


串口


#if MICROPY_MIN_USE_LPC1788_MCU


#include "board_api.h"


// Receive single character

int mp_hal_stdin_rx_chr(void)

{

    unsigned char c = 0;

#if MICROPY_MIN_USE_STDOUT

    int r = read(0, &c, 1);

    (void)r;

#elif MICROPY_MIN_USE_LPC1788_MCU

    c = Board_UARTGetChar();

#endif

    return c;

}


// Send string of given length

void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len)

{

#if MICROPY_MIN_USE_STDOUT

    int r = write(1, str, len);

    (void)r;

#elif MICROPY_MIN_USE_LPC1788_MCU

    while (len--)

    {

        Board_UARTPutChar(*str++);

    }

#endif

}


#endif


Make file

make file只改动这部分,别的都保持原样。

  • INC是头文件搜索路径,DEFS是宏定义,这里定义了__CODE_RED、__USE_LPCOPEN、DCORE_M3这三个宏,因为源码里需要打开,不然编译失败。

  • LDFLAGS将stm32f405.ld改为lpc1788.ld。

  • 接下来重点说一下这个CFLAGS里边的选项。LPC1788是M3内核,因此-mcpu=cortex-m3,-march=armv7-m(指令集),-mfloat-abi=soft(M3没有硬件浮点),去掉-mfpu,使用默认值即可。-Werror表示把警告当错误处理,这个要求太高,去掉。debug选项增加一个宏DEBUG_ENABLE。

  • SRC_C为源文件路径。


INC += -I.

INC += -I$(TOP)

INC += -I$(BUILD)

INC += -I./boards/Edeboy/inc

INC += -I./Libraries/inc


ifeq ($(CROSS), 1)

DFU = $(TOP)/tools/dfu.py

PYDFU = $(TOP)/tools/pydfu.py

DEFS = -D__CODE_RED -D__USE_LPCOPEN -DCORE_M3

CFLAGS_CORTEX_M3 = -mthumb -march=armv7-m -mabi=aapcs -mcpu=cortex-m3 -mfloat-abi=soft -fsingle-precision-constant -Wdouble-promotion

CFLAGS = $(INC) -Wall -std=c99 -nostdlib $(CFLAGS_CORTEX_M3) $(COPT) $(DEFS)

LDFLAGS = -nostdlib -T lpc1788.ld -Map=$@.map --cref --gc-sections

else

LD = gcc

CFLAGS = -m32 $(INC) -Wall -Werror -std=c99 $(COPT)

LDFLAGS = -m32 -Wl,-Map=$@.map,--cref -Wl,--gc-sections

endif


# Tune for Debugging or Optimization

ifeq ($(DEBUG), 1)

CFLAGS += -O0 -ggdb -DDEBUG_ENABLE

else

CFLAGS += -Os

CFLAGS += -fdata-sections -ffunction-sections

endif


LIBS =


SRC_C =

    main.c

    uart_core.c

    lib/utils/printf.c

    lib/utils/stdout_helpers.c

    lib/utils/pyexec.c

    lib/libc/string0.c

    lib/mp-readline/readline.c

    $(BUILD)/_frozen_mpy.c

    cr_startup_lpc177x_8x.c

    sysinit.c

    ./boards/Edeboy/src/board_sysinit.c

    ./boards/Edeboy/src/board.c

    ./Libraries/src/sysinit_17xx_40xx.c

    ./Libraries/src/clock_17xx_40xx.c

    ./Libraries/src/sysctl_17xx_40xx.c

    ./Libraries/src/gpio_17xx_40xx.c

    ./Libraries/src/iocon_17xx_40xx.c

    ./Libraries/src/uart_17xx_40xx.c


编译

  • make clean —— 清除编译结果

  • make CROSS=1 —— 编译


启动流程

大致说一下启动流程:

  • 芯片上电

  • 进入复位中断ResetISR

  • 复位中断程序中加载数据到SRAM、初始化一下bss段

  • 调用SystemInit()配置中断向量表、系统时钟、片内外设、板载外设

  • 调用main()初始化micropython

关键字:MicroPython  LPC1788  移植 引用地址:MicroPython之LPC1788移植

上一篇:LPC1788的IIC使用
下一篇:lpc1788移植u-boot-2010.03之spi flash移植

推荐阅读最新更新时间:2024-11-11 10:57

NFC会是下一个被移植到汽车上的技术
当汽车成为电子行业最为重要的细分市场之后,很多技术都被慢慢移植到汽车之上,下一个会是谁? 在跟电子行业的朋友聊天时,车云菌常能听到这种论调:“俺这个行业都日薄西山了,也就是汽车拯救了俺们。”且不论电子行业是否真的日薄西山,但是汽车,确实已经成为它们一个相当重要的细分市场。很多企业都十分努力在汽车行业找到看家本领的第二春。 比如说HUD(抬头显示),虽说现在HUD在汽车上还并没有普及开来,只在一些中高端车型上才有搭载,但是在很多概念性技术和概念车上,HUD的存在已然让人习惯。那么,下一个会被移植到汽车上的技术会是什么呢? 美国工程师协会(SAE)最近的一篇文章中认为,NFC技术将会成为下一个被从移动端移植到汽车上的技术
[嵌入式]
移植u-boot-1.1.6之NOR的支持
u-boot-1.1.6里面默认配置文件里面支持的nor型号是 1 #if 0 2 #define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */ 3 #endif 4 #define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */ 而我们使用的nor flash不是LV400/LV800; 我们使用的芯片是MX29LV160DB,但是uboot里面没有,而有相近的AM29LV040B,这是需要借助数据手册仿写一个 MX29LV160DB特性有: 大
[单片机]
米尔瑞米派Remi Pi Ubuntu系统移植指南
概述 Linux系统平台上有许多开源的系统构建框架,这些框架方便了开发者进行嵌入式系统的构建和定制化开发,目前比较常见的有Buildroot, Yocto, OpenEmbedded等等。 同时更多的传统的桌面系统也加入到嵌入式环境体系中,如Ubuntu,debian等,为嵌入式提供更方便实用的系统。本文主要介绍基于ubuntu22.04 core和米尔核心板定制一个完整的嵌入式ubuntu22.04系统的完整流程,其中包括开发环境的准备,ubuntu22.04系统的获取与移植, LXDE轻量级桌面管理等。 本文档并不包含Linux BSP系统相关基础知识的介绍,将直接使用米尔发布的myir-image-fu
[嵌入式]
米尔瑞米派Remi Pi Ubuntu系统<font color='red'>移植</font>指南
单片机脚本语言移植lua到stm32MDK
Lua简单介绍 Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua脚本能够非常easy的被C/C++ 代码调用,也能够反过来调用C/C++的函数,这使得Lua在应用程序中能够被广泛应用。不只作为扩展脚本,也能够作为普通的配置文件,取代XML,Ini等文件格式,而且更easy理解和维护。 Lua的目标是成为一个非常easy嵌入其他语言中使用的语言。大多数程序猿也觉得它的确做到了这一点。 非常多应用程序使用LUA作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这当中包含魔兽世界、博德之门、愤慨的小鸟、VOCALOID3 等。 单片机使用
[单片机]
UCOS-II中OS_CPU_IRQ_ISR移植过程分析
在uc/os-II的移植过程中存在一个通用的irq中断处理函数,其中的实现过程如下: OS_CPU_IRQ_ISR STMFD SP!, {R1-R3} ; We will use R1-R3 as temporary registers MOV R1, SP ADD SP, SP, #12 ;Adjust IRQ stack pointer SUB R2, LR, #4 ;Adjust PC for return address to task MRS R3, SPSR ; Copy SPSR (Task CPSR) MSR CPSR_cxsf, #SVCMODE|NOINT ;Change to
[单片机]
at91sam9260 OpenWRT u-boot移植
1. 直接在make menuconfig中选择编译at91sam9260ek平台的u-boot,烧写到开发板后效果 **U-Boot 2010.06-dirty (Jun 28 2017 - 09:14:34) DRAM: 64 MiB NAND: 1024 MiB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Net: macb0 macb0: Starting autonegotiation...** ==警告,u-boot环境变量校验失败,并且一段时间后启动重启(怀疑看门狗打开,但没
[单片机]
USB无线网卡的Linux驱动移植
  引言   COMFAST CF150NS USB无线网卡使用IEEE802.11n无线技术,无线传输速率最高达150 Mbps。相比传统的54 Mbps IEEE802.11g产品,拥有更高的无线带宽,让局域网内的数据传输更加高效,能有效地减少网络延迟,使语音视频、网络游戏、在线点播更流畅。CF150NS还使用了CCA(Clear Channel Assessment)空频道检测技术,在检测到周边有无线信号干扰时,可自动调整频宽模式,避开信道干扰,使无线信号更加稳定。当干扰消失时,又可自动捆绑空闲信道,充分利用信道捆绑优势,提升无线性能。CF150NS主要技术参数:主芯片Realtek 8188SU,接口USB2.0,频率范围为
[嵌入式]
u-boot2010.03 移植篇(一) 建立编译目标
移植篇(一)-----修改Makefile,生成编译目标---S3C6410 ---------------------------------------------------------- 使用环境 PC: Centos5.4 kernel: 3.0.1 corss: arm-linux-gcc 4.4.1 arm: s3c6410 uboot: uboot-2010-03 ---------------------------------------------------------- 开始教程之前.你需要下载源码,解压....此处略过千万行~~源码为uboot2010.03这个..别整错了.错了
[单片机]

推荐帖子

谢谢了stm32f107 做读写U盘,请问有没有官方的源代码。。谢谢了
我这里只有官方的模板程序,没有源代码,接触stm32时间又不长,也看不懂。求助一下。谢谢了stm32f107做读写U盘,请问有没有官方的源代码。。谢谢了我把所有关于USB操作的都上传了你搜索一下你把不明白的帖出来一下回复楼主忘密码了的帖子
忘密码了 stm32/stm8
提问+MSP430定时器连续计数模式下TACCRO的值是否改变?
MSP430定时器连续计数模式下,当计数到0XFFFF时TACCRO的值是否改变?也就是说会复位吗?官方例程中的偏移量是怎么回事啊?(是为了计数到0XFFFF时TACCR0复位的时候重新赋值吗?)提问+MSP430定时器连续计数模式下TACCRO的值是否改变?不会自己变好像,需要认为写入新值才会改变。你所说的偏移量是不是是指在TACCR0中断时给TACCR0寄存器再附一个新值。例如在连续模式下,如果要设定一个固定的中断时间例如1秒,那么到1s的时候TACCR0中断时再给TACCR0加上
jxsl 微控制器 MCU
基础知识:车载传感器的应用与分类
将当今的汽车说成是电子产品毫不过分,而且有人预言今后还会在安全、环保和信息化这三个领域加速实现电子化。这一趋势今后肯定只会加速而不可能停滞。因为汽车厂商在安全、环保和信息化这三个领域里早就提出了加速实现电子化的方针。而其中最值得关注的当数“安全”领域。汽车安全技术的重心正由被动安全转向主动安全,特别是提前检测障碍物的传感器也开始呈现多样化趋势。常将传感器的功能与人类5大感觉器官相比拟:光敏传感器――视觉声敏传感器――听觉气敏传感器――嗅觉化学传感器――味
小娜 汽车电子
放大器的应用
放大器的应用如果下载的软件需要解压密码,密码可能是:wwww.ec66.com或者www.ecbbs.com如果上述密码还不能解压,可能原因有两个:1、下载过程出错,重新下载该文件2、您所使用的WINRAR版本太低,请使用V3.0以上版本放大器的应用
fighting 模拟电子
做开关电源时出现的问题
请教各位大侠,当做一个开关电源的时候,开关管没有完全导通会跟什么有关系呢?做开关电源时出现的问题笼统分析起来原因估计很多,往往是原因只有一个,比如控制芯片工作了么?有振荡信号么?要看什么原理的电源了,,跟你的能力有关!和你的知识有关!还和你的见识有关!没完全导通,肯定上驱动电压低了呗。
laoshi 电源技术
小智漫画丨何为振荡电路
小智漫画丨何为振荡电路这个系列好优秀啊 谢谢支持,就是不知道怎么传上来自动压缩模糊了 鼠标点击图片,即可将图片另一窗口显示。前后滚动鼠标滚轮,可以将图片放大缩小。 不过,要在几幅图片的篇幅中讲清楚振荡电路,那是不可能的。更何况图片中的电路有些元件是胡乱标注,有些电路根本就是错误的。非常赞,加油,好好学习,天天向上,加油,每一个人!!!
NGI123 测试/测量
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved