Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip MPLAB C serisi => Microchip C18 => Konuyu başlatan: fryrmnd - 05 Haziran 2012, 12:03:50

Başlık: c18 hid bootloader ve kesme çözemedim
Gönderen: fryrmnd - 05 Haziran 2012, 12:03:50
arkadaşlar microchip hid bootloader yüklü 18F4550 ye 18F2550 ile uart üzerinden data yollamam lazım. alıcı tarafında uart kesmesi ile almak istiyorum.

verici
#include <p18cxxx.h>
#include <delays.h>

#pragma config FOSC=XT_XT,LVP=OFF,WDT=OFF

void main(void){

    TRISB=0x00;
    TRISC=0x80;
    //TRISD=0x00;
    //LATD=0x00;
    LATB=0x00;
    LATC=0x00;
   
    SPBRG=0x06;
    TXSTAbits.BRGH=0;
    BAUDCONbits.BRG16=0;
    TXSTAbits.SYNC=0;
    RCSTAbits.SPEN=1;
    TXSTAbits.TXEN=1;

    while(1){
    Delay10KTCYx(56);
 
    //LATD=0xFF;
    TXREG=0x26;
    Delay10KTCYx(56);
   
    //LATD=0x00;
    }         
}


alıcı
#include <p18cxxx.h>
#include <delays.h>
#include "lcd07.h"

#pragma config FOSC=XT_XT,LVP=OFF,WDT=OFF

unsigned char Uart_Karakter;
unsigned char Uart_Bayrak;

void kesmeH();
void kesmeL();

/**********************************
extern void _startup(void);

#pragma code RESET_VECTOR=0x1000
void _reset (void)
{
    _asm goto _startup _endasm
}
**********************************/
#pragma code ISR_H=0x1008
void isr_H (void)
{
     _asm goto kesmeH _endasm
}
#pragma code ISR_L=0x1018
void isr_L(void)
{
     _asm goto kesmeL _endasm
}
#pragma code


#pragma interrupt kesmeH
void kesmeH(){
    if(PIR1bits.RCIF){
        INTCONbits.GIEH=0;
        INTCONbits.GIEL=0;
        PIE1bits.RCIE=0;
        PIR1bits.RCIF=0;

        Uart_Karakter=RCREG;
        Uart_Bayrak=1;

        PIE1bits.RCIE=1;
        INTCONbits.GIEH=1;
        INTCONbits.GIEL=0;
    }
}

#pragma interruptlow kesmeL
void kesmeL(){

}
#pragma code

void main(void){
   
    TRISB=0x00;
    TRISC=0x80;
    TRISD=0x00;
    LATD=0x00;
    LATB=0x00;
    LATC=0x00;

    lcd_init();
   
    PIR1=0;
    SPBRG=0x06;
    TXSTAbits.BRGH=0;
    BAUDCONbits.BRG16=0;
    TXSTAbits.SYNC=0;
    RCSTAbits.SPEN=1;
    RCSTAbits.CREN=1;

    RCONbits.IPEN=1;
    IPR1bits.RCIP=1;
    PIE1bits.RCIE=1;
    INTCONbits.GIEH=1;
    INTCONbits.GIEL=0;
   
    while(1)
    {
        if(Uart_Bayrak==1){
            Uart_Bayrak=0;
            veri_yolla(Uart_Karakter);
        }
    }
}


bootloader kullanmadan "&" karakterini lcdye alabiliyorum. ancak bootloader ile yüklerken
extern void _startup(void);

#pragma code RESET_VECTOR=0x1000
void _reset (void)
{
    _asm goto _startup _endasm
}

satırlarını aktifleştirip reset vektörünü 0x1000 e almam gerektiğini düşünüyorum. ama galiba yanlış düşünüyorum ki bir sonuç elde edemedim. reset ve interrupt vektörlerinden kaynaklı bir sorunum var galiba. işin içinden çıkamadım. yardımlarınızı bekliyorum.
Başlık: Ynt: c18 hid bootloader ve kesme çözemedim
Gönderen: justice_for_all - 05 Haziran 2012, 12:10:47
kesme vektör adreslerin yalnış sanırım
Başlık: Ynt: c18 hid bootloader ve kesme çözemedim
Gönderen: fryrmnd - 05 Haziran 2012, 12:16:41
@justice_for_all

nasıl olmalı hocam.

yüksek 0x08 düşük 0x18 değilmiydi. hid bootloader 0xFFF e kadar ayrılırsa reset i 0x1000 diğerlerini de 0x1008 ve 0x1018 e almak gerekmezmi? :-\
Başlık: Ynt: c18 hid bootloader ve kesme çözemedim
Gönderen: justice_for_all - 05 Haziran 2012, 14:42:49
INTCONbits.GIEL=0; bu satırı

INTCONbits.PEIE=1; yaparak denermisin bide
Başlık: Ynt: c18 hid bootloader ve kesme çözemedim
Gönderen: fryrmnd - 05 Haziran 2012, 15:42:13
yok hocam olmuyor. reset atıyor. zaten kesme önceliğini(IPEN) aktifleştirince PEIE değilde GIEL kullanmak gerekmiyor mu?
Başlık: Ynt: c18 hid bootloader ve kesme çözemedim
Gönderen: justice_for_all - 05 Haziran 2012, 16:03:34
(http://b1206.hizliresim.com/y/5/7hm77.jpg) (http://bit.ly/c25MCx)

yukarıda şekilde çevresel birimler kesmesi enable yapılmazsa kesme olayı gerçekleşmez ama.
Başlık: Ynt: c18 hid bootloader ve kesme çözemedim
Gönderen: fryrmnd - 05 Haziran 2012, 16:29:13
hocam haklısın ama ben bootloader sız nasıl kesme aldım.  :o
Başlık: Ynt: c18 hid bootloader ve kesme çözemedim
Gönderen: justice_for_all - 05 Haziran 2012, 17:21:15
microchipin sitesinde HID bootloader la ilgili örnekler var bi bak istersen..

mesela örneğin birinde su sekilde yapmış senin yaptığın gibi devamı da aynı senin kod gibi yani ..

#if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)
#define REMAPPED_RESET_VECTOR_ADDRESS 0x1000
#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008
#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018
#elif defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)
#define REMAPPED_RESET_VECTOR_ADDRESS 0x800
#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x808
#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x818
#else
#define REMAPPED_RESET_VECTOR_ADDRESS 0x00
#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x08
#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x18
#endif
Başlık: Ynt: c18 hid bootloader ve kesme çözemedim
Gönderen: fryrmnd - 05 Haziran 2012, 18:54:24
tamam hocam ben de onlara bakıyorum zaten. #if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER) ifadesi ile eğer projede bir yerde kod hid bootloader ile yüklenecek şeklinde bir direktif verilmişse   vektör adreslerini 1000 1008 ve 1018 kabul et demiyor mu?
Başlık: Ynt: c18 hid bootloader ve kesme çözemedim
Gönderen: justice_for_all - 06 Haziran 2012, 08:45:58
evet aynen öyle diyor.
Başlık: Ynt: c18 hid bootloader ve kesme çözemedim
Gönderen: fryrmnd - 08 Haziran 2012, 14:58:05
microchip hid custom demo projesinde timer0 kesmesini yüksek öncelikli kesme olarak ayarladım. bootloader ile yükleme yaptım güzel çalışıyor. sıfırdan proje oluşturup bootloader ile kesme yi bir türlü çalıştıramdım. arada bir trik var ama. acaba startup dosyası ile ilgili bir modifiye mi gerek. hid bootloader kullanıp kesme çalıştıran varsa olayı biraz anlatabilir mi?