RasPi GPIO driver

sarraciro sarraciro at yahoo.it
Sun Oct 20 23:20:48 UTC 2013


My first impression is  that the solution 1. is the more suitable for
all purposes...
but 1.+3. could be a good final solution (imho) .... the support for
posix is great feature for open-source community.
With 1. solution we can compile C code with a reduced development
environment (for example without posix... ---disable=posix flag in build
process... I presume)... I don't think that is possible with Pierre's
driver (correct me if I'm wrong). Imho I think that 1. solution is also
more readable for a most wide number of developers.

--
RC

Il giorno dom, 20/10/2013 alle 18.43 -0400, Alan Cudmore ha scritto:
> We can certainly read and write GPIO pins without POSIX support. I think 
> Pierre was trying to create a standard driver for GPIO that might be 
> expanded into a generic GPIO interface for all BSPs.
> 
> The code in Pierre's driver has the basic macros and defines to do the 
> GPIO reads and writes. It could be used without the driver.
> 
> But this is a good time to bring this up:
> What should the Raspberry Pi GPIO support look like in the BSP?
> 1. Simple direct reads and writes through macros or functions?
> 2. A driver such as Pierre's
> 3. Or a combination of both: Supply the driver and defines/macros and 
> allow the user to decide what to use?
> 
> Alan
> 
> 
> 
> On 10/20/2013 6:19 PM, sarraciro wrote:
> > Hi Alan,
> > yes I've tested it too and work properly...
> > for compile using your rki-project makefile (as starting point) I had to
> > add the POSIX support in the makefile...(RTEMS_HAS_POSIX_API = yes after
> > paths for RTEMS tools and RTEMS BSP).
> > But ... it use posix support ... There is another way?? like ChibiOS ???
> >
> > I've read an article about minimum constrains to compile C code in bare
> > metal OS ...
> > I think the solution is something like this:
> >
> > /* mmio.h - access to MMIO registers */
> >   
> > #ifndef MMIO_H
> > #define MMIO_H
> >   
> > #include <stdint.h>
> >   
> > // write to MMIO register
> > static inline void mmio_write(uint32_t reg, uint32_t data) {
> >      uint32_t *ptr = (uint32_t*)reg;
> >      asm volatile("str %[data], [%[reg]]"
> > 	     : : [reg]"r"(ptr), [data]"r"(data));
> > }
> >   
> > // read from MMIO register
> > static inline uint32_t mmio_read(uint32_t reg) {
> >      uint32_t *ptr = (uint32_t*)reg;
> >      uint32_t data;
> >      asm volatile("ldr %[data], [%[reg]]"
> > 		 : [data]"=r"(data) : [reg]"r"(ptr));
> >      return data;
> > }
> >   
> > #endif // #ifndef MMIO_H
> >
> > anyone can confirm or disagree with this?
> > The ": :" or ":" are not C operators true?? sounds like C++?
> >
> > --
> > RC (popovich)
> >
> >
> > Il giorno dom, 20/10/2013 alle 18.05 -0400, Alan Cudmore ha scritto:
> >> There is an RTEMS Rpi GPIO driver here:
> >> https://github.com/pficheux/raspberry_pi/tree/master/RTEMS/gpio_driver
> >> I have tested this, and it works.
> >>
> >> Simon, I will definitely check out your driver when you submit it.
> >>
> >> Alan
> >>
> >> On 10/20/2013 5:57 PM, sarraciro wrote:
> >>> Thank you Simon for your prompt reply... sure that I'm interested!
> >>> I'll wait for the patch! but also I'm trying to learn (understand!?!)
> >>> how to write  a simple driver for RTEMS... for other future use of a
> >>> custom drivers.
> >>> regards
> >>>
> >>> --
> >>> RC
> >>>    
> >>> Il giorno dom, 20/10/2013 alle 21.32 +0000, williamssimonp at gmail.com ha
> >>> scritto:
> >>>> I am testing one as we speak, if you’re interested.  Should be ready
> >>>> to submit the patch about mid-week.
> >>>>    
> >>>> Regards
> >>>>    
> >>>> Simon
> >>>>    
> >>>> Sent from Windows Mail
> >>>>    
> >>>> From: sarraciro
> >>>> Sent: ‎Sunday‎, ‎20‎ ‎October‎ ‎2013 ‎22‎:‎28
> >>>> To: rtems-users at rtems.org
> >>>>    
> >>>> Hi all,
> >>>> I'm trying to write a simple driver to use raspberry pi gpio.
> >>>> I've found some examples for the POSIX approach (& I tried it with
> >>>> success) but I'm more interesting to pure C solution.
> >>>> I read the RTEMS's documentation but it's too general (for my
> >>>> know-how) ... and  I've read the BCM2835 datasheet for register
> >>>> addresses ...  I understood the relevance to use the pointers for
> >>>> access
> >>>> to the memory...but I'm stucking until now I don't understand how to
> >>>> move on...
> >>>> Any suggestions or lectures for understand how to complete the task?
> >>>> thank you
> >>>> rc
> >>>>
> >>>> _______________________________________________
> >>>> rtems-users mailing list
> >>>> rtems-users at rtems.org
> >>>> http://www.rtems.org/mailman/listinfo/rtems-users
> >>>>
> >>>
> >>> _______________________________________________
> >>> rtems-users mailing list
> >>> rtems-users at rtems.org
> >>> http://www.rtems.org/mailman/listinfo/rtems-users
> >
> >
> > _______________________________________________
> > rtems-users mailing list
> > rtems-users at rtems.org
> > http://www.rtems.org/mailman/listinfo/rtems-users
> 






More information about the users mailing list