I get these UDB errors while using three UART blocks, one timer and one bootloader block..

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

cross mob
Anonymous
Not applicable

Hi,

   

In my project I am using the CY8CKIT-049-42XX prototype kit, my program consists of three UART blocks, one timer block, and one bootloader blocks.

   

One UART block connects to a RN171 wifi module, while the other to a serial TTL camera, the third block connects to PC (programmer USB port).

   

When building I get these error...

   

"Resource limit: Maximum number of UDB Macrocells exceeded (max=32, needed=43)."

   

"Resource limit: Maximum number of UDB Unique Pterms exceeded (max=64, needed=87)."

   

"Resource limit: Maximum number of UDB Datapath Cells exceeded (max=4, needed=5)."

   

"Resource limit: Maximum number of UDB Status Cells exceeded (max=4, needed=6)."

   

 

   

Please can anyone tell me how I can solve this...I hope the hardware does not need to be changed.

   

Please see attached workspace bundle.

   

 

   

thanks

   

a

0 Likes
9 Replies
Bob_Marlowe
Level 10
Level 10
First like given 50 questions asked 10 questions asked

You should replace one of your UARTs with an SCB-version. This will reduce the number of UDBs needed.

   

Additionally think about using the ARM M0 - internal SysTick Timer (Look into the "System Reference Guide" from Help-menu) which uses NO Cypress resources or use a TCPWM configured as timer which will save an UDB as well.

   

 

   

Bob

0 Likes
Anonymous
Not applicable

thanks for the help,

   

I will make those changes in my project, what is the maximum no. of UDBs available in the ARM M0 ? Does M1 have more ??

   

just for my information...

   

 

   

thanks

   

a

0 Likes
Bob_Marlowe
Level 10
Level 10
First like given 50 questions asked 10 questions asked

Neither ARM M0 nor ARM M1 have got any UDBs. The PSoCs have got them:

   

PSoC4200  4 UDBs

   

PSoc5   24 (!) UDBs

   

PSoC4100 and 4000 None

   

 

   

Bob

0 Likes
Anonymous
Not applicable

Having issues loading PsoC 3. keeps locking up.

0 Likes
Anonymous
Not applicable

Having issues loading PsoC 3. keeps locking up.

0 Likes
Bob_Marlowe
Level 10
Level 10
First like given 50 questions asked 10 questions asked

Welcome in the forum, Jon!

   

Not your thread, Jon. Better post that in the "Software" forum.

   

Which Creator? 3.2?? De-installation and re-install already tried? Which OS are you using?

   

 

   

Bob

0 Likes
ETRO_SSN583
Level 9
Level 9
250 likes received 100 sign-ins 5 likes given

Systick Ref Material -

   

 

   

http://www.cypress.com/?id=4&rID=94607     PSOC 4 Systick

   

http://www.cypress.com/?docID=49253     AN90799 (Systick as well

   

 

   

Regards, Dana.

0 Likes
Anonymous
Not applicable

Thanks for the help, I got the SysTick working now, and I removed the timer block, so now the schematic has one SCB block (for PC communication-essential for debugging and programming) and one UART block for communicating to the RN171 module, however when I add another UART block I again get the "Resource limit: Maximum number of UDB Macrocells exceeded...." error. 

   

I had this possible solution in mind....

   

Is it possible to connect the RX pins of the serial devices to a virtual mux module (two RX inputs to Virtual Mux, and output to the Rx pin of the UART block), and then use the program to select the input to be read ??  On the TX side I see that there is no equivalent virtual de-mux, so I have to use a demux for this ...

   

Is the above described scenario possible ?? also how to use receive interrupts, with the mux ?? 

   

I do need interrupts as data can arrive on the serial peripherals at any given time, and the processor must be ready to process it. Perhaps an interrupt component connected to another pin (there will be one interrupt pin for each module) ??

   

So when the first bit arrives the interrupt is triggered and the program selects the input pin that triggered the interrupt, the program can then do a GetChar() and read all the incoming data...then select the appropriate output channel on the demux, then print out the data..

   

Please give your opinions...whether such a scenario is possible?? Or maybe there is a simpler solution..

   

 

   

thanks

   

a

0 Likes
Bob_Marlowe
Level 10
Level 10
First like given 50 questions asked 10 questions asked

A virtual mux is what the name says: it is virtual, ie. not a mux. You just specify at build-time which of the mux paths shall be taken, not at run-time.

   

I cannot see yet that you are at the end of PSoC4 resources. Your PSoC has got 2 SCB communication blocks which you could use for 2 different UARTS. As an extra you may use an additional UDB-based UART resulting in three (3)  full UARTs. Consider, there is a software Tx only UART and you may save resources when using a half-duplex UDB interface.

   

See attached project.

   

 

   

Happy coding

   

Bob

0 Likes