Grabar con un bootloader a través el puerto serie o el USB
PIC Linux :: HARDWARE. :: Programadores.
Página 2 de 2. • Compartir •
Página 2 de 2. •
1, 2
Re: Grabar con un bootloader a través el puerto serie o el USB
Pero en ese ejemplo que has dado no usas las rutinas del monitor...
Por ejemplo consigo mandar un bit por uart, sin hacer nada, solo esto:
TXREG = mi_byte;
TXEN=1;
Porque el monitor ya inició usart, y tiene todas las funciones,...
Lo que yo quiero es en asm usar algo como esto:
pagesel ..?
call sendbyte
y no tener que iniciar usart desde mi programa.
Gracias.
Por ejemplo consigo mandar un bit por uart, sin hacer nada, solo esto:
TXREG = mi_byte;
TXEN=1;
Porque el monitor ya inició usart, y tiene todas las funciones,...
Lo que yo quiero es en asm usar algo como esto:
pagesel ..?
call sendbyte
y no tener que iniciar usart desde mi programa.
Gracias.

arcachofo- Participante Activo

- Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008
Re: Grabar con un bootloader a través el puerto serie o el USB
He abierto el chat arcachofo !
Si quieres usar la rutina sendbyte hay que poner antes
movlw 0x1f
movwf PCLATH
call sendbyte
clrf PCLATH
Debes hacer eso porque debes cambiar de pagina
b=(EEDATH << 8 ) | EEDATA ; aqui no me gustan las emoticones
Saludos
Per
Si quieres usar la rutina sendbyte hay que poner antes
movlw 0x1f
movwf PCLATH
call sendbyte
clrf PCLATH
Debes hacer eso porque debes cambiar de pagina
b=(EEDATH << 8 ) | EEDATA ; aqui no me gustan las emoticones
Saludos
Per
Re: Grabar con un bootloader a través el puerto serie o el USB
Gracias....
Esa era la información que necesitaba.... el bootloader vá muy bien, es muy rápido de modificar un programa, cargarlo al pic y ver como funciona, solo me falta utilizar el monitor para ver algunas cosas que pasan... por ejemplo mandar variables o registros que quiera al PC y así ver como está funcionando.
Además si establezco "puntos de parada" puedo cambiar cosas desde el PC y ver como funciona...
Para esto puedo usar?:
movlw 0x1d
movwf PCLATH
call runmon
clrf PCLATH
EDITO:
no había visto esto:
__asm__ __volatile__ ("movlw 0x1f");
__asm__ __volatile__ ("movwf PCLATH");
__asm__ __volatile__ ("call 0x1f7a");
__asm__ __volatile__ ("clrf PCLATH");
Porqué usas usart de PICGCC, no se puede usar "sendstring" del monitor???
Esa era la información que necesitaba.... el bootloader vá muy bien, es muy rápido de modificar un programa, cargarlo al pic y ver como funciona, solo me falta utilizar el monitor para ver algunas cosas que pasan... por ejemplo mandar variables o registros que quiera al PC y así ver como está funcionando.
Además si establezco "puntos de parada" puedo cambiar cosas desde el PC y ver como funciona...
Para esto puedo usar?:
movlw 0x1d
movwf PCLATH
call runmon
clrf PCLATH
EDITO:
no había visto esto:
__asm__ __volatile__ ("movlw 0x1f");
__asm__ __volatile__ ("movwf PCLATH");
__asm__ __volatile__ ("call 0x1f7a");
__asm__ __volatile__ ("clrf PCLATH");
Porqué usas usart de PICGCC, no se puede usar "sendstring" del monitor???

arcachofo- Participante Activo

- Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008
Re: Grabar con un bootloader a través el puerto serie o el USB
¡ Hola !
Si trabajas con PICGCC, se puede usar un puntero a función
Pedro José Ramírez Gutiérrez me da la solución :
#define flashread ((void (*)(void))0x1f7a)
un ejemplo con el monitor de Jack, monitor del pic16f877
si usas el pic16f877a hay que cambiar la dirección 0x1f7a
// ./compila.sh ej_lectura_flash3 16f877a .
#include <pic/p16f877a.h>
#define FOSC_HZ 4000000
#include <uart.h>
#include <uart2.h>
// se usa la dirección de la rutina flashread definida en el monitor
// dirección en symbol-table.inc
#define flashread ((void (*)(void))0x1f7a)
int main (void)
{
int a,b;
uart_open(SET_9600_8N1);
uart_putc('\n');
uart_puts("*Lecture(a) Flash");
uart_putc('\n');
while(1)
{
uart_puts("direccion adresse ");
a = getint(uart_getc);
putint(uart_putc,a);
EEADRH=a>>8;
EEADR=a&0xff;
flashread();
b=(EEDATH<<
|EEDATA;
uart_puts(" contenu(ido) ");
putint(uart_putc,b);
uart_putc('\n');
}
return 0;
}
No se debe cambiar de pagina PIC-GCC lo hace !
Gracias Pedro
saludos
Per
Si trabajas con PICGCC, se puede usar un puntero a función
Pedro José Ramírez Gutiérrez me da la solución :
#define flashread ((void (*)(void))0x1f7a)
un ejemplo con el monitor de Jack, monitor del pic16f877
si usas el pic16f877a hay que cambiar la dirección 0x1f7a
// ./compila.sh ej_lectura_flash3 16f877a .
#include <pic/p16f877a.h>
#define FOSC_HZ 4000000
#include <uart.h>
#include <uart2.h>
// se usa la dirección de la rutina flashread definida en el monitor
// dirección en symbol-table.inc
#define flashread ((void (*)(void))0x1f7a)
int main (void)
{
int a,b;
uart_open(SET_9600_8N1);
uart_putc('\n');
uart_puts("*Lecture(a) Flash");
uart_putc('\n');
while(1)
{
uart_puts("direccion adresse ");
a = getint(uart_getc);
putint(uart_putc,a);
EEADRH=a>>8;
EEADR=a&0xff;
flashread();
b=(EEDATH<<
uart_puts(" contenu(ido) ");
putint(uart_putc,b);
uart_putc('\n');
}
return 0;
}
No se debe cambiar de pagina PIC-GCC lo hace !
Gracias Pedro
saludos
Per
Re: Grabar con un bootloader a través el puerto serie o el USB
Gracias Per, eso es lo que necesitaba.
Hace un tiempo que no experimento nada con el monitor, lo estoy usando solamente como Bootloader.
Las últimas pruebas que hice con los cambios de página no me funcionaron y lo dejé ahí, a ver si ahora retomo el tema y consigo mejores resultados.
Ya informaré si consigo hacer algo interesante.
Hace un tiempo que no experimento nada con el monitor, lo estoy usando solamente como Bootloader.
Las últimas pruebas que hice con los cambios de página no me funcionaron y lo dejé ahí, a ver si ahora retomo el tema y consigo mejores resultados.
Ya informaré si consigo hacer algo interesante.

arcachofo- Participante Activo

- Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008
Re: Grabar con un bootloader a través el puerto serie o el USB
Después de un tiempo estoy otra vez experimentando con los bootloaders estos...
Entonces me encontré con una pequeña pega:
El monitor modificado por Per ma parce más util, porque no tiene el problema de tener que comenzar el programa en 0x020, entonces se puede usar facilmente con programas escritos y compilados en cualquier lenguaje.
Pero el monitor de Per está configurado para 4 Mhz y 9600 baud. y yo quiero usarlo para 20 Mhz y 19200 baud, entonces hay que mocificar unas lineas en el archivo: f877_jmon2.inc , en las lineas 85 en adelante, ahí se ajustan los valores para el prescaler del timer0 y para el BRG (baudrate generator). Estos son los valores que yo tengo, para cambiar solo hay que dejar descomentadas las lineas que nos interesen, se pueden deducir otros valores a partir de estos:
Una vez modificado el archivo f877_jmon2.inc , se compila monitor.asm y se graba al PIC.
Yo lo he probado con un PIC16F876.
Saludos a todos.
Entonces me encontré con una pequeña pega:
El monitor modificado por Per ma parce más util, porque no tiene el problema de tener que comenzar el programa en 0x020, entonces se puede usar facilmente con programas escritos y compilados en cualquier lenguaje.
Pero el monitor de Per está configurado para 4 Mhz y 9600 baud. y yo quiero usarlo para 20 Mhz y 19200 baud, entonces hay que mocificar unas lineas en el archivo: f877_jmon2.inc , en las lineas 85 en adelante, ahí se ajustan los valores para el prescaler del timer0 y para el BRG (baudrate generator). Estos son los valores que yo tengo, para cambiar solo hay que dejar descomentadas las lineas que nos interesen, se pueden deducir otros valores a partir de estos:
- Código:
;==========================================================================
; read readme.txt for more information
;baud rate constant with 4MHz clock...
;baud_rate equ 019h ;d'25' para 9600 baudios (4 MHz)
; Timer0 prescaler with 4MHz clock...
;scale_tmr0 equ b'00000101' ;tmr0 prescaler, 1:64
;baud rate constant with 20MHz clock...
baud_rate equ 040h ;d'64' para 19200 baudios (20 MHz)
;baud_rate equ 081h ;d'129' para 9600 baudios (20 MHz)
; Timer0 prescaler with 20MHz clock...
scale_tmr0 equ b'00000111' ;tmr0 prescaler, 1:256
;==============================================================================
Una vez modificado el archivo f877_jmon2.inc , se compila monitor.asm y se graba al PIC.
Yo lo he probado con un PIC16F876.
Saludos a todos.

arcachofo- Participante Activo

- Cantidad de envíos: 90
Fecha de inscripción: 26/11/2008
Página 2 de 2. •
1, 2
Permiso de este foro:
No puedes responder a temas en este foro.





