Hi, I'm found two approaches to implements an interrupt handler on sdcc, but none is working here.
The first one is this: void timer_intr() interrupt 0 { LED_PIN ^= 1; INTCONbits.T0IF = 0; } But when compiling I get this error: sdcc -mpic16 -p18f2680 -V -Wl-c -I/home/alan/pic/inte/ -ointe.hex inte.o message: using default linker script "/usr/share/gputils/lkr/18f2680.lkr" error: multiple sections using address 0 So looking at inte.asm file we see: ;-------------------------------------------------------- ; interrupt vector ;-------------------------------------------------------- ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- ; ; Starting pCode block for absolute section ; ;----------------------------------------- S_inte_ivec_0x0_timer_intr code 0X000000 ivec_0x0_timer_intr: GOTO _timer_intr ; I code from now on! ; ; Starting pCode block S_inte__main code _main: ; .line 82; inte.c RCONbits.IPEN = 1; BSF _RCONbits, 7 ; .line 85; inte.c INTCONbits.GIEH = 1; BSF _INTCONbits, 7 ; .line 88; inte.c INTCONbits.T0IE = 1; BSF _INTCONbits, 5 Really the _timer_intr is not placed at 0x000008 but 0X000000. The second approach is this: DEF_INTHIGH(high_int) DEF_HANDLER(SIG_TMR0, _tmr0_handler) END_DEF SIGHANDLER(_tmr0_handler) { LED_PIN ^= 1; INTCONbits.T0IF = 0; } Now the compilation goes fine and the interrupt handle address is placed at 0x000008. But the timer0 is not generating interruptions for me. I'm sending my file below. What is the right solution to fix this problem? Cheers, Alan #include <pic18f2680.h> #include <signal.h> // for interrupt // ------------------------------------------------ // change these if you're wiring the LED to other pin #ifndef LED_TRIS #define LED_TRIS TRISAbits.TRISA0 #endif #ifndef LED_PIN #define LED_PIN PORTAbits.RA0 #endif // ------------------------------------------------ // configuration for PIC18F2680 // xtal based, PLL enabled (for xtal to max 10 MHz, for higher xtal freqencies use _OSC_HS_1H ) code char at __CONFIG1H _conf1 = _OSC_HS_1H & //_OSC_HSPLL_1H & _IESO_OFF_1H & _FCMEN_ON_1H; code char at __CONFIG2L _conf2 = _BOREN_BOHW_2L & _BORV_1_2L; // 4.3 V code char at __CONFIG2H _conf3 = _WDTPS_1_2H & _WDT_OFF_2H; code char at __CONFIG3H _conf4 = _MCLRE_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H; code char at __CONFIG4L _conf5 = _LVP_ON_4L & _XINST_OFF_4L & // extended instruction set off => if enabled, your sdcc compiled programm will not work properly! _STVREN_OFF_4L; code char at __CONFIG5L _conf6 = _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L; code char at __CONFIG5H _conf7 = _CPB_OFF_5H & _CPD_OFF_5H; code char at __CONFIG6L _conf8 = _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L; code char at __CONFIG6H _conf9 = _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H; code char at __CONFIG7L _conf10 = _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L; code char at __CONFIG7H _conf11 = _EBTRB_OFF_7H; DEF_INTHIGH(high_int) DEF_HANDLER(SIG_TMR0, _tmr0_handler) END_DEF SIGHANDLER(_tmr0_handler) { LED_PIN ^= 1; // Clear interrupt flag; INTCONbits.T0IF = 0; } void main() { // Enables priority levels on interrupts RCONbits.IPEN = 1; // Enables high priority interrupts INTCONbits.GIEH = 1; // Enables the TMR0 overflow interrupt INTCONbits.T0IE = 1; //set timer overflow TMR0H = 10; TMR0L = 0; //clear T0CON T0CON = 0; //set prescaler to 1:256 T0CONbits.T0PS0 = 1; T0CONbits.T0PS1 = 1; T0CONbits.T0PS2 = 1; //wait until bit clear while(INTCONbits.T0IF) INTCONbits.T0IF = 0; //timer on T0CONbits.TMR0ON = 1; // set pin to output LED_TRIS = 0; //turn led on LED_PIN = 1; while(1) { } } ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user