Skip to content

Conversation

ahshokry
Copy link

If requested data length isn't integer multiple of (FIFO - THRE), the interrupt of I2S will be masked.

Let's assume FIFO = 16, THRE = 3, and requested data length is 20 bytes.

First, i2s_tx_master_tx_ISR_proc will call i2s_tx_master_write_samples with sample_cnt = (16 - 3) = 13.
Second, i2s_tx_master_write_samples will update sample_cnt to be 0, so the loop will exit.

Upon receiving FIFO interrupt, i2s_tx_master_tx_ISR_proc will call i2s_tx_master_write_samples again with sample_cnt = 13.
i2s_tx_master_write_samples will update sample_cnt to be 13 - 7 (20 requested - 13 sent the previous round) = 6

i2s_tx_master_write_samples will find that dev->xfr_len == *size, so it will increment sys_cnt and call application callback.
i2s_tx_master_tx_ISR_proc will iterate one more time because sample_cnt didn't reach zero yet.
Now, the condition if (dev->sys_cnt == dev->usr_cnt) will be true, so the interrupt will be masked.

… data length isn't integer multiple of (FIFO - THRE)
@fanghuaqi
Copy link
Contributor

Sphinx link check result


example/example.rst:75: [broken] https://embarc.org/pdf/embARC_appnote_how_to_use_smart_home_iot.pdf: 404 Client Error: Not Found for url: https://embarc.org/pdf/embARC_appnote_how_to_use_smart_home_iot.pdf
getting_started/hardware_requirement.rst:26: [broken] http://www.huamaosoft.cn/bluetooth.asp?id=1: HTTPConnectionPool(host='www.huamaosoft.cn', port=80): Max retries exceeded with url: /bluetooth.asp?id=1 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants