![](templates/subSilver/images/CCSLogo.jpg) |
![CCS C Software and Maintenance Offers](templates/subSilver/images/forumAd6.jpg) |
View previous topic :: View next topic |
Author |
Message |
pilar
Joined: 30 Jan 2008 Posts: 197
|
|
![](templates/subSilver/images/spacer.gif) |
kthomas
Joined: 06 Jul 2010 Posts: 5
|
|
Posted: Wed Jul 07, 2010 5:55 pm |
|
|
I'm not familiar with that bootloader, but I've used the following to locate a bootloader at the top of memory on a dsPIC, with the application below. In this case the bootloader and application are two separate entities.
In the application:
Code: | #ORG start, end {} // reserves space for the bootloader
#ORG( end+5, getenv("PROGRAM_MEMORY")-1 ) default // puts the code following this from the end of the bootloader thru the end of program memory |
In the bootloader:
Code: | #ORG start, end auto=0 default // tells the compiler to put all of the bootloader code in the designated range |
Where start is the beginning of program memory and end is the end of your bootloader. |
|
![](templates/subSilver/images/spacer.gif) |
pilar
Joined: 30 Jan 2008 Posts: 197
|
|
Posted: Fri Jul 09, 2010 10:30 am |
|
|
Hi, I've been using a Bootloader to PIC18F4550 and I just needed to put this code the begin of my code!!!:
Code: | /********************************************************************************/
/* BootLoader Activo */
/********************************************************************************/
#build(reset=0x800)
#build(interrupt=0x808)
#org 0x0000,0x07ff
void bootloader() {
#asm
nop
#endasm
} |
But now I want to use this new AN1310 Bootloader with a PIC18F452 and I can not understand how to remap the code of my application.
Here is the code of my aplication:
Code: | #include <p18f452.h>
#pragma config OSC = HS, PWRT = ON, BOR = OFF, BORV = 27,WDT = OFF, STVR = OFF,LVP = OFF
#include <stdio.h>
#include <usart.h>
// BAUDRG is calculated as = Fosc / (4 * Desired Baudrate) - 1
#define BAUDRG 86 // 20MHz
void high_isr(void);
void low_isr (void);
#pragma code AppHighIntVector = 0x0008 // hardware high priority interrupt vector address
void AppHighIntVector(void)
{
_asm GOTO high_isr _endasm // branch to the high_isr() function to handle priority interrupts.
}
#pragma code AppLowIntVector = 0x0018 // hardware low priority interrupt vector address
void low_vector(void)
{
_asm GOTO low_isr _endasm // branch to the low_isr() function to handle priority interrupts.
}
#pragma code // return to the default code section
#pragma interrupt high_isr
void high_isr(void)
{
LATDbits.LATD1 ^= 1; // blink LED
PIR1bits.TMR1IF = 0; // clear Timer 1 interrupt flag
}
#pragma interruptlow low_isr
void low_isr(void)
{
if(PIR1bits.RCIF)
{
#ifdef INVERT_UART
if(RCSTAbits.FERR && PORTCbits.RC7)
#else
if(RCSTAbits.FERR && !PORTCbits.RC7)
#endif
{
// receiving BREAK state, soft reboot into Bootloader mode.
Reset();
}
TXREG = RCREG; // echo received UART character back out
LATD ^= 0xF0;
}
if(INTCONbits.TMR0IF)
{
LATDbits.LATD0 ^= 1; // blink LED
INTCONbits.TMR0IF = 0; // clear Timer 0 interrupt flag
}
}
unsigned int brg;
void main()
{
#ifdef INVERT_UART
LATCbits.LATC6 = 0; // drive TXD pin low for RS-232 IDLE state
#else
LATCbits.LATC6 = 1; // drive TXD pin high for RS-232 IDLE state
#endif
TRISCbits.TRISC6 = 0;
if(!RCONbits.POR)
{
// Power On Reset occurred, bootloader did not capture an autobaud BRG value.
brg = 0;
RCONbits.POR = 1; // flag that future MCLR/soft resets are not POR resets
}
TMR0H = 0;
TMR0L = 0;
T0CON = 0b00010110;
INTCONbits.TMR0IF = 0;
INTCONbits.TMR0IE = 1;
INTCON2bits.TMR0IP = 0;
TMR1H = 0;
TMR1L = 0;
T1CON = 0b00110111;
T1CONbits.TMR1CS = 0; // internal clock source (Fosc/4)
PIR1bits.TMR1IF = 0;
PIE1bits.TMR1IE = 1;
IPR1bits.TMR1IP = 1; // Timer 1 as High Priority interrupt
RCONbits.IPEN = 1; // enable interrupt priority
INTCONbits.GIEH = 1;
INTCONbits.GIEL = 1;
LATD = 0; // turn off LEDs
TRISD = 0; // enable PORTD LED outputs
// wait for stable clock and host connection by waiting for first Timer 0 interrupt
T0CONbits.TMR0ON = 1;
while(!LATDbits.LATD0);
if(brg != 0)
{
printf( (far rom char*) "Bootloader BRG: %u\r\n", brg);
}
printf( (far rom char*) "\r\nHello world from PIC microcontroller!\r\n");
// infinite loop, interrupts will blink PORTD pins and handle UART communications.
while(1)
{
}
} |
someone could give me a hand with this? |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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
|