foss-for-synopsys-dwc-arc-processors / embarc_osp

embARC Open Software Platform (OSP) - An embedded software distribution for IoT and other embedded applications for ARC
https://www.embarc.org/
BSD 3-Clause "New" or "Revised" License
70 stars 62 forks source link

IP/Subsystem: Fix the I2S Tx interrupt masking issue if the requested… #140

Open ahshokry opened 4 years ago

ahshokry commented 4 years ago

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.

fanghuaqi commented 4 years ago

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',))