- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello, I have an inquiry regarding Uart - DMA Interrupt.
I understand that DMA-Rx interrupts depending on the setting value.
For example, if you set the "Number of data elements to send" value to 10, an interrupt occurs when 10 is received.
Then, if you set it to 10 and divide it into 6 or 4 instead of 10, is there a function that can cause interruption for each case?
For ST, Interrupt of Uart may occur when the signal from Rx is in Idle state (=Transmission Interrupt).
If you wait for the DMA buffer to fill, and then generate and process interrupts, a large amount of incoming data is missing.
Is there a way to solve this problem?
Please give me a lot of advice.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
PSoC supports multiple interrupt modes in DMA -
In case you have the possible data transfer numbers, you can configure the number of data elements to transfer in code by using the Cy_DMA_Descriptor_SetXloopDataCount API. The interrupt would be set to Trigger on every X loop completion and the data size in the X loop can be altered using the API mentioned above.
Best regards,
Hari
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
PSoC supports multiple interrupt modes in DMA -
In case you have the possible data transfer numbers, you can configure the number of data elements to transfer in code by using the Cy_DMA_Descriptor_SetXloopDataCount API. The interrupt would be set to Trigger on every X loop completion and the data size in the X loop can be altered using the API mentioned above.
Best regards,
Hari
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello @Hari
Is there a way to return the address stored in the receiving buffer of DNA-Rx to its initial state?
Looking for APIs that can stack from buffer [10] to 5 and then back to 0.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
One way to do that would be to chain this to a second descriptor that stacks the buffer from 0 to 10. That way, after descriptor 0 completes, it will chain to descriptor 1 and fill from the required buffer address.
Best regards,
Hari
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello @Hari
Let's assume that 73 data are received consistently.
If, I received only 40 and got disconnected while receiving it.
If you get 73 data back when you reconnect, the existing 40 data and the new 73 data are combined to make it weird. To prevent this, we are looking for ways to initialize information about the receive buffer when the connection is disconnected.
Is there an API for this?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Case 1 - Descriptor 0 starts from 0
In this case, a second Descriptor is not required. Descriptor 0 can be chained to itself so that once Desc0 completes, it will start again from Desc0 and fill the buffer.
Case 2 - Descriptor 0 starts from Buffer address 5
In this case, you will need a second descriptor to chain so that it will start from Buffer address 0. In case you need to restart from buffer 0, you need to change the source address of Desc0 so that it restarts from Buffer 0. In this case, the descriptors will be chained to each other. Desc0 to 1 and Desc1 to 0.
Best regards,
Hari
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
안녕하세요 @Hari
When using Desc 0 and Desc 1, shouldn't "Interrupt" occur in Desc 0 to move on to Desc 1? I would appreciate it if you could let me know if there is an API that can be forcibly changed in the middle.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You can automate it based on the number of elements to transfer. DMA chaining will ensure that the descriptor switch will happen automatically.
The interrupt can be enabled to trigger on descriptor completion (as shown in my first response). This will help in changing the number of elements to transfer once the descriptor completes.
Best regards,
Hari