Is there a sample I can try? Matt.
On Jan 24, 3:02 pm, [email protected] wrote: > Revision: 1619 > Author: sebastien.lelong > Date: Sun Jan 24 12:01:39 2010 > Log: beta pintools library, tested on jaluino, but not with all > pins...http://code.google.com/p/jallib/source/detail?r=1619 > > Added: > /trunk/include/jal/pintools.jal > > ======================================= > --- /dev/null > +++ /trunk/include/jal/pintools.jal Sun Jan 24 12:01:39 2010 > @@ -0,0 +1,250 @@ > +-- Title: utility functions and procedures to manipulate pins (level, > mode, etc...) > +-- Author: Sebastien Lelong, Copyright (C) 2009, all rights reserved. > +-- Adapted-by: > +-- Compiler: 2.4m > +-- > +-- This file is part of jallib (http://jallib.googlecode.com) > +-- Released under the ZLIB license > (http://www.opensource.org/licenses/zlib-license.html) > +-- > +-- Description: This library provides a set of utility functions and > procedures > +-- to help users manipulating pins. For instance, you can dynamically > access pins > +-- using a specific mapping (RA0 is #0, RB1 is #2, etc...) and act on > levels, mode, > +-- directions, etc... > +-- -- > +-- Using this library requires that array "pintools_map" is first defined. > This array > +-- is composed by elements going by two: > +-- * the first element corresponds to the port letter ("A", "B", ...) > +-- * the second element corresponds to the pin number in this port (0, 1, > 2, ...) > +-- Pins are then accessed according to the index in this array (starting > with 0) > +-- Ex: const byte pintools_map [] = {"A","1", "B","1", "D","3} > +-- This 6 elements (2x3) array specifies that: > +-- * pin #0 corresponds to pin_A1 > +-- * pin #1 corresponds to pin_B1 > +-- * pin #2 corresponds to pin_D3 > +-- > +-- Notes: this library hasn't been fully tested, this is still BETA... > +-- > + > + > +-- Access pin by number and set its level (low/high) > +procedure pintools_set_level(byte in pinnum, bit in level) is > + var byte portmapletter = pintools_map[pinnum*2] > + var byte pinmapnum = pintools_map[pinnum*2+1] > + > + procedure _process_porta() is > + if defined(PORTA) == true then > + if level == high then > + PORTA = PORTA | (1 << pinmapnum) > + else > + PORTA = PORTA & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_portb() is > + if defined(PORTB) == true then > + if level == high then > + PORTB = PORTB | (1 << pinmapnum) > + else > + PORTB = PORTB & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_portc() is > + if defined(PORTC) == true then > + if level == high then > + PORTC = PORTC | (1 << pinmapnum) > + else > + PORTC = PORTC & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_portd() is > + if defined(PORTD) == true then > + if level == high then > + PORTD = PORTD | (1 << pinmapnum) > + else > + PORTD = PORTD & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_porte() is > + if defined(PORTE) == true then > + if level == high then > + PORTE = PORTE | (1 << pinmapnum) > + else > + PORTE = PORTE & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_portf() is > + if defined(PORTF) == true then > + if level == high then > + PORTF = PORTF | (1 << pinmapnum) > + else > + PORTF = PORTF & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_portg() is > + if defined(PORTG) == true then > + if level == high then > + PORTG = PORTG | (1 << pinmapnum) > + else > + PORTG = PORTG & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_porth() is > + if defined(PORTH) == true then > + if level == high then > + PORTH = PORTH | (1 << pinmapnum) > + else > + PORTH = PORTH & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_portj() is > + if defined(PORTJ) == true then > + if level == high then > + PORTJ = PORTJ | (1 << pinmapnum) > + else > + PORTJ = PORTJ & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + -- because we can't refer to port name just as we can't refer to pin > since > + -- these are pseudo-variable, we need to switch over different cases... > + -- Note: there's no such PORTI in PIC.... > + case portmapletter of > + "A" : _process_porta() > + "B" : _process_portb() > + "C" : _process_portc() > + "D" : _process_portd() > + "E" : _process_porte() > + "F" : _process_portf() > + "G" : _process_portg() > + "H" : _process_porth() > + "J" : _process_portj() > + end case > + > +end procedure > + > + > +-- Access pin by number and set its direction (low/high) > +procedure pintools_set_direction(byte in pinnum, bit in direction) is > + var byte portmapletter = pintools_map[pinnum*2] > + var byte pinmapnum = pintools_map[pinnum*2+1] > + > + procedure _process_trisa() is > + if defined(TRISA) == true then > + if direction == input then > + TRISA = TRISA | (1 << pinmapnum) > + else > + TRISA = TRISA & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_trisb() is > + if defined(TRISB) == true then > + if direction == input then > + TRISB = TRISB | (1 << pinmapnum) > + else > + TRISB = TRISB & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_trisc() is > + if defined(TRISC) == true then > + if direction == input then > + TRISC = TRISC | (1 << pinmapnum) > + else > + TRISC = TRISC & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_trisd() is > + if defined(TRISD) == true then > + if direction == input then > + TRISD = TRISD | (1 << pinmapnum) > + else > + TRISD = TRISD & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_trise() is > + if defined(TRISE) == true then > + if direction == input then > + TRISE = TRISE | (1 << pinmapnum) > + else > + TRISE = TRISE & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_trisf() is > + if defined(TRISF) == true then > + if direction == input then > + TRISF = TRISF | (1 << pinmapnum) > + else > + TRISF = TRISF & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_trisg() is > + if defined(TRISG) == true then > + if direction == input then > + TRISG = TRISG | (1 << pinmapnum) > + else > + TRISG = TRISG & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_trish() is > + if defined(TRISH) == true then > + if direction == input then > + TRISH = TRISH | (1 << pinmapnum) > + else > + TRISH = TRISH & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + procedure _process_trisj() is > + if defined(TRISJ) == true then > + if direction == input then > + TRISJ = TRISJ | (1 << pinmapnum) > + else > + TRISJ = TRISJ & (0b_1111_1111 ^ (1 << pinmapnum)) > + end if > + end if > + end procedure > + > + > + case portmapletter of > + "A" : _process_trisa() > + "B" : _process_trisb() > + "C" : _process_trisc() > + "D" : _process_trisd() > + "E" : _process_trise() > + "F" : _process_trisf() > + "G" : _process_trisg() > + "H" : _process_trish() > + "J" : _process_trisj() > + end case > +end procedure > + -- You received this message because you are subscribed to the Google Groups "jallib" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/jallib?hl=en.
