测试UART可以通过APB来访问uart控制寄存器来实现uart功能的配置,等待中断后访问状态寄存器来实现uart的控制
无条件响应就是slave看到地址数据有效就必需接收或发送,APB的两拍时序是必需严格遵守的。
所以APB设备一般都要和中断机制一起工作来实现数据的传输,才不会出现错误。
在新的AMBA3.0里,APB加入了PREADY信号来避免这种“无条件响应”。
AHB-Bus <-> AHB-APB-BRIDGE <-> (APB-Slave + uart design + UART TX/RX)<-> UART interface
在业界通常的设计里面,AHB时钟和APB时钟是一个时钟,也有使用不同时钟的,如果是一个PLL,倍频同相,则做一个很简单的倍频桥即可,用AHB时钟采APB时钟上升沿或者用PCLKEN,如果不是一个PLL,这种情况很少,除非有特殊的时序要求,需要做异步桥。不得不说的是,APB总线的效率是比AHB总线高的,所以如果AHB和APB是不同频率,会造成AHB总线系统性能下降,所以大家都是一个时钟。
APB时钟和UART时钟通常也是分离的,APB时钟控制总线接口,UART时钟控制UART逻辑,这样信号质量和功耗都比较好,1是UART波特率用APB的100、50、150等整数频率分出来有误差,特别是到12M的高速UART;2是UART逻辑时钟可独立关断,节省功耗,APB总线时钟保留,系统也不会挂死。
由上,你所担心的问题是不存在的,APB操作是两个周期完成(AMBA2.0里面),写的数据是写到UART的FIFO里面的,然后数据再由发送时钟UARTCLK慢慢取走发出。