|
|
View previous topic :: View next topic |
Author |
Message |
Sandman
Joined: 26 Jan 2004 Posts: 15 Location: Kiruna, Sweden
|
help with bootloader on 18f458 |
Posted: Sun Apr 10, 2005 1:14 pm |
|
|
Hello all. I�m currently working on a small application where I would like to implement a bootloader. I guess it�s just me who has this �problem�, especially since I have not seen any clear answer to this in earlier posts on the subject.
The bootloader I have started to work with is the �Tinybootloader�, since it seems like a simple alternative and some here on the forum seems to have used it before.
The first question I have concerns the space reservation code that has to be included in the application program. As for the tinybootloader it has been very simply illustrated in assembler, for the 18f:
Seems simple enough, but where is this code suppose to be? Fist in the program, sure, but is it suppose to be right after the configuration section with fuses etc. or...?
Does anyone who is using the tinybootloader have like an example of code for this that I could try? My application is using following device:
18f458 @ 20Mhz
The application is suppose to use the uart with a baudrate of 28.8 kbps. Have there been problems with serial communication in application using bootloaders? If so, do you have any suggestions that could minimize the possibility of these problems?
Hope my problem is clear and not much of a problem for others.
Best wishes
/J.R |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Apr 10, 2005 2:28 pm |
|
|
Quote: | The first question I have concerns the space reservation code that has to be included in the application program. As for the tinybootloader it has been very simply illustrated in assembler, for the 18f:
Code:
org 0
goto main |
Since you're using the 18F458, I assume you're using the CCS demo.
I downloaded the demo and compiled a few test programs with it.
I then looked at the .LST file and checked the code at adresses 0-4.
In each test, it had a GOTO there. Example:
Code: | #include <18F458.h>
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, BORV42, PUT, NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
void main()
{
printf("Hello World\n\r");
while(1);
} |
Here is part of the .LST file for the code above. Note that there
is a GOTO at address 0, and that it jumps to main() at 0022.
This meets the requirements of the bootloader.
Code: | CCS PCH C Compiler, Version 3.219d, xxxxx 10-Apr-05 13:18
Filename: C:\Program Files\PCWH\Projects\Test.LST
*
0000: GOTO 0022
.................... #include <18F458.h>
.................... //////// Standard Header file for the PIC18F458 device ////////////////
.................... #device PIC18F458
.................... #list
....................
.................... #fuses HS, NOWDT, NOPROTECT, BROWNOUT, BORV42, PUT, NOLVP
.................... #use delay(clock=20000000)
.................... #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
....................
.................... void main()
.................... {
0022: CLRF FF8
0024: BCF FD0.7
0026: CLRF FEA
0028: CLRF FE9
002A: BSF FC1.0
Etc. |
=========================
Now let's do a test with an isr in it. (#int_rda, in this case).
Code: | #include <18F458.h>
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, BORV42, PUT, NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#int_rda
void rda_isr()
{
char c;
c = getc();
}
void main()
{
printf("Hello World\n\r");
while(1);
} |
Here is the .LST file. Again, notice that it has a GOTO at 0, and that
it jumps to main() at address 00E4.
Code: | CCS PCH C Compiler, Version 3.219d, xxxxx 10-Apr-05 13:23
Filename: C:\Program Files\PCWH\Projects\Test.LST
*
0000: GOTO 00E4
*
0008: MOVWF 05
000A: MOVFF FD8,06
..... (most interrupt dispatcher code deleted for brevity)
008E: MOVF 05,W
0090: MOVFF 06,FD8
0094: RETFIE 0
.................... #include <18F458.h>
.................... /// Standard Header file for the PIC18F458 device /////
.................... #device PIC18F458
.................... #list
....................
.................... #fuses HS, NOWDT, NOPROTECT, BROWNOUT, BORV42, PUT, NOLVP
.................... #use delay(clock=20000000)
.................... #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
00BE: BTFSS F9E.5
00C0: BRA 00BE
00C2: MOVFF FAB,17
00C6: MOVFF FAE,01
00CA: BTFSS 17.1
00CC: BRA 00D2
00CE: BCF FAB.4
00D0: BSF FAB.4
00D2: NOP
00D4: GOTO 00DA (RETURN)
....................
.................... #int_rda
.................... void rda_isr()
.................... {
.................... char c;
.................... c = getc();
00D8: BRA 00BE
00DA: MOVFF 01,19
.................... }
....................
....................
00DE: BCF F9E.5
00E0: GOTO 0054
.................... void main()
.................... {
00E4: CLRF FF8
00E6: BCF FD0.7
00E8: BSF 0D.7
00EA: CLRF FEA
Etc. |
|
|
|
Sandman
Joined: 26 Jan 2004 Posts: 15 Location: Kiruna, Sweden
|
|
Posted: Mon Apr 11, 2005 5:12 pm |
|
|
Well, I have some errors, (or unexpected differences between actual and expected settings) in the configuration bits, after have changed and hex-converted the .asm file for the bootloader in MPLAB. The application seemed to be working anyway thou. Then I discovered that it was only the first time. After the application software have been loaded ones the pic can no longer be programmed using the bootloader.
I must admit I didn�t really understand how the goto instruction in the beginning of the file CCS generated could be directly implemented for the bootloader. First I thought that it meant that space was already reserved that could be used by the loader. I thought it seemed a bit nuts, but I tested and the tried to load in the application software without adding any extra code for space reservation.
This might be the error since the tinybootloader can no longer detect the pic unless I reprogram the bootloader block using the ICD.
So apparently I have not fully understood your post. Sorry
Any other thoughts?? |
|
|
Stefan Guest
|
|
Posted: Tue Apr 12, 2005 10:29 am |
|
|
#fuse in the main Program must be the same as in CCS bootloader
I had to include the correct bootloader.h in the main project |
|
|
Sandman
Joined: 26 Jan 2004 Posts: 15 Location: Kiruna, Sweden
|
|
Posted: Tue Apr 12, 2005 12:18 pm |
|
|
Bootloader.h ? Is it included in one of the later versions of the compiler? I have version 3.174 (rather old), and it has only a loader.c and ex_load.c. Have anyone used these, or versions of these for bootloading applications? |
|
|
Sandman
Joined: 26 Jan 2004 Posts: 15 Location: Kiruna, Sweden
|
|
Posted: Thu Apr 14, 2005 3:21 am |
|
|
Ok, I don�t know what happened, but now the TinyBootloader works fine.
Without problems, but no changes have been made. Well, [censored] behind the wheel as usual I guess, but now I got something to work with.
Over and out
/J"S"R |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|