问题1:
/*
* Clear the interrupt status register before use it to monitor.(在使用中断状态寄存器之前先清除中断状态寄存器),中断状态在读取状态寄存器之后自动清零(类型为wtc),
*/
IntrStatusReg = XIicPs_ReadReg(BaseAddr, XIICPS_ISR_OFFSET);
XIicPs_WriteReg(BaseAddr, XIICPS_ISR_OFFSET, IntrStatusReg);
那么我得疑问是在读取状态寄存器之后,为什么还要将这个中断状态写入呢?如果读取出的这个中断状态含有效中断状态怎么办?这不是读取的时候白清除了吗?
问题2:
关于本函数中有一个填充fifo语句
/*
* Transmit first FIFO full of data.将第一个充满数据的fifo传输
*/
(void)TransmitFifoFill(InstancePtr);该函数的定义是在是不理解,主要是那一句
if (InstancePtr->SendByteCount > (s32)AvailBytes) {
NumBytesToSend = (s32)AvailBytes;
} else {
NumBytesToSend = InstancePtr->SendByteCount;
}
Avail是fifo中还可以存入的字节数吧?如果要发送的字节数大于剩余的有效空间字节数就将要发送的字节数设置为Avail,否则不变。
可是这个函数不是要将fifo填满吗?这个判断的依据是什么呢?