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

    UART Interrupt on 5LP

    user_343349849

       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.

         

      Thanks

        • 1. Re: UART Interrupt on 5LP
          user_1377889

          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

             

          isr_StartEx(MyHandler);

             

           

             

          CY_ISR(MyHandler()

             

          {

             

          // 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.

             

           

             

          Bob

          • 2. Re: UART Interrupt on 5LP
            content.librarian

             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.

               

            Cheers

               

            David

            • 3. Re: UART Interrupt on 5LP
              user_1377889

              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

                 

               

                 

              Bob

              • 4. Re: UART Interrupt on 5LP
                user_1377889

                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!

                   

                Bob

                • 5. Re: UART Interrupt on 5LP
                  user_343349849

                   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
                    user_1377889

                    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.

                       

                     

                       

                    Bob

                    • 7. Re: UART Interrupt on 5LP
                      user_1377889

                      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.

                         

                       

                         

                      Bob