树莓派Pio的相关知识,其实很多帖子都有介绍过。我以前写的一篇文章也大致讲述了Pio外设的知识。我在网上也找过不少教程和视频,感觉讲的最细的,就是微雪课堂的这一篇视频。
PIO状态机
PIO外设的状态机的组成由以下内容组成,可以看出PIO状态机是独立运行的,状态机的运行时钟通过时钟分频器分频后取得。通过独立执行PIO的汇编程序,调用暂存寄存器、移位寄存器、FIFO、GPIO、DMA等设备,完成对应的时序输出或者数据输入功能。
从上图可以看出每个状态机都有一个PC寄存器用于存放当前执行指令的地址,两个暂存寄存器用户存储临时数据,两个FIFO队列,移位寄存器、等常见外设。对于熟悉微机原理和汇编语言的同学来说,这些外设都是挺熟悉的。而GPIO映射这个功能,则是PIO的一个特殊设计。
PIO引脚映射
往往我们在设计硬件时,不能保证外设的引脚一定是从GPIO0开始的。比方说我们要做一个SDIO的SD卡读写功能。也许因为布线或者别的外设需求的原因,GPIO0和大部分引脚被占用了。连续的引脚只有GPIO3到GPIO10。这时候PIO的引脚映射功能就很有用了。此时我们可以把输入和输出映射都设置为以下的排布,就可以使用更少的RAM和更简洁的代码,实现相关功能。
PIO 指令表
PIO的指令表在视频中也有详细的讲解,这里就不再说明(我也没人家说的好)。
PIO 指令空间
由于PIO的指令空间有限,一个PIO外设只允许最大使用32条指令空间(4个状态机的程序总和不能超过32条汇编代码)。4个状态机是独立运行的。
总结
PIO的巧妙设计,给rp2040带来了更多的特色应用,不管是HDMI输出、逻辑分析仪、10M PHY,还是常见的SDIO、驱动WS2812等常见功能。如果有兴趣的话,还是建议多了解一下PIO和相关应用,能学到挺多知识。
|