subsystem 看做是总线上挂载的子cpu 或者 fpga
先是方框图
看看由哪几个主要模块组成.
各个模块的 连接逻辑 从属逻辑 模块功能
控制流 数据流 寄存器 中断 fifo dma
初始化时钟 一般由系统总的时钟控制器控制
设置寄存器 模式选择
时序相关 波特率设置
设置fifo 一般有中断触发阀值 来通知子系统状态
使能中断 cpu侧接收中断 子系统侧发送中断 中断优先级
使能dma dma控制器侧 配置通道 子系统侧发送请求 一般使能dma后 中断由dma控制器接管,不会再触发普通中断 dma一般分为单片连续内存运输 和多片链式内存运输
中断处理函数
发送的触发条件
接收的触发条件
发送完成标识
接收完成标识
清除中断方法
错误触发条件
错误处理
先去除所有边角功能,一般这些功能也是默认关闭的
组建一个最小功能,在一项项加上去
轮询,不用中断 fifo dma ,简单无脑,缺点,占用cpu时间,时效低,易丢失
用中断 不用fifo dma,也较简单,少占用cpu时间,缺点,当系统繁忙时候,中断被高优先级打断,作为从机或者异步传输时候,会响应慢,丢失数据所以会有中断pace这一说法
用fifo,用dma,配置较复杂 ,一个datasheet 最复杂三块 dma 网口 usb