From: Bastiaan v. K. <b.v...@vd...> - 2008-10-13 12:54:56
|
Hi, I'm working on a project using the 18f4520, and i've ran into a problem. It seems that passing an array to a function results in garbage being read in the receiving function. It seems as if the receiving function is using the wrong address to read from! I've fiddled with the stack, but this didn't seem to influence the problem. I'm now using the latest SDCC snapshot (2.8.4 #5250 (Oct 12 2008)) and gputils 0.13.6 on Linux. Tried SDCC 2.8.0 with similair results (the garbage output was different, but still garbage..) Also tried to build this on windows XP on another machine, using the same SDCC snapshot and gputils version. No change there. Some code demonstrating this issue is attached below. I've compiled this using sdcc -mpic16 -p18f4520 main.c and loading the resulting main.hex file using and ICD2 programmer from MPLAB (on the Windows XP machine). Output on the uart @ 19200 baud should be "[????]", but I get "[??" followed by a lot of garbage Hope anyone can give me some pointers here! Thanks in advance, -Bastiaan van Kesteren --------------the code:-------------- #include <pic18fregs.h> #include <usart.h> #include <stdio.h> /* Initialise a stack of 255 bytes at RAM address 0x300 */ #pragma stack 0x300 0xFF /* Baudrate = FOSC/(16(X+1)): 25 = 19200 @ 8MHz */ #define BAUDRATE 25 /* Oscillator */ code char at __CONFIG1H _conf0 = _OSC_INTIO67_1H; /* Watchdog */ code char at __CONFIG2H _conf2 = _WDT_OFF_2H; /* Power up timeout and brown out detection enabled */ code char at __CONFIG2L _conf1 = _PWRT_ON_2L & _BOREN_ON_2L; /* MCLR settings */ code char at __CONFIG3H _conf3 = _MCLRE_OFF_3H; /* Low voltage programming disabled, Stack Overflow Reset enabled */ code char at __CONFIG4L _conf4 = _LVP_OFF_4L & _STVREN_ON_4L; /* Code protection disabled */ code char at __CONFIG5L _conf5 = _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L; /* EEPROM read protection disabled, code protection boot disabled */ code char at __CONFIG5H _conf6 = _CPD_OFF_5H & _CPB_OFF_5H; /* Table write protection disabled */ code char at __CONFIG6L _conf7 = _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L; /* EEPROM write protection disabled, table write protect boot disabled, config write protect disabled */ code char at __CONFIG6H _conf8 = _WRTD_OFF_6H & _WRTB_OFF_6H & _WRTC_OFF_6H; /* Table read protect disabled */ code char at __CONFIG7L _conf9 = _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L; /* Table read protect boot disabled */ code char at __CONFIG7H _conf10 = _EBTRB_OFF_7H; void serial_init() { // BAUDCON - baudrate generation control Register BAUDCON = 0; // 8 bit baudrate generator, auto-baud disabled // SPBRG - Baud Rate Generator Register SPBRG = BAUDRATE; // BRGH - High Baud Rate Select Bit TXSTAbits.BRGH = 1; // (1 = high speed) // SYNC - USART Mode select Bit TXSTAbits.SYNC = 0; // (0 = asynchronous) // TRISC - Tri-state Data Direction Register for port C // RC6 - 6th pin of port C - used for Serial Transmit // RC7 - 7th pin of port C - used for Serial Receive TRISCbits.TRISC6 = 0; // (0 = pin set as output) TRISCbits.TRISC7 = 1; // (1 = pin set as input) // SPEN - Serial Port Enable Bit RCSTAbits.SPEN = 1; // (1 = serial port enabled) // TXIE - USART Transmit Interupt Enable Bit PIE1bits.TXIE = 0; // (0 = disabled) // RCIE - USART Receive Interupt Enable Bit PIE1bits.RCIE = 1; // (1 = enabled) // TX9 - 9-bit Transmit Enable Bit TXSTAbits.TX9 = 0; // (0 = 8-bit transmit) // RX9 - 9-bit Receive Enable Bit RCSTAbits.RX9 = 0; // (0 = 8-bit reception) // CREN - Continuous Receive Enable Bit RCSTAbits.CREN = 1; // (1 = Enables receiver) // TXEN - Trasmit Enable Bit TXSTAbits.TXEN = 1; // (1 = transmit enabled) stdout = STREAM_USER; } void init() { /* Internal oscillator @ 8MHz */ OSCCON &= 0x8F; OSCCON |= 0x70; /* Disable watchdog */ WDTCONbits.SWDTEN = 0; } void test_puts(data char *str) { usart_putc(str[0]); while( usart_busy() ); } void main(void) /* The main function: Initialises the system, and starts all interrupt based tasks. */ { char tekst[2]; tekst[0]='?'; tekst[1]=0; init(); serial_init(); while(1) { usart_putc('['); while( usart_busy() ); /* (1): Send single character; works */ usart_putc('?'); while( usart_busy() ); /* (2): Send characters from array; works */ usart_putc(tekst[0]); while( usart_busy() ); /* (3): Pass array to function, which sends them as (2) does; not working, sending garbage */ test_puts(tekst); while( usart_busy() ); /* (4): send string using the library-functions; not working, infinite loop */ usart_puts("?"); while( usart_busy() ); usart_putc(']'); while( usart_busy() ); } } |
From: Bastiaan v. K. <b.v...@vd...> - 2008-10-13 13:57:25
|
Hi, Little follow-up on my own post. Tried the same code on the 18f452 (with some small changes to the config to make it run). Thistime using SDCC 2.7.0, as the 2.8 snapshot i was using complained about missing _usart functions. It runs as it should. Compiling the code for the 18f4520 using SDCC 2.7.0 still doesn't work. Any ideas? Thanks, -Bastiaan van Kesteren On Monday 13 October 2008 14:39:19 Bastiaan van Kesteren wrote: > Hi, > > I'm working on a project using the 18f4520, and i've ran into a problem. It > seems that passing an array to a function results in garbage being read in > the receiving function. > > It seems as if the receiving function is using the wrong address to read > from! I've fiddled with the stack, but this didn't seem to influence the > problem. I'm now using the latest SDCC snapshot (2.8.4 #5250 (Oct 12 2008)) > and gputils 0.13.6 on Linux. Tried SDCC 2.8.0 with similair results (the > garbage output was different, but still garbage..) Also tried to build this > on windows XP on another machine, using the same SDCC snapshot and gputils > version. No change there. > > Some code demonstrating this issue is attached below. I've compiled this > using > > sdcc -mpic16 -p18f4520 main.c > > and loading the resulting main.hex file using and ICD2 programmer from > MPLAB (on the Windows XP machine). > > Output on the uart @ 19200 baud should be "[????]", but I get "[??" > followed by a lot of garbage > > Hope anyone can give me some pointers here! > > Thanks in advance, > -Bastiaan van Kesteren > > --------------the code:-------------- > > #include <pic18fregs.h> > #include <usart.h> > #include <stdio.h> > > /* Initialise a stack of 255 bytes at RAM address 0x300 */ > #pragma stack 0x300 0xFF > > /* Baudrate = FOSC/(16(X+1)): 25 = 19200 @ 8MHz */ > #define BAUDRATE 25 > > /* Oscillator */ > code char at __CONFIG1H _conf0 = _OSC_INTIO67_1H; > > /* Watchdog */ > code char at __CONFIG2H _conf2 = _WDT_OFF_2H; > > /* Power up timeout and brown out detection enabled */ > code char at __CONFIG2L _conf1 = _PWRT_ON_2L & _BOREN_ON_2L; > /* MCLR settings */ > code char at __CONFIG3H _conf3 = _MCLRE_OFF_3H; > /* Low voltage programming disabled, Stack Overflow Reset enabled */ > code char at __CONFIG4L _conf4 = _LVP_OFF_4L & _STVREN_ON_4L; > /* Code protection disabled */ > code char at __CONFIG5L _conf5 = _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & > _CP3_OFF_5L; /* EEPROM read protection disabled, code protection boot > disabled */ code char at __CONFIG5H _conf6 = _CPD_OFF_5H & _CPB_OFF_5H; > /* Table write protection disabled */ > code char at __CONFIG6L _conf7 = _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L > & _WRT3_OFF_6L; /* EEPROM write protection disabled, table write protect > boot disabled, config write protect disabled */ code char at __CONFIG6H > _conf8 = _WRTD_OFF_6H & _WRTB_OFF_6H & _WRTC_OFF_6H; /* Table read protect > disabled */ > code char at __CONFIG7L _conf9 = _EBTR0_OFF_7L & _EBTR1_OFF_7L & > _EBTR2_OFF_7L & _EBTR3_OFF_7L; /* Table read protect boot disabled */ > code char at __CONFIG7H _conf10 = _EBTRB_OFF_7H; > > void serial_init() > { > // BAUDCON - baudrate generation control Register > BAUDCON = 0; // 8 bit baudrate generator, auto-baud disabled > > // SPBRG - Baud Rate Generator Register > SPBRG = BAUDRATE; > > // BRGH - High Baud Rate Select Bit > TXSTAbits.BRGH = 1; // (1 = high speed) > > // SYNC - USART Mode select Bit > TXSTAbits.SYNC = 0; // (0 = asynchronous) > > // TRISC - Tri-state Data Direction Register for port C > // RC6 - 6th pin of port C - used for Serial Transmit > // RC7 - 7th pin of port C - used for Serial Receive > TRISCbits.TRISC6 = 0; // (0 = pin set as output) > TRISCbits.TRISC7 = 1; // (1 = pin set as input) > > // SPEN - Serial Port Enable Bit > RCSTAbits.SPEN = 1; // (1 = serial port enabled) > > // TXIE - USART Transmit Interupt Enable Bit > PIE1bits.TXIE = 0; // (0 = disabled) > > // RCIE - USART Receive Interupt Enable Bit > PIE1bits.RCIE = 1; // (1 = enabled) > > // TX9 - 9-bit Transmit Enable Bit > TXSTAbits.TX9 = 0; // (0 = 8-bit transmit) > > // RX9 - 9-bit Receive Enable Bit > RCSTAbits.RX9 = 0; // (0 = 8-bit reception) > > // CREN - Continuous Receive Enable Bit > RCSTAbits.CREN = 1; // (1 = Enables receiver) > > // TXEN - Trasmit Enable Bit > TXSTAbits.TXEN = 1; // (1 = transmit enabled) > > stdout = STREAM_USER; > } > > void init() > { > /* Internal oscillator @ 8MHz */ > OSCCON &= 0x8F; > OSCCON |= 0x70; > > /* Disable watchdog */ > WDTCONbits.SWDTEN = 0; > } > > void test_puts(data char *str) > { > usart_putc(str[0]); > while( usart_busy() ); > } > > void main(void) > /* > The main function: > Initialises the system, and starts all interrupt based tasks. > */ > { > char tekst[2]; > tekst[0]='?'; > tekst[1]=0; > > init(); > > serial_init(); > > while(1) { > usart_putc('['); > while( usart_busy() ); > > /* (1): Send single character; works */ > usart_putc('?'); > while( usart_busy() ); > > /* (2): Send characters from array; works */ > usart_putc(tekst[0]); > while( usart_busy() ); > > /* (3): Pass array to function, which sends them as (2) does; not > working, sending garbage */ test_puts(tekst); > while( usart_busy() ); > > /* (4): send string using the library-functions; not working, > infinite loop */ usart_puts("?"); > while( usart_busy() ); > > usart_putc(']'); > while( usart_busy() ); > } > } > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge Build the coolest Linux based applications with Moblin SDK & win > great prizes Grand prize is a trip for two to an Open Source event anywhere > in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user |
From: Vaclav P. <vac...@se...> - 2008-10-14 06:59:01
|
Hi Bastian, did you compare generated ASM code for 452 and 4520 ? Are there some differences ? V. > Hi, > > Little follow-up on my own post. > Tried the same code on the 18f452 (with some small changes to the config to > make it run). Thistime using SDCC 2.7.0, as the 2.8 snapshot i was using > complained about missing _usart functions. > > It runs as it should. Compiling the code for the 18f4520 using SDCC 2.7.0 > still doesn't work. > > Any ideas? > > Thanks, > -Bastiaan van Kesteren > > On Monday 13 October 2008 14:39:19 Bastiaan van Kesteren wrote: > > Hi, > > > > I'm working on a project using the 18f4520, and i've ran into a problem. It > > seems that passing an array to a function results in garbage being read in > > the receiving function. > > > > It seems as if the receiving function is using the wrong address to read > > from! I've fiddled with the stack, but this didn't seem to influence the > > problem. I'm now using the latest SDCC snapshot (2.8.4 #5250 (Oct 12 2008)) > > and gputils 0.13.6 on Linux. Tried SDCC 2.8.0 with similair results (the > > garbage output was different, but still garbage..) Also tried to build this > > on windows XP on another machine, using the same SDCC snapshot and gputils > > version. No change there. > > > > Some code demonstrating this issue is attached below. I've compiled this > > using > > > > sdcc -mpic16 -p18f4520 main.c > > > > and loading the resulting main.hex file using and ICD2 programmer from > > MPLAB (on the Windows XP machine). > > > > Output on the uart @ 19200 baud should be "[????]", but I get "[??" > > followed by a lot of garbage > > > > Hope anyone can give me some pointers here! > > > > Thanks in advance, > > -Bastiaan van Kesteren > > > > --------------the code:-------------- > > > > #include <pic18fregs.h> > > #include <usart.h> > > #include <stdio.h> > > > > /* Initialise a stack of 255 bytes at RAM address 0x300 */ > > #pragma stack 0x300 0xFF > > > > /* Baudrate = FOSC/(16(X+1)): 25 = 19200 @ 8MHz */ > > #define BAUDRATE 25 > > > > /* Oscillator */ > > code char at __CONFIG1H _conf0 = _OSC_INTIO67_1H; > > > > /* Watchdog */ > > code char at __CONFIG2H _conf2 = _WDT_OFF_2H; > > > > /* Power up timeout and brown out detection enabled */ > > code char at __CONFIG2L _conf1 = _PWRT_ON_2L & _BOREN_ON_2L; > > /* MCLR settings */ > > code char at __CONFIG3H _conf3 = _MCLRE_OFF_3H; > > /* Low voltage programming disabled, Stack Overflow Reset enabled */ > > code char at __CONFIG4L _conf4 = _LVP_OFF_4L & _STVREN_ON_4L; > > /* Code protection disabled */ > > code char at __CONFIG5L _conf5 = _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & > > _CP3_OFF_5L; /* EEPROM read protection disabled, code protection boot > > disabled */ code char at __CONFIG5H _conf6 = _CPD_OFF_5H & _CPB_OFF_5H; > > /* Table write protection disabled */ > > code char at __CONFIG6L _conf7 = _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L > > & _WRT3_OFF_6L; /* EEPROM write protection disabled, table write protect > > boot disabled, config write protect disabled */ code char at __CONFIG6H > > _conf8 = _WRTD_OFF_6H & _WRTB_OFF_6H & _WRTC_OFF_6H; /* Table read protect > > disabled */ > > code char at __CONFIG7L _conf9 = _EBTR0_OFF_7L & _EBTR1_OFF_7L & > > _EBTR2_OFF_7L & _EBTR3_OFF_7L; /* Table read protect boot disabled */ > > code char at __CONFIG7H _conf10 = _EBTRB_OFF_7H; > > > > void serial_init() > > { > > // BAUDCON - baudrate generation control Register > > BAUDCON = 0; // 8 bit baudrate generator, auto-baud disabled > > > > // SPBRG - Baud Rate Generator Register > > SPBRG = BAUDRATE; > > > > // BRGH - High Baud Rate Select Bit > > TXSTAbits.BRGH = 1; // (1 = high speed) > > > > // SYNC - USART Mode select Bit > > TXSTAbits.SYNC = 0; // (0 = asynchronous) > > > > // TRISC - Tri-state Data Direction Register for port C > > // RC6 - 6th pin of port C - used for Serial Transmit > > // RC7 - 7th pin of port C - used for Serial Receive > > TRISCbits.TRISC6 = 0; // (0 = pin set as output) > > TRISCbits.TRISC7 = 1; // (1 = pin set as input) > > > > // SPEN - Serial Port Enable Bit > > RCSTAbits.SPEN = 1; // (1 = serial port enabled) > > > > // TXIE - USART Transmit Interupt Enable Bit > > PIE1bits.TXIE = 0; // (0 = disabled) > > > > // RCIE - USART Receive Interupt Enable Bit > > PIE1bits.RCIE = 1; // (1 = enabled) > > > > // TX9 - 9-bit Transmit Enable Bit > > TXSTAbits.TX9 = 0; // (0 = 8-bit transmit) > > > > // RX9 - 9-bit Receive Enable Bit > > RCSTAbits.RX9 = 0; // (0 = 8-bit reception) > > > > // CREN - Continuous Receive Enable Bit > > RCSTAbits.CREN = 1; // (1 = Enables receiver) > > > > // TXEN - Trasmit Enable Bit > > TXSTAbits.TXEN = 1; // (1 = transmit enabled) > > > > stdout = STREAM_USER; > > } > > > > void init() > > { > > /* Internal oscillator @ 8MHz */ > > OSCCON &= 0x8F; > > OSCCON |= 0x70; > > > > /* Disable watchdog */ > > WDTCONbits.SWDTEN = 0; > > } > > > > void test_puts(data char *str) > > { > > usart_putc(str[0]); > > while( usart_busy() ); > > } > > > > void main(void) > > /* > > The main function: > > Initialises the system, and starts all interrupt based tasks. > > */ > > { > > char tekst[2]; > > tekst[0]='?'; > > tekst[1]=0; > > > > init(); > > > > serial_init(); > > > > while(1) { > > usart_putc('['); > > while( usart_busy() ); > > > > /* (1): Send single character; works */ > > usart_putc('?'); > > while( usart_busy() ); > > > > /* (2): Send characters from array; works */ > > usart_putc(tekst[0]); > > while( usart_busy() ); > > > > /* (3): Pass array to function, which sends them as (2) does; not > > working, sending garbage */ test_puts(tekst); > > while( usart_busy() ); > > > > /* (4): send string using the library-functions; not working, > > infinite loop */ usart_puts("?"); > > while( usart_busy() ); > > > > usart_putc(']'); > > while( usart_busy() ); > > } > > } > > > > > > ------------------------------------------------------------------------- > > This SF.Net email is sponsored by the Moblin Your Move Developer's > > challenge Build the coolest Linux based applications with Moblin SDK & win > > great prizes Grand prize is a trip for two to an Open Source event anywhere > > in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ > > _______________________________________________ > > Sdcc-user mailing list > > Sdc...@li... > > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > |
From: Bastiaan v. K. <b.v...@vd...> - 2008-10-16 14:11:07
|
Hi, Had to make a working prototype before the end of the week, so switched to a 18f452, which is working fine now. I'm now using SDCC 2.8.4, snapshot from somewhere last week, with my own usart code, since the usart code appears to be missing for the 18f452 when using SDCC 2.8.4 When compiling the same code for the 18f4520, the generated HEX files do show one line different(one-last line of the files), but I suspect that's the configbits line? When comparing the list files, there are no real code differences (besides some register defines, obviously) except the first two config registers. Will make some smaller testcase code/hexfiles and compare those, to see if I can pinpoint this a bit. Thanks for the input sofar, -Bastiaan On Tuesday 14 October 2008 08:58:46 Vaclav Peroutka wrote: > Hi Bastian, > > did you compare generated ASM code for 452 and 4520 ? Are there some > differences ? > > V. > > > Hi, > > > > Little follow-up on my own post. > > Tried the same code on the 18f452 (with some small changes to the config > > to make it run). Thistime using SDCC 2.7.0, as the 2.8 snapshot i was > > using complained about missing _usart functions. > > > > It runs as it should. Compiling the code for the 18f4520 using SDCC 2.7.0 > > still doesn't work. > > > > Any ideas? > > > > Thanks, > > -Bastiaan van Kesteren > > > > On Monday 13 October 2008 14:39:19 Bastiaan van Kesteren wrote: > > > Hi, > > > > > > I'm working on a project using the 18f4520, and i've ran into a > > > problem. It seems that passing an array to a function results in > > > garbage being read in the receiving function. > > > > > > It seems as if the receiving function is using the wrong address to > > > read from! I've fiddled with the stack, but this didn't seem to > > > influence the problem. I'm now using the latest SDCC snapshot (2.8.4 > > > #5250 (Oct 12 2008)) and gputils 0.13.6 on Linux. Tried SDCC 2.8.0 with > > > similair results (the garbage output was different, but still > > > garbage..) Also tried to build this on windows XP on another machine, > > > using the same SDCC snapshot and gputils version. No change there. > > > > > > Some code demonstrating this issue is attached below. I've compiled > > > this using > > > > > > sdcc -mpic16 -p18f4520 main.c > > > > > > and loading the resulting main.hex file using and ICD2 programmer from > > > MPLAB (on the Windows XP machine). > > > > > > Output on the uart @ 19200 baud should be "[????]", but I get "[??" > > > followed by a lot of garbage > > > > > > Hope anyone can give me some pointers here! > > > > > > Thanks in advance, > > > -Bastiaan van Kesteren > > > > > > --------------the code:-------------- > > > > > > #include <pic18fregs.h> > > > #include <usart.h> > > > #include <stdio.h> > > > > > > /* Initialise a stack of 255 bytes at RAM address 0x300 */ > > > #pragma stack 0x300 0xFF > > > > > > /* Baudrate = FOSC/(16(X+1)): 25 = 19200 @ 8MHz */ > > > #define BAUDRATE 25 > > > > > > /* Oscillator */ > > > code char at __CONFIG1H _conf0 = _OSC_INTIO67_1H; > > > > > > /* Watchdog */ > > > code char at __CONFIG2H _conf2 = _WDT_OFF_2H; > > > > > > /* Power up timeout and brown out detection enabled */ > > > code char at __CONFIG2L _conf1 = _PWRT_ON_2L & _BOREN_ON_2L; > > > /* MCLR settings */ > > > code char at __CONFIG3H _conf3 = _MCLRE_OFF_3H; > > > /* Low voltage programming disabled, Stack Overflow Reset enabled */ > > > code char at __CONFIG4L _conf4 = _LVP_OFF_4L & _STVREN_ON_4L; > > > /* Code protection disabled */ > > > code char at __CONFIG5L _conf5 = _CP0_OFF_5L & _CP1_OFF_5L & > > > _CP2_OFF_5L & _CP3_OFF_5L; /* EEPROM read protection disabled, code > > > protection boot disabled */ code char at __CONFIG5H _conf6 = > > > _CPD_OFF_5H & _CPB_OFF_5H; /* Table write protection disabled */ > > > code char at __CONFIG6L _conf7 = _WRT0_OFF_6L & _WRT1_OFF_6L & > > > _WRT2_OFF_6L & _WRT3_OFF_6L; /* EEPROM write protection disabled, table > > > write protect boot disabled, config write protect disabled */ code char > > > at __CONFIG6H _conf8 = _WRTD_OFF_6H & _WRTB_OFF_6H & _WRTC_OFF_6H; /* > > > Table read protect disabled */ > > > code char at __CONFIG7L _conf9 = _EBTR0_OFF_7L & _EBTR1_OFF_7L & > > > _EBTR2_OFF_7L & _EBTR3_OFF_7L; /* Table read protect boot disabled */ > > > code char at __CONFIG7H _conf10 = _EBTRB_OFF_7H; > > > > > > void serial_init() > > > { > > > // BAUDCON - baudrate generation control Register > > > BAUDCON = 0; // 8 bit baudrate generator, auto-baud disabled > > > > > > // SPBRG - Baud Rate Generator Register > > > SPBRG = BAUDRATE; > > > > > > // BRGH - High Baud Rate Select Bit > > > TXSTAbits.BRGH = 1; // (1 = high speed) > > > > > > // SYNC - USART Mode select Bit > > > TXSTAbits.SYNC = 0; // (0 = asynchronous) > > > > > > // TRISC - Tri-state Data Direction Register for port C > > > // RC6 - 6th pin of port C - used for Serial Transmit > > > // RC7 - 7th pin of port C - used for Serial Receive > > > TRISCbits.TRISC6 = 0; // (0 = pin set as output) > > > TRISCbits.TRISC7 = 1; // (1 = pin set as input) > > > > > > // SPEN - Serial Port Enable Bit > > > RCSTAbits.SPEN = 1; // (1 = serial port enabled) > > > > > > // TXIE - USART Transmit Interupt Enable Bit > > > PIE1bits.TXIE = 0; // (0 = disabled) > > > > > > // RCIE - USART Receive Interupt Enable Bit > > > PIE1bits.RCIE = 1; // (1 = enabled) > > > > > > // TX9 - 9-bit Transmit Enable Bit > > > TXSTAbits.TX9 = 0; // (0 = 8-bit transmit) > > > > > > // RX9 - 9-bit Receive Enable Bit > > > RCSTAbits.RX9 = 0; // (0 = 8-bit reception) > > > > > > // CREN - Continuous Receive Enable Bit > > > RCSTAbits.CREN = 1; // (1 = Enables receiver) > > > > > > // TXEN - Trasmit Enable Bit > > > TXSTAbits.TXEN = 1; // (1 = transmit enabled) > > > > > > stdout = STREAM_USER; > > > } > > > > > > void init() > > > { > > > /* Internal oscillator @ 8MHz */ > > > OSCCON &= 0x8F; > > > OSCCON |= 0x70; > > > > > > /* Disable watchdog */ > > > WDTCONbits.SWDTEN = 0; > > > } > > > > > > void test_puts(data char *str) > > > { > > > usart_putc(str[0]); > > > while( usart_busy() ); > > > } > > > > > > void main(void) > > > /* > > > The main function: > > > Initialises the system, and starts all interrupt based tasks. > > > */ > > > { > > > char tekst[2]; > > > tekst[0]='?'; > > > tekst[1]=0; > > > > > > init(); > > > > > > serial_init(); > > > > > > while(1) { > > > usart_putc('['); > > > while( usart_busy() ); > > > > > > /* (1): Send single character; works */ > > > usart_putc('?'); > > > while( usart_busy() ); > > > > > > /* (2): Send characters from array; works */ > > > usart_putc(tekst[0]); > > > while( usart_busy() ); > > > > > > /* (3): Pass array to function, which sends them as (2) does; > > > not working, sending garbage */ test_puts(tekst); > > > while( usart_busy() ); > > > > > > /* (4): send string using the library-functions; not working, > > > infinite loop */ usart_puts("?"); > > > while( usart_busy() ); > > > > > > usart_putc(']'); > > > while( usart_busy() ); > > > } > > > } > > > > > > > > > ----------------------------------------------------------------------- > > >-- This SF.Net email is sponsored by the Moblin Your Move Developer's > > > challenge Build the coolest Linux based applications with Moblin SDK & > > > win great prizes Grand prize is a trip for two to an Open Source event > > > anywhere in the world > > > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > > > _______________________________________________ > > > Sdcc-user mailing list > > > Sdc...@li... > > > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > > ------------------------------------------------------------------------- > > This SF.Net email is sponsored by the Moblin Your Move Developer's > > challenge Build the coolest Linux based applications with Moblin SDK & > > win great prizes Grand prize is a trip for two to an Open Source event > > anywhere in the world > > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > > _______________________________________________ > > Sdcc-user mailing list > > Sdc...@li... > > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge Build the coolest Linux based applications with Moblin SDK & win > great prizes Grand prize is a trip for two to an Open Source event anywhere > in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user |
From: Raphael N. <rn...@we...> - 2008-10-16 20:24:33
|
Hi Bastiaan, >>>> code char at __CONFIG4L _conf4 = _LVP_OFF_4L & _STVREN_ON_4L; You might need an additional _XINST_OFF_4L here to disable (!) extended instructions of the 4520 part. Good luck, Raphael |
From: Bastiaan v. K. <b.v...@vd...> - 2008-10-17 06:50:01
|
Hi, Just tried my 18f452 project code on a 18f4520 with this change, and so far it works completely OK! Thanks a lot!!! (on a side-note, might it be a good idea to disable this by default, as the datasheet suggests it is?) Thanks!, -Bastiaan On Thursday 16 October 2008 22:07:27 Raphael Neider wrote: > Hi Bastiaan, > > >>>> code char at __CONFIG4L _conf4 = _LVP_OFF_4L & _STVREN_ON_4L; > > You might need an additional _XINST_OFF_4L here to disable (!) extended > instructions of the 4520 part. > > Good luck, > Raphael > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge Build the coolest Linux based applications with Moblin SDK & win > great prizes Grand prize is a trip for two to an Open Source event anywhere > in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user |