Newsgroup: it.hobby.elettronica.digitale
Titolo: Rabbit e Timer C

Ciao,
c'è nessuno che usa le Rabbit? Ho un RCM4100 @ 60 MHz e mi sto
perdendo con la configurazione del TimerC. O meglio: compilando il
programma di esempio (TIMER_C_INT.c) funziona regolarmente.
Ma incollando lo stesso codice nel mio programma ottengo un reset
continuo del modulo.
Ovvio che c'è una differenza. E la differenza sta nel fatto che io
richiamo l'inizializzazione della scheda BoardInit() dove tramite il
programmino di configurazione ho impostato i vari pin di I/O e le
seriali.
Ho scoperto che l'impostazione che manda in crisi è l'attivazione
dell'interrupt del timer C, o se preferite:
WrPortI(TCCR, &TCCRShadow, 0x01);
Quale altra impostazione può fare a botte con l'attivazione
dell'interrupt sul timer C? E' il timer A che funge anche da
distributore di clock... il C non dovrebbe avere questi problemi.
Se avete qualche idea...
Marco / iw2nzm

continuo del modulo.
Che abbiamo la palla di cristallo? posta il codice e forse si capira' dove 
sbagli.

 sbagli.
Non ho postato codice perché la domanda era relativa a quali periferiche 
interagiscono con il timer C.
Comunque l'istruzione che causa il reset del micro è:
WrPortI(TCCR, &TCCRShadow, 0x01); // attivazione int
il programma di test è il file di esempio TIMER_C_INT.c contenuto nella 
cartella
C:\Program Files\Rabbit\Samples\TIMERC
al quale ho aggiunto come prima istruzione nel main() SFC_BoardInit(); 
che richiama il file di configurazione riportato dopo la firma.
C'è sicuramente qualche altra impostazione che interferisce ma 
sinceramente non sono riuscito a individuarla dal datasheet.
Ciao
Marco / iw2nzm
--
/*** BeginHeader */
#ifndef __SFC_CORE_BOARD_LIB
#define __SFC_CORE_BOARD_LIB
/*** EndHeader */
/* START LIBRARY DESCRIPTION 
************************************************
SFC_CORE_BOARD.LIB
DESCRIPTION:
  This library was generated by the Rabbit 4000 I/O LIB Utility.
  If it is modified in any incorrect way it might not load properly.
  Usage:
  #use "SFC_CORE_BOARD.LIB"
  main()
  {
     SFC_BoardInit();
     ...
  }
SUPPORT LIBRARIES: none
END DESCRIPTION 
*************************************************************/
/*** BeginHeader  SFC_BoardInit */
void SFC_BoardInit();
void ClockCheck();
void SetupSerial();
#define DINBUFSIZE  511
#define DOUTBUFSIZE  511
#define SERD_TXPORT  PCDR
#define DDRIVE_TXD  0
#define SERD_RXPORT  PCDR
#define DDRIVE_RXD  1
#define EINBUFSIZE  63
#define EOUTBUFSIZE  63
#define SERE_TXPORT  PEDR
#define EDRIVE_TXD  6
#define SERE_RXPORT  PEDR
#define EDRIVE_RXD  7
#define FINBUFSIZE  31
#define FOUTBUFSIZE  31
#define SERF_TXPORT  PEDR
#define FDRIVE_TXD  2
#define SERF_RXPORT  PEDR
#define FDRIVE_RXD  3
/*** EndHeader */
/* START FUNCTION DESCRIPTION 
***********************************************
SFC_BoardInit                <SFC_CORE_BOARD.LIB>
END DESCRIPTION 
*************************************************************/
void ClockCheck()
{
    if (freq_divider != 96) // 29.49 MHz, doubled
    {
       exception(-ERR_LIBCLOCKSPEED);
    }
}
void SetupSerial()
{
    serDopen(115200L);
    serEopen(460800L);
    WrPortI(SECR,&SECRShadow, 0x21);
    serFopen(19200L);
    WrPortI(SFCR,&SFCRShadow, 0x21);
}
void SFC_BoardInit()
{
    ClockCheck();
    // The following differ from BIOS settings
    SetupSerial();
    WrPortI(I0CR,&I0CRShadow,0x03);     // Port E Input and output Pins
    WrPortI(ICS1R,&ICS1RShadow,0x33);     // IC Channel 1
    WrPortI(ICT1R,&ICT1RShadow,0x42);     // Port C Input and output Pins
    WrPortI(PBDDR,&PBDDRShadow,0xFF);     // Port B Input and output Pins
    WrPortI(PCAHR,&PCAHRShadow,0xC0);     // Port C Input and output Pins
    WrPortI(PCFR,&PCFRShadow,0x15);     // Port C Input and output Pins
    WrPortI(PEAHR,&PEAHRShadow,0x30);     // Port E Input and output Pins
    WrPortI(PEALR,&PEALRShadow,0x30);     // Port E Input and output Pins
    WrPortI(PEDDR,&PEDDRShadow,0x44);     // Port E Input and output Pins
    WrPortI(PEFR,&PEFRShadow,0x44);     // Port E Input and output Pins
    WrPortI(QDCR,&QDCRShadow,0x08);     // Port E Input and output Pins
    WrPortI(SBDHR,NULL,    0x81);     // Serial Port B
    WrPortI(SBDLR,NULL,    0xFF);     // Serial Port B
    WrPortI(SCDLR,NULL,    0x7F);     // Serial Port C
    WrPortI(TAT1R,&TAT1RShadow,0xFF);     // Timer C
    WrPortI(TCCSR,&TCCSRShadow,0x01);     // Timer C
    WrPortI(TCDHR,NULL,    0xE3);     // Timer C
    WrPortI(TCDLR,NULL,    0xCD);     // Timer C
}
// The following are used by the configuration utility
// Restore(SBCR, 0x0D)      // Serial Port B
// Restore(SCCR, 0x0D)      // Serial Port C
// Restore(SDCR, 0x01)      // Serial Port D
// Restore(SDDLR, 0x1F)      // Serial Port D
// Restore(SECR, 0x21)      // Serial Port E
// Restore(SEDLR, 0x07)      // Serial Port E
// Restore(SFCR, 0x21)      // Serial Port F
// Restore(SFDLR, 0xBF)      // Serial Port F
// Restore(APIC, 0x01)      // Serial Port C
// Restore(APID, 0x01)      // Serial Port D
// Restore(APIE, 0x01)      // Serial Port E
// Restore(APIF, 0x01)      // Serial Port F
// Restore(DBL, 0x01)      // Processor Options
// Restore(DINBF, 0x1FF)      // Serial Port D
// Restore(DOUTBF, 0x1FF)      // Serial Port D
// Restore(EINBF, 0x3F)      // Serial Port E
// Restore(EOUTBF, 0x3F)      // Serial Port E
// Restore(USEPC, 0x01)      // Serial Port C
// Restore(USEPD, 0x01)      // Serial Port D
// Restore(USEPE, 0x01)      // Serial Port E
// Restore(USEPF, 0x01)      // Serial Port F
/*** BeginHeader */
#endif
/*** EndHeader */
//checksum:FA71

  riportato dopo la firma.
Perché dopo la firma? Almeno chi risponde non può commentarlo o per
farglielo leggere, su molti newsreader, con font o colori balenghi?

 farglielo leggere, su molti newsreader, con font o colori balenghi?
Lo facevo solo per comodità, per concludere il messaggio senza 
intercalarlo con il codice piuttosto lungo della funzione. Che per 
alcune configurazioni di newsreader questo rappresentasse un problema 
non ne ero a conoscenza. D'ora in poi posterò tutto "in-line".
Ciao,
Marco / iw2nzm

 Marco / iw2nzm
Già, non avevo notato che tu non usi mai detto delimitatore. L'hai fatto
una volta sola, e a sproposito. :-|

 una volta sola, e a sproposito. :-|
Se volete lo aggiungo non mi costa nulla.
--
Marco / iw2nzm