This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
For a I2C implementation, have a look at the atmel at91 library. It works nice, although you have to adapt it for generic I2C. (currently it works with eeproms, wich have a start-writeaddress-restart-readdata-stop scheme) On my artmel arm 66MHz core I got a 20khz I2C max. under ecos. After rewriting the interrupt code I get 80Khz with a C handler. For the atmel AT91 family you will find the modified code attached. Compare the code to the original files to see what is changed, you will need all the code in AT91_misc.c and from vector.s only the FIQ, IRQ and ECOS_IRQ code. (and the extra stack space below). To use the code, do the following: Acknowlage your interrupt with *(volatile unsigned long*)(0xFFFFF130) = 0; // mag elke waarde zijn. acknowlage interrupt controller (dummy write to register) in stead of cyg_drv_interrupt_acknowledge(vector); Register your interrupt under ecos the normal way AND do a: *(volatile unsigned long*)(0xFFFFF080+5*4) = (unsigned long) <your isr routine>; // (for timer int #5) In your interrupt handler, return a CYG_ISR_CALL_DSR to call the dsr routine (slow!) in where you can set flags, or return 0 (or CYG_ISR_HANDLED) to end the interrupt. I do like to hear comments or improvements on the code if you decide to use it. Unfortunate, this code is atmel specific as it uses the AIC interrupt controller. Eric
Attachment:
vectors.S
Description: Binary data
Attachment:
at91_misc.c
Description: Binary data
-- Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos and search the list archive: http://sources.redhat.com/ml/ecos-discuss
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |