From: Johannes S. <js...@co...> - 2003-02-03 16:55:40
|
Hi, The attached patch adds a #pragma NOIV to sdcc, which prevents sdcc from generating irq vector table entries for functions declared as "interrupt". The patch is agains sdcc CVS from a few days ago. Here's why we need it: We are writing a firmware for a DVB-T - USB receiver based on the Cypress EZ-USB FX2 (DVB == digital video broadcast). All software and hardware schematics are GPLed and hosted on linuxtv.org CVS (CVS module dvb-hw). The EZ-USB FX2 has a 8051 core derived from the Dallas DS80C320, plus FIFOs and interface hardware for handling USB-2.0 high speed data transfers. To reduce processing overhead in the USB irq handler for finding out which of the 27 possible sources caused the USB irq, the EZ-USB FX2 has an autovector feature which works like this: - in the irq vector table there is a LJMP 0xHHLL - the hardware replaces the low byte of the jump target address with an autovector number (which is a multiple of 4) - somewhere, beginning on a page boundary, there is a secondary irq vector table with LJMPs to the real irq handlers; this table is set up manually; the high byte of this table's address is put in the LJMP in the irq vector table The individual USB irq handlers still have to be declared as #pragma NOIV void foobar_irq(void) interrupt 0; The #pragma NOIV is modeled after the Keil tool's 8051 C compiler autovector support from the EZ-USB FX2 developer's kit. http://www.keil.com/dd/chip/3205.htm You can get the sources for our project (there isn't much software yet, just some basics) via CVS from cvs -d :pserver:ano...@cv...:/cvs/linuxtv co dvb-hw (login with empty password). See also http://linuxtv.org/cgi-bin/cvsweb.cgi/. The EZ-USB FX2 data sheet is available online from http://www.cypress.com/cfuploads/img/products/38-08012.pdf (~500K) http://www.cypress.com/cfuploads/support/developer_kits/FX2_TechRefManual.pdf (~5.5MB) I would be glad if you would accept my patch for sdcc. Or if you have better ideas about how to support the autovector irqs, please let me know. Best regards, Johannes |