6 Replies Latest reply on Jun 9, 2014 1:05 AM by JoMe_264151

    UART Interrupt on 5LP


       I am having trouble figuring out how to set up the UART Receive interrupt. I managed to get gthe example TX and RX code and modified for TX and RX ok but I need to do the following and not sure how to set this up and how to access variables in the interrupt.


      I have 2 applications. The first is as follows:


      State Machine within RX interrupt as each Byte is received. 


      The RX pin is continuously toggling. A leading and sequence of bytes marks start of packet so I need to discard unwanted bytes until the lead-in sequence is detected and then gather bytes into a buffer until the correct number of bytes is received.


      Do I just set the RX buffer to minimum so the program generates interrupt on each RX byte and then put my state machine into UART_RX.C ?


      The second application is simpler in that it can receive the entire packet bvefore I need to process anything. But this one I want a timer to be reset every time a byte arrives and then 20ms after last byte the timer will expire and I set a flag to indicate DatainBuf. Alternately I can change packet structure if the PSOC has some sort of standard component tha can use XON/XOFF for packet reception.


      The packet lengty is dynamic.



        • 1. Re: UART Interrupt on 5LP

          Interrupt handling is done quite easy in the PSoC world:


          Drop an isr-component and connect it to the interrupt signal. Ude declarations as


          CY_ISR_PROTO(MyHandler); // Prototype declaration










          // Clear source of interrupt (Check UART state, read off character)




          I prefer not to make changes in the generated files although there are clearly marked places where I might do so. But a switch to a different device might spoil my changes.


          Your quest for constantly monitoring a signal and reacting on a initial marker is not as easy. You may watch your line with some additional logic (Timer / Counter) and ignore all UART-Rx inputs until initial marker found.





          • 2. Re: UART Interrupt on 5LP

             Thanks Bob,


            I was trying to play with code in the created "c" and "h" files and then realised it is easy to set up a isr handler in main.c and simply declare the vector to it and away we go. This technology is real "cool" compared the the bits and bytes and poking around I have been doing with PIC micros. It is great that much of what I want to do is handled by API and I don't have to dig down into registeres.


            I do have one other question for you. I was looking for a one-wire component for reading DS1820 Temperature sensors and managed to get a copy of a project from Victor which has a component in a catalog (not the main catalog) of his project.


            How can I get the catalog containing the 1-Wire component into the "Cypress" catalog (his is named "default" and appears as another Tab".  I want to be able to create a new project and use that component.





            • 3. Re: UART Interrupt on 5LP

              Because with every new version of Creator the cataög gets updated I would suggest to do as following:


              Create a folder that contains all your own or foreign created components.


              When a project needs one of those, import it.


              To maintain the folder the component gets inserted in, have a look into your "Component Author guide" that came with the Creator- installation





              • 4. Re: UART Interrupt on 5LP

                By the way, there is a saying "Thinking PSoC" which tries to explain that there is a huge difference between designing with PSoCs and other embedded micros (PICs for instance)




                Happy coding!



                • 5. Re: UART Interrupt on 5LP

                   Thanks again for the help Bob, I appreciate you taking the time to consider my questions and answer them.


                  I did as you said and managed to import Victor's 1-wire component and realize it will need some "porting" to 5LP as it references <devices.h> (which does not seem to be used by 5LP?) and the syntax for setting and clearing digital pins is different. I played arounbd and found how to edit the component but there are quite a few changes needed.


                  Last night I had a play and started getting simple things like interrupt driven timer and buttons, Leds and LCD etc running ok.


                  I still have a bit of black area when it comes to the UART as you can attach an ISR to it but it also has an RX interrupt feature. I am not sure if I need to attach the isr component each time and write a handler in code for isr or whether I can access the RX interrupt directly. I  attempted putting code in the the rxint.c that was created but kept having issues with scope of variables.


                  Next, I will watch the videos dealing with the catalog and learn how to write my own component.


                  I see that if you try to alter the files created after a compile they will be written over next time you compile (which is an excellent feature as it keeps your components safe and resuable) . 


                  In the meantime (before i have learned how to write my own components), can I simply write a "c" and "h" file and "#include" it to my project in "main.c" and it will be complied ok like a traditional compiler process? 


                  I agree with your comment regarding PSOC thinking. I must stop thinking in terms of traditional microcontroller and registers and think in terms of re-routable resources , API's and resuable components. It is hard to "let go" and trust the creator to implement the underlying processes, but I LOVE it! I don't know why I have not been exposed to this technology previously?

                  • 6. Re: UART Interrupt on 5LP

                    The process of creating your own component can turn out to be something time-consuming at the first try. There can be a lot to learn since a PSoC's capabilities do not end at the wiring of some 100 pre-defined components. A PSoC5 contains 24 "Universal Building Blocks" (UDBs) which you can program using a "Hardware Description Language" (HDL). Every UDB contains an "Arethmetic and Logical Unit" (ALU) that can be programmed to perform some operations, two "First-In-First-Out" (FIFOs) and a bunch of logic. I can assure you that it is not done just by learning the abbreviations.


                    When I first got in contact with PSoCs I started learning to use all the components by reading (and understanding, which sometimes is not as easy) the datasheets and by getting them to work.


                    So take your time.





                    • 7. Re: UART Interrupt on 5LP

                      Here is a link to something I wrote www.cypress.com/. This component consists mostly of programming, very few hardware. Needs a bit of update.