嵌入式驱动学习

  • 时钟

    • 定义
      周期型的0、1信号
      时钟信号由"心脏"时钟源产生,通过"动脉"时钟树传播到整个芯片中。
      SYSCLK系统时钟,由HSI、HSE、PLLCLK三选一。
      HCLK是AHB总线时钟, PCLK是APB总线时钟。
      使用某个外设,必须要先使能该外设时钟
    • 系统时钟配置
    • 作用
      1. 实现芯片里电路同步。 寄存器在时钟上升沿时,把最终运算结果写入寄存器,即把寄存器输入端(值稳定)传给输出端。串口需要固定的波特率通信,IIC需要时钟线。
      2. 决定数字电路的运行速度
    • 时钟源
      1. 晶振(HSE高速外部时钟),使用PLL(锁相环)倍频
      2. RC 振荡电路(HSI高速内部时钟),精度相对较差
  • 寄存器

    寄存器是特殊的存储器,可以实现对单片机各个功能的控制。寄存器就是单片机内部的控制机构。

  • APB总线协议

    APB 看成一种"线",这种线是来连接两个设备,一个是master,一个是slave,所有数据传输都是master来控制,slave来回应。

    数据传输在PCLK时钟上升沿进行

    进行一次数据传输至少需要两个时钟周期

  • UART总线协议

    通信过程:

    交叉连接两台设备的TXD、RXD

    配置两台设备的波特率、停止位、奇偶校验位,保持一致

    发送数据,从起始位到结束位,整个数据包以串行的方式,从发送设备端送至接收设备端

    接受端以预配置的波特率 对数据线进行采样,

    接收设备采样的数据,首先会丢弃数据帧中的起始位、奇偶检验位和停止位,剩下的是有效数据位

    全双工通信

    缺点:异步通信*(无时钟线),和UDP类似,无法确保接收端收到数据

  • I2C总线协议

    使用示波器和逻辑分析仪调试

    用示波器观察总线上的波形是否有畸变

    用逻辑分析仪做数据解析。

    半双工通信

  • 中断

    • NVIC相关寄存器:
      • 中断使能寄存器,打开中断,每个位对应一个外部中断
      • 中断除能寄存器,关闭中断,每个位对应一个外部中断
    • EXTI相关寄存器
      • 中断屏蔽寄存器,位值为0表示屏蔽相应线上的中断请求,位值为1表示开放相应线上的中断请求
        清除
      • 请求挂起寄存器, 状态标记,可以用来清除状态。位值为0表示相应线上没有触发中断请求,位值为1表示相应线上触发请求。在中断处理函数中可以通过写入位值1来清除中断标记,把相应值变成0。
    • 使用中断
  • 音频codec芯片

    Soc使用I2C协议读写codec芯片的寄存器,来配置codec芯片。 使用I2S协议传输音频数据。

    播放时,DMA的方向是内存到外设, 目的地址是I2S的数据寄存器,然后使用I2S协议把音频数据发送到codec芯片

相关推荐
枳实-叶14 小时前
【Linux驱动开发】第10天:设备树零基础入门——DTS/DTB/DTC全解+编译流程
linux·运维·驱动开发
枳实-叶14 小时前
【Linux驱动开发】第11天:设备树(Device Tree)超详细全解:从诞生背景到工作原理
linux·运维·驱动开发
沃普天科技15 小时前
USB显示器驱动板触摸收款机显示器收银机点菜机广告机
驱动开发·游戏·计算机外设·电脑·ar·音视频·硬件工程
小此方15 小时前
Re:Linux系统篇(十九)进程篇·四:内核托底与生死交错 ,深度硬核剖析“僵尸”与“孤儿”进程
linux·运维·驱动开发
charlie1145141911 天前
嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路
linux·运维·驱动开发
猫猫的小茶馆1 天前
【Python】函数与模块化编程
linux·开发语言·arm开发·驱动开发·python·stm32
高翔·权衡之境2 天前
主题9:DMA与零拷贝——让CPU从数据搬运中解放
驱动开发·安全·缓存·系统安全·信息与通信
小此方2 天前
Re:Linux系统篇(十七)进程篇·二:深入浅出 [进程概念与进程父子关系]:从底层原理到实战应用
linux·运维·驱动开发
小此方2 天前
Re: Linux系统篇(十八)进程篇·三:深度硬核!全面起底 Linux 进程状态变化与内核链表动态解绑
linux·驱动开发·链表
楼兰公子3 天前
# RK3588 Linux 驱动开发完整学习指南RK3588_Linux_Driver_Development.md
linux·驱动开发