mplabX + SPI

Miroslav Draxal evik na volny.cz
Středa Březen 27 23:45:59 CET 2013


Dobrý večer, 

tak smutné zjištění. Jak MPLAB tak ani MPLABX nepodporují simulaci HW SPI.
Ale podle mého mínění, coby mladý "pionýr" jsem to SPI HW simuloval. To byla
verze mplabu 5. Nebo 6.

Je to škoda. míra

 

From: hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz] On
Behalf Of Hfmcons
Sent: Monday, March 25, 2013 11:28 AM
To: HW-news
Subject: Re: mplabX + SPI

 

Simulátor v MplabX někdy zlobí(l), nelíbí se mu neinicializované
proměnné např. z ADC, ale jestli je tohle ten případ nevím.
Miloš Dašek

Dne 25. března 2013 10:25 Miroslav Draxal <evik na volny.cz> napsal(a):
> Asi nepochopeno.
>
> Nejprve init SPI
>
>                (zde se nastaví priorita přerušení, povolí přerušení od
> periferii, povolí globálně prerušení)
>
>                Nakonec zde skáče na SPIout
>
> SPIout
>
>                Pokud je povolený SPIIE, čekej, protože nedokončil
předchozí
> relaci SPI
>
>                Povol přerušení od SPI (SPIIE), soft.simulace přerušení od
> SPI(SPPIF), následně okamžitě skočí do přerušení od SPI
>
> SPIint
>
>                No a sem to právě skočí pouze při soft.simulaci přerušení,
> čili přerušení je OK.Pokud by odeslal celou SPI, potom by zakázal SPPIE.
> jenom to jaksi nic neodesílá (v mplabX), otázka je, jestli MPLAB správně
> simuluje, nebo je chyba mezi klávesnicí a židlí.
>
> Předpokládám že ta klávesnice a židle.
>
> Včera jsem si to napsal do mplab 8.88 a taky to nechodí. Inicializuju to
> podle datasetu, ale nic. Nějak se mi nechce věřit, že by to byla chyba
> simulace.
>
>
>
> #include <htc.h>
>
> //#pragma config CONFIG1H = 0x8
>
> __CONFIG (1, OSC_INTIO67 & FCMEN_OFF & IESO_OFF);
>
> //#pragma config CONFIG2L = 0x1E
>
> __CONFIG (2, PWRT_ON & BOREN_SBORDIS & BORV_3);
>
> //#pragma config CONFIG2H = 0x1E
>
> __CONFIG (3, WDT_OFF & WDTPS_32768);
>
> //#pragma config CONFIG3H = 0x81
>
> __CONFIG (4, CCP2MX_PORTC & PBADEN_OFF & LPT1OSC_OFF & MCLRE_ON);
>
> //#pragma config CONFIG4L = 0x81
>
> __CONFIG (5, STVREN_ON & LVP_OFF & XINST_OFF);
>
> //#pragma config CONFIG5L = 0xF
>
> __CONFIG (6, CP0_OFF & CP1_OFF & CP2_OFF & CP3_OFF);
>
> //#pragma config CONFIG5H = 0xC0
>
> __CONFIG (7, CPB_OFF & CPD_OFF);
>
> //#pragma config CONFIG6L = 0xF
>
> __CONFIG (8, WRT0_OFF & WRT1_OFF & WRT2_OFF & WRT3_OFF);
>
> //#pragma config CONFIG6H = 0xE0
>
> __CONFIG (9, WRTC_OFF & WRTB_OFF & WRTD_OFF);
>
> //#pragma config CONFIG7L = 0xF
>
> __CONFIG (10, EBTR0_OFF & EBTR1_OFF & EBTR2_OFF & EBTR3_OFF);
>
> //#pragma config CONFIG7H = 0x40
>
> __CONFIG (11, EBTRB_OFF);
>
>
>
> void main(void)
>
> {
>
> #define SPI_DATA_OUT LATC5
>
> #define SPI_DATA_OUT_TRIS      TRISC5
>
> #define SPI_CLK               LATC3
>
> #define SPI_CLK_TRIS     TRISC3
>
> #define SPI_STROBO       LATA4
>
> #define SPI_STROBO_TRIS           TRISA4
>
> #define SPI_DATA_IN     PORTCbits.RC4
>
> #define SPI_DATA_IN_TRIS          TRISC4
>
>
>
>     OSCCON = 0b01110011;
>
>     ADCON1 = 0b00001111; //RA0-RA3 IO (no AD)
>
>     CMCON = 0b00000111; //RA0-RA2 IO (comparators off)
>
>
>
>     SPI_STROBO = 0;
>
>     SPI_STROBO_TRIS = 0;
>
>     SPI_DATA_IN_TRIS = 1;
>
>
>
>     SMP = 1; //vstupní data jsou snímána po odeslání výstupních dat
>
>     CKE = 1;
>
>     CKP = 0; //klidový stav LO
>
>     SSPCON1bits.SSPM = 0; //SPI Master mode, clock = FOSC/4
>
>
>
>     PEIE = 1; // enable peripheral interrupts
>
>     IPEN = 1; // Interrupt priorities enabled
>
>     SSPIP = 0; // low priority interrupt
>
>     //    SSPIF = 0;
>
>     //    SSPIE = 1;
>
>     GIEL = 1; // povol low-level přerušení
>
>     GIE = 1; // povol všechna přerušení
>
>
>
>     SPI_DATA_OUT = 0;
>
>                SPI_DATA_OUT_TRIS = 0;
>
>                SPI_CLK = 0;
>
>                SPI_CLK_TRIS = 0;
>
>
>
>                SSPEN = 1; //povol SPI modul
>
>                SSPIE = 1; //povol přerušení od SPI
>
>                SSPIF = 1; //příznak přerušení
>
>                do
>
>                {}
>
>                while (1);
>
> }
>
> void interrupt low_priority interrupt_low (void)
>
> {
>
>     if (SSPIE && SSPIF)
>
>     {
>
>                               SSPBUF = 0xff;
>
>                               SSPIF = 0;
>
>     }
>
>
>
> }
>
>
>
> From: hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz] On
> Behalf Of Milan Baša
> Sent: Monday, March 25, 2013 8:26 AM
> To: HW-news
> Subject: Re: mplabX + SPI
>
>
>
> Dňa 24.03.2013 12:45, Miroslav Draxal  wrote / napísal(a):
>> Dobrý den,
>>
>> Od včerejška ladím jeden soft pro 18f2620 v mplabX, fyzicky board ještě
>> nemám, nedaří se mi rozběhnout spi v přerušení. Nezkoušel někdo z Vás,
>> jestli mplabX 1.70 korektně simuluje SPI? Tváří se mi to, jako by nic
>> neodesílal. Prostě naplním SSPBUF a následně mi to neskočí do přerušení
>> (nic se neděje). Míra
>>
>> ps. Trochu jsem to osekal proto tak nelogické nastavování TRIS... atd,
>> předělávám z softSPI na hwSPI
>>
>> void initSPI (void)
>>
>> {
>>
>> #ifdef SPI_HW
>>
>>      SPI_STROBO = 0;
>>
>>      SPI_STROBO_TRIS = 0;
>>
>>      SPI_DATA_IN_TRIS = 1;
>>
>>      CKP = 0; //klidový stav LO
>>
>>      CKE = 1;
>>
>>      SMP = 1; //vstupní data jsou snímána po odeslání výstupních dat
>>
>>      SSPCON1bits.SSPM = 0; //SPI Master mode, clock = FOSC/4
>>
>>      PEIE = 1; // enable peripheral interrupts
>>
>>      IPEN = 1; // Interrupt priorities enabled
>>
>>      SSPIP = 0; // low priority interrupt
>>
>>      //    SSPIF = 0;
>>
>>      //    SSPIE = 1;
> Tu ste zakazal prerusenie od SPI (defaultne nastavene na 0)
>>
>>      GIEL = 1; // povol low-level přerušení
>>
>>      GIE = 1; // povol všechna přerušení
>>
>> #endif
>>
>>      SPIout_bity.value[0] = 0xff;
>>
>>      SPIout_bity.value[1] = 0xff;
>>
>>      SPIout_bity.value[2] = 0xff;
>>
>>      SPIout_bity_old.bitOut.PowerLed = 1; //pro inicializaci SPI (musí
>> se odeslast do IO samé nuly)
>>
>>      SPIout ();
>>
>> }
>>
>>
>>
//__________________________________________________________________________
____________________________________________
>>
>> #ifdef SPI_HW
>>
>> void SPIint (void)
>>
>> // u HW SPI se hned zkopírude do SPIout_bity_old, protože se čeká, až se
>> odešle info do IO po SPI
>>
>> // v době odesílání po SPI si již může používat SPIout_bity
>>
>> {
>>
>>      if (SSPIE && SSPIF)
> Sem proc neskoci lebo mate zakazane prerusenie a este navyse testujete
> zakazane prerusenie na 1
>>
>>      {
>>
>>                 //sem skočí pouze 1 a to po SPIout
>>
>>                 //až odešle vše, zakáže SSPIE
>>
>>      }
>>
>> }
>>
>> #endif
>>
>>
>>
//__________________________________________________________________________
____________________________________________
>>
>> char SPIout (void)
>>
>> #ifdef SPI_HW
>>
>> //HW_SPI
>>
>> {
>>
>>      char SPItmp = SPI_vyslanychBytu;
>>
>>      while (SSPIE); //pokud je povolené přerušení od SPI, potom čekej až
>> to odešle
> Tu by ste mal testovat asi SSPIF - kym sa odosle buffer
>>
>>      do
>>
>>      {
>>
>>                 if (SPIout_bity.value[SPItmp - 1] !=
>> SPIout_bity_old.value[SPItmp - 1])//pokud se změnilo něco v bufru, odešli
>>
>>                 {
>>
>>                     SPIoutByt = SPI_vyslanychBytu;
>>
>>                     SPIerrorRepeat = SPI_errorRepeat;
>>
>>                     SPImode = SPIsave;
>>
>>                     SPIout_bity_old = SPIout_bity; // zkopíruj pole
>>
>>                     SPI_DATA_OUT = 0;
>>
>>                     SPI_DATA_OUT_TRIS = 0;
>>
>>                     SPI_CLK = 0;
> Nastavene CLK na nulu a nikde ho nenastavujete na 1 - ak HW tak sa asi
> musite postarat aj o CLK
>>
>>                     SPI_CLK_TRIS = 0;
>>
>>                     SSPEN = 1; //povol SPI modul
>>
>>                     SSPIF = 1; //příznak přerušení
>>
>>                     SSPIE = 1; //povol přerušení od SPI
>>
>>                     break;
>>
>>                 }
>>
>>      }
>>
>>      while (--SPItmp);
>>
>>      return 0;
>>
>> }
>>
>>
>>
>> __________ Informace od ESET NOD32 Antivirus, verze databaze 8156
>> (20130324) __________
>>
>> Tuto zpravu proveril ESET NOD32 Antivirus.
>>
>> http://www.eset.cz
>>
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>
> Milan
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
> __________ Informace od ESET NOD32 Antivirus, verze databaze 8157
(20130324)
> __________
>
> Tuto zpravu proveril ESET NOD32 Antivirus.
>
> http://www.eset.cz
>
>
>
> __________ Informace od ESET NOD32 Antivirus, verze databaze 8158
(20130325)
> __________
>
> Tuto zpravu proveril ESET NOD32 Antivirus.
>
> http://www.eset.cz
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list 



__________ Informace od ESET NOD32 Antivirus, verze databaze 8158 (20130325)
__________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz



__________ Informace od ESET NOD32 Antivirus, verze databaze 8169 (20130327)
__________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20130327/9381a2f4/attachment.htm>


Další informace o konferenci Hw-list