在mm32f3270为micropython移植utime模块

在mm32f3270为micropython移植utime模块

苏勇,2021年8月

Introduction

utime模块的主要函数在“extmod”目录下的utime_mphal.h和utime_mphal.c文件中实现。当仍需要在ports目录下补完部分底层函数。

需要具体硬件实现的函数如下:

  • void mp_hal_delay_ms(uint32_t ms)

  • void mp_hal_delay_us(uint32_t us)

  • mp_uint_t mp_hal_ticks_ms(uint32_t ms)

  • mp_uint_t mp_hal_ticks_us(uint32_t us)

  • mp_uint_t mp_hal_ticks_cpu(void)

mimxrt的实现,在“mphalport.h”文件中:



static inline void mp_hal_delay_ms(mp_uint_t ms) {
    uint64_t us = (uint64_t)ms * 1000;
    ticks_delay_us64(us);
}

static inline void mp_hal_delay_us(mp_uint_t us) {
    ticks_delay_us64(us);
}

#define mp_hal_delay_us_fast(us) mp_hal_delay_us(us)

static inline mp_uint_t mp_hal_ticks_ms(void) {
    return ticks_ms32();
}

static inline mp_uint_t mp_hal_ticks_us(void) {
    return ticks_us32();
}

static inline mp_uint_t mp_hal_ticks_cpu(void) {
    return 0;
}

至于其中的“mp_hal_delay_us_fast()”,是给软件模拟协议时用的。

mimxrt定时器的实现通过在ticks组件中,调用了定时器模块GPI及其中断服务程序,实现了延时功能。这里我考虑使用更加通用的Systick完成类似功能。实际上,samd和stm32也都是用Systick实现的utime。

可以直接复制samd下面的“modutime.c"

真是发现一座宝矿啊,samd的移植几乎就是教科书,全部照抄就好。

最后实现延时闪小灯的效果,REPL的脚本如下:


MicroPython v1.16 on 2021-08-23; MB_F3270 with MM32F3277G7P
>>> import utime
>>> dir(utime)
['__name__', 'sleep', 'sleep_ms', 'sleep_us', 'ticks_add', 'ticks_cpu', 'ticks_diff', 'ticks_ms', 'ticks_us']
>>> from machine import Pin
>>> pin0 = Pin(0, mode=Pin.OUT_PUSHPULL)
>>> for i in range(10):
...   pin0(1)
...   utime.sleep_ms(1000)
...   pin0(0)
...   utime.sleep_ms(1000)
...
>>>

今天就这样了,好好休息,看明天能不能录个视频出来。

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值