RP2040使用笔记
前置知识
官方文档:RP2040 Datasheet: A microcontroller by Raspberry Pi.
使用记录
1. PIO的时钟
PIO的全速时钟为125MHz
分频配置通过SDK的APIpio_sm_set_clkdiv_int_frac8
及pio_sm_set_clkdiv
也可以配置PIO
结构体的pio->sm[0].clkdiv
属性
2. PIO SM的PULL指令阻塞
pull block
可以使TX-FIFO为空时暂停指令执行
3. 修改系统时钟频率
hardware/clocks.h
下的set_sys_clock_khz
函数可以方便地修改系统时钟
时钟频率不能随意设置,使用官方提供的脚本src/rp2_common/hardware_clocks/scripts/vcocalc.py
可以计算时钟配置参数
4. 双核编程
详见官方文档2.8.2节
rp2040内部有两个Cortex M0+核心,两个内核有各自独立的Nested Vectored Interrupt Controller (NVIC) 及Debug Access Port (DAP),共用一个Single-cycle IO block (SIO),也就是说同一个引脚在一个时钟周期只能被一个内核操作
部分内部寄存器被两个内核同时操作时有一定的仲裁机制,通常Core0的操作是优先的
两个内核之间的通信可以使用内部的位宽32、深度8的FIFO(MailBox)
pico/multicore.h
下的multicore_launch_core1
可以将函数代码运行在Core1上
5. PIO和CORE同时操作GPIO
PIO和CORE初始化GPIO使用的函数是不同的逻辑,PIO初始化GPIO会将GPIO的功能指定为GPIO_FUNC_PIO0
或GPIO_FUNC_PIO1
,而CORE会将其功能指定为GPIO_FUNC_SIO
因此GPIO不能被PIO和CORE同时操作