I'm currently developing a small os for my TS7250 as a course project
and i thought that it would be nice to do something like this.
I have come to the conclusion that using interrupts for this only messes
things up.
Reason 1)
I am using the 8pin matrix keypad from TS and i have used 4 pins as
output and 4 as input. The four outputs are supposed to sink the four
inputs which works nicely without any pullups. I thought it would be
nice to set all outputs to zero and wait for a change on some of the
pins to go low (or high again) before scanning the keybord. This
approach only allows me to react on change from one key of each row at a
time so pushing more than one key at a time does not work with this
setup. Polling each 5 ms would allow me to react on a least 2 keys and
at most 4 keys at once depending on which keys are pressed.
Reason 2)
I'm getting spurious interrupts when i disable and re enable the
interrupts for the GPIO (and yes, i have read the documentation for the
EP9302 and i'm using the procedure suggested there). I was trying to
program the VIC on my TS board to let the GPIO be a fast interrupt that
had precedence over the usual interrupt source but right now everything
is a mess. I guess you wont be running in to this one though since
you're not developing an entire OS.
Regards
Per Öberg
David Farrell wrote:
> I'm not sure I would do this the same way. Why Interrupts? how soon do
> you need to respond to the key? Pthreads run fine on TS-XXXX, create
> a separate thread to output row and read columns.
> If you need interrupts, stepping to the next row should disable the
> drive of the current (pressed) key so should reduce the time you need
> to wait for debounce, you may not even need to disable the interrupt.
> Be sure to have pullups on the columns so un-driven return to
> inactive, only active row would be driven low. DO as little as
> possible in the isr.
>
> --- In "bdon003" <> wrote:
>> I am using the ts-7300 for my senior design project, and I am
>> preparing to write a Linux driver for it. Everything on the board is
>> pretty much how I got it, same kernel and everything. I need to hook
>> up a 3x4 Matrix Keypad to the board and have it send an interrupt when
>> a key has been pressed. I am going to connect the three column data
>> lines from the keypad to interrupt-enabled I/O pins on one of the
>> headers, and then the row data lines will be connected to the same
>> header but without interrupts enabled. Will I need to worry about
>> debounce control inside the handler? What I obviously don't want is
>> more than one interrupt to be sent for only one key press. I am still
>> doing some more reading on drivers but my plan is:
>> 1. Disable interrupts associated with the keypad
>> 2. Read from the header what key was pressed and store it in the next
>> cell of an array
>> 3. Signal that a tasklet needs to be run to do the overall
>> processing/checking of the entered code so far
>> 4. Increment the counter keeping track of the next available cell in
>> the array
>> 5. Re-enable the disabled interrupts
>>
>> Will this solve my problem? It seems that if the time it takes for
>> the key to settle is longer than the time it takes to do those five
>> steps, then I would need to do some adjusting. What is a better way
>> to do this? Thanks for any help
>>
>
>
>
> ------------------------------------
>
> Yahoo! Groups Links
>
>
>
--
Per Öberg, Ph.D. Student
Address: Division of Vehicular Systems
Department of Electrical Engineering
Linköpings universitet
581 83 Linköping, SWEDEN
Phone: +46 (0)13-28 23 69
e-mail:
PGP: http://www.fs.isy.liu.se/~oberg/0x61984A9D.asc
------------------------------------
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/ts-7000/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/ts-7000/join
(Yahoo! ID required)
<*> To change settings via email:
<*> To unsubscribe from this group, send an email to:
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
oberg.vcf
Description: Vcard
|