环境搭建

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

移植步骤

说明

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

需要的文件

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

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

文件

说明

main.c

micropython的入口,初始化啥的都在这了

Makefile

这个不多说,编译就靠这个了

mpconfigport.h

micropython的功能配置,根据自己的需要进行更改

mphalport.h

暂时用不到

qstrdefsport.h

暂时用不到

stm32f405.ld

GNU链接文件,需要根据芯片和板子进行编写

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_1788\periph_uart_rb\example\src中拷贝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"

#ifdef __thumb__

#define MICROPY_MIN_USE_CORTEX_CPU (0) // 本移植不使用micropython官方通用的IRQ和reset框架

#define MICROPY_MIN_USE_LPC1788_MCU (1) // 用于uart_core.c

#endif

串口

#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移植增加驱动,MicroPython之LPC1788移植相关推荐

  1. 【Linux高级驱动】如何分析并移植网卡驱动

    dm9000的驱动分析 m9000_init  platform_driver_register(&dm9000_driver); dm9000_probe  /*获取平台数据*/  stru ...

  2. Android系统移植与驱动开发概述

    1.Android系统架构分为四层:linux内核,Android是基于linux内核的. c/c++代码库,包括C/C++编写的代码库,包括dalivk虚拟机的运行时. Android SDK AP ...

  3. 1Android系统移植与驱动开发概述

    1.Android系统架构分为四层,从下至上依次为Linux内核层,C/C++代码库.Android SDK API.应用程序,要熟悉每一层的内容以及功能: 2.Android移植分为应用移植和系统移 ...

  4. uboot移植Linux-SD驱动代码解析

    一.uboot与linux驱动 1.1.uboot本身是裸机程序 (1)狭义的驱动概念是指:操作系统中用来具体操控硬件的代码叫驱动 广义的驱动概念是指:凡是操控硬件的代码都叫驱动 (2)裸机程序中是直 ...

  5. LoRa 之一 旧版驱动(sx12xxDrivers-V2.1.0)移植及驱动架构详解

      在之前的项目中,一直使用 LoRa 通信.很早之前就想写写文章记录一下学习过程.怎奈一直是一知半解的状态,想写不敢写!LoRa 这个东西在国内用的貌似不是太多.   对于无线通信,各个国家或者地区 ...

  6. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  7. linux内核epub,Android底层开发技术实战详解——内核、移植和驱动(第2版)[EPUB][MOBI][AZW3][42.33MB]...

    内容简介 本书从底层原理开始讲起,结合真实的案例向读者详细介绍了Android内核.移植和驱动开发的整个流程.全书分为21章,依次讲解驱动移植的必要性, Goldfish.OMAP内核和驱动解析,显示 ...

  8. linux字符驱动向vxworks移植,VxWorks驱动移植至SylixOS总结

    本文档描述了将VxWorks中的驱动源码快速移植至SylixOS中的方法,使用时需要结合SylixOS中的VxWorks兼容层实现. 1. 驱动注册与初始化 1.1 VxWorks中驱动注册与初始化 ...

  9. 【华为云技术分享】小熊派华为物联网操作系统LiteOS裸机驱动移植02-LCD驱动移植及使用

    1. LCD裸机驱动 小熊派开发板使用的LCD屏幕为1.3寸的TFT彩屏,色彩深度16bit,分辨率240*240,使用 SPI 接口与 MCU 之间通信. 如果你对裸机玩转LCD屏幕还不熟悉,请先阅 ...

  10. 【ARM】新唐NUC977移植WK2124驱动

    移植WK2124 一.实验目的 二.WK2124简介 三.驱动源代码下载 四.板级配置 五.Makefile 六.驱动代码修改 总结 一.实验目的 将两路SPI接口扩展为8路UART接口 二.WK21 ...

最新文章

  1. 光流 | 使用Horn-Schunck方法进行光流估计(附代码)
  2. Appointment get entity debug
  3. TinyFrame升级之五:全局缓存的设计及实现
  4. .net|dotnet应聘人员应该掌握的知识点
  5. React-组件通信
  6. Codeforces Round #584 (Div. 1 + Div. 2)
  7. DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述)
  8. 高级操作系统——XV6进程管理
  9. sqlplus基本使用
  10. 【《离散数学》试卷(A)】离散数学期末考试题——分享篇——题目完善、答案详尽【推荐学习】
  11. ZigBee协调器和终端通信
  12. 开心网刷分程序详解以及web游戏破解思路分析(一)
  13. C++primer plus第六版课后编程题答案14.3(仅供参考)
  14. [网络规划] 拓扑图绘图工具yED Graph Editor使用(持续更新)
  15. NLP最简单中文分词介绍
  16. 编程珠玑--粗略估算
  17. 广东省计算机二级c语言真题,广东省计算机二级考试题及答案
  18. 手机安装https证书报错!无法安装该证书,因为无法读取该证书文件解决办法
  19. 5分钟,10行代码!带你用Python做个电脑文件清道夫!
  20. 青铜变王者,桌面云是如何逆袭的?

热门文章

  1. 项目管理常用文档表格模板二
  2. 很好用的绘图软件cad,非常喜欢这个简易方法
  3. SIM800C 不停的回复Call Ready NET指示灯一直不能进入3秒闪烁的状态
  4. 软件的行业适配性:进销存软件与五金行业
  5. java shiro教程_shiro教程1(HelloWorld)
  6. idea好看字体设置
  7. 基于matlab 自适应滤波,基于Matlab的自适应滤波器的设计及仿真
  8. 第三讲 信息资产的分类与控制
  9. 在Eclipse中使用JUnit5进行单元测试
  10. 【ubuntu工具】ubuntu下文件对比软件meld