ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
29 июля
1375541
st256 (25.11.2023 13:31, просмотров: 1376)
Господа, разомнем мозги. Вот имею такой текст. Вроде на английском, но тут были мнения, что изначально он был написан на китайском, а потом переведен переводчиком. 

Finally, a block counter is maintained by the FIFO controller to indicate to the FIFO controller where to locate the

next data access within the I/O block. This counter, which you can see through the appropriate

D_FIFO_x_y_BLOCK_CNT register, indicates how many words have already been read or written in the current data

block. This value is incremented following an IOC access to the FIFO data, or through the access register. The most

recently accessed input or output data in the FIFO is located at

( D_FIFO_x_y_IOBLOCK_PTR - D_FIFO_x_y_BLOCK_CNT). The next location that will be accessed to store data written

to the FIFO, or provide data read from the FIFO, is ( D_FIFO_x_y_IOBLOCK_PTR - D_FIFO_x_y_BLOCK_CNT - 1).


FIFO, доложу я Вам, совсем не FIFO, а обычный DMA. Просто какая-то продвинутая китайская личность его решила назвать ФИФОм. Пишет (или читает) данные, как в обычно в циркулярный буфер из IOC. Соответственно, что записано (прочитано) должно быть прочитано(записано) программой. D_FIFO_x_y_BLOCK_CNT это просто счетчик. Только, сцуко, он ведет себя таки подлым образом.

1. Предположим, у меня IOC - обычный АЦП, который забивает буфер (I/O block) в режиме DMA. И каждый новый отсчет увеличивает значение D_FIFO_x_y_BLOCK_CNT на 1.

2. Итак, буфер забивается, D_FIFO_x_y_BLOCK_CNT растет. Теперь программа считывает данные из буфера. Предположим, 1 отсчет. То есть значение D_FIFO_x_y_BLOCK_CNT должно уменьшится на 1, так как данных в этом якобы ФИФЕ стало меньше? А он (регистр D_FIFO_x_y_BLOCK_CNT) все равно растет на ту же 1. Еще раз - пишу в ФИФУ - счетчик ФИФЫ растет, считываю из ФИФЫ, счетчик тоже растет...


Может мне пора на пенсию?