Problem using both UART and DMA block

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
user_3003661
Level 3
Level 3
10 likes given 5 likes given First like received

Hi,

I am using CYC8CKIT-048 PSOC Analog Coprocessor Pioneer Kit and am experiencing issues while using both UART and DMA block in the same project.

I need to use the digital data sent from a PC and received via UART to determine which frequency sine wave should be generated (basically I need to make a FSK modulator).

I was trying to do that by connecting UART_tx to the switch input of a TCPWM by using one pin configured as digital output for UART and one as digital input for PWM and connecting them (by wire). I was planning to use the PWM as a clock divider (since this PSOC doesn't have a digital mux, or I can't seem to find it?) which counts to different values depending on the value of switch input.

Then i would connect PWM line output to DMA trigger input, and DMA would transfer data from a sine LUT table to VDAC's internal register and route VDAC to an output pin.

But when i try to build the project I get an error saying that the placer is unable to find a valid placement for pins and fixed-function blocks.

Is there a way to do this the way I imagined, or am I missing something?

Thanks

Here is a copy of placer.txt file:

Phase 4

E2809: Unable to find a valid placement for pins and fixed-function blocks. See the Digital Placement's Detailed placement messages section in the report file for details.

I2722: The following instances could not be placed:

   \PWM_1:cy_m0s8_tcpwm_1\ (0 location(s))

   ClockBlock (1 location(s): F(Clock,0))

   \UART_1:SCB\ (3 location(s): F(SCB,0) F(SCB,1) F(SCB,2))

Fixed function block and pin placement:

   P1[1]: Pin_2(0)

   F(HALFUAB,0): \VDAC_1:UAB:halfuab\

   F(p4prefcell,0): CyDesignWideVoltageReference

   P4[1]: Pin_3(0)

   F(CLK_GEN,0): ClockGenBlock

   F(OA,2): \VDAC_1:OUTBUFFER:cy_psoc4_abuf\

   P0[4]: Pin_1(0)

   P1[2]: Pin_4(0)

E2055: An error occurred during placement of the design.

0 Likes
1 Solution
lock attach
Attachments are accessible only for community members.
8 Replies
Bob_Marlowe
Level 10
Level 10
First like given 50 questions asked 10 questions asked

Can you please post your complete project so that we all can have a look at all of your settings. To do so, use

Creator->File->Create Workspace Bundle (minimal)

and attach the resulting file.

Bob

0 Likes
lock attach
Attachments are accessible only for community members.

Here it is

0 Likes

Your UART_! component is not for the selected chip. Delete the UART and place a new one onto the topdesign.

Bob

0 Likes
lock attach
Attachments are accessible only for community members.

That doesn't fix anything. Tried that in the project i already attached and the one I started from scratch (which I will attach here),  just laid the components and tried to build it. Always gives back the same error. I tried updating components but it doesn't help. Once i remove the DMA block project can build successfully. 

0 Likes
lock attach
Attachments are accessible only for community members.

Try this one.

Bob

Thanks, now it works.

What did you change to make it work?

0 Likes

The DMA trigger must be connected to a compatible signal, I choose PWM ov and not the PWM line signal.

Bob

lock attach
Attachments are accessible only for community members.

Hi,

so I kind of went with another way of implementing the modulator, but now i am wondering how does DMA transfer to component_block (for ex. UART or IDAC or VDAC) work and basically how to set up DMA for a specific task?

Let's say i have a PWM which generates a pulse on overflow, and I am using that pulse as a trigger for a DMA transfer.  (project PWM_DMA_trigger)

DMA would be transferring bytes from an array in memory to UART and then UART would send that data to PC and I would see it displayed on the terminal.

But DMA doesn't transfer anything (as far as I can see), even when I trigger it manually via DMA_Trigger();

DMA is initialized via DMA_Start( (void*)array, (void*) UART_TX_FIFO_WR_PTR );

Since there is basically no information (or examples) about DMA to UART_tx for my PSoC kit in both DMA and UART documentation, and DMA wizard is not available for it, I am wondering how should I initialize the DMA?

And here is another project using 2 IDAC7s (named 2PWM), where both DMA's tasks  would be to transfer data from an array to IDAC on an overflow pulse from a PWM.

I could probably solve it with interrupts, but that would take too much time since I'm a beginner.

Thanks

0 Likes