Ynt: dsPIC33FJ32MC204 Sd(MMC) Kart nasıl bağlanır

Başlatan rree, 01 Ekim 2012, 16:42:46

rree

 dsPIC33FJ32MC204   pdf inde bir adet spi var olduğunu söylüyor.
   Fakat pin  uçlarında SDA,SDO ,SDİ,SCLK,SS  uçları yok. Bir kaç gündür pdf bakıyorum.
   RPORx diye bir register var sanırım çıkış yapıyor.
Function     RPnR<4:0>       Output Name
NULL            00000                RPn tied to default port pin
U1TX            00011                RPn tied to UART1 Transmit
U1RTS          00100                RPn tied to UART1 Ready To Send
SDO1           00111                RPn tied to SPI1 Data Output
SCK1OUT     01000                RPn tied to SPI1 Clock Output
SS1OUT       01001                RPn tied to SPI1 Slave Select Output
OC1            10010                 RPn tied to Output Compare 1
OC2            10011                 RPn tied to Output Compare 2
UPDN          11010                RPn tied to QEI direction (UPDN) status

Çıkış için bunları anlatıyor ben bir cümle bile tercüme edmiyorum.

CCS de register tablosuna baktığımda RPORxx diye register var
Adres  Word        Group  Bit15  Bit14   Bit13     Bit12         Bit11          Bit10       .....
  6D4   RPOR10     Ports    ---      ---      ---      RP21R4     RP20R3       RP20R3    .....

Şeklinde.  Ben RP20  RP21 pini  SDO1   ve   SCK1OUT     çıkış yapmak için
//RP10R=0bXXX00111XXX01000;     gönderen bir komut yazsam sanırım SDO1 ve SCK1OUT   yönlendirmiş olurum düşünüyorum.

  Fakat SDI nasıl oluşacak?
Input Name        Function Name       Register         Configuration
Bits
SPI1 Data Input       SDI1                 RPINR20       SDI1R<4:0>
SPI1 Clock Input      SCK1                 RPINR20       SCK1R<4:0>
SPI1 Slave Select     Input SS1          RPINR21       SS1R<4:0>

Bu tabloyu anlamadım.
ww1.microchip.com/downloads/en/DeviceDoc/70283K.pdf 






mesaj birleştirme:: 01 Ekim 2012, 20:00:45

Main kısmı
  Spi33fjRPxRAyarla(19,SS1OUT);//SDO1 SCK1OUT SS1OUT
  Spi33fjRPxRAyarla(20,SCK1OUT);//SDO1 SCK1OUT SS1OUT
  Spi33fjRPxRAyarla(21,SDO1);//SDO1 SCK1OUT SS1OUT

#if (getenv("DEVICE") =="DSPIC33FJ32MC204") 

   #define RPOR7     0x06CE  //  RP15R4,RP14R4
   #define RPOR8     0x06D0  //  RP17R4,RP16R4
   #define RPOR9     0x06D2  //  RP19R4,RP18R4
   #define RPOR10    0x06D4  //  RP21R4,RP20R4
   #define SDO1     0b00111  //  RPn tied to SPI1 Data Output
   #define SCK1OUT  0b01000  //  RPn tied to SPI1 Clock Output
   #define SS1OUT   0b01001  //  RPn tied to SPI1 Slave Select Output
   
   
   
   
#ENDIF

#if (getenv("DEVICE") =="DSPIC33FJ32MC204")
void Spi33fjRPxRAyarla(Unsigned int8 RP_NO,Unsigned int8 SpiOutName)//SDO1 SCK1OUT SS1OUT
  {
    int8 Sagsol;
    int8 RP_NOF;
    
    
   
    
    
    RP_NOF= RP_NO;
    Temp16D1=RP_NOF>>1;
    Temp16D1=Temp16D1<<1;
    Temp16D1 =0x06C0+Temp16D1;
    
    Rpor_P=Temp16D1;
   
    
    Sagsol= bit_test(RP_NOF,0);
 
 
 
 if (Sagsol==0)
     {
     Temp16D1=*Rpor_P;
     Temp16D1  =0b1111111111100000 & Temp16D1;
     SpiOutNameF=SpiOutName;
     SpiOutNameF=0b0000000000011111 & SpiOutNameF;
     Temp16D1=Temp16D1|SpiOutNameF; 
     *Rpor_P=Temp16D1;
     }
    Else
     {
     Temp16D1=*Rpor_P;
     Temp16D1=0b1110000011111111 & Temp16D1;
     SpiOutNameF=SpiOutName;
     SpiOutNameF=SpiOutNameF<<8;
     SpiOutNameF=0b0001111100000000 & SpiOutNameF;
     Temp16D1=Temp16D1|SpiOutNameF; 
     *Rpor_P=Temp16D1;
     }
 
  }
  
  void Spi33fjRpinrxAyarla(Unsigned int8 RP_NO,Unsigned int8 SpiOutName)//SDO1 SCK1OUT SS1OUT
  {
      ?????????????????
  }
#ENDIF

    SDI kısmı duryor.  Dspic33FJ ler bu şekildemi yapılmalı önce Tris ile iş bitiyordu

rr


esensoy

RPINR20: PERIPHERAL PIN SELECT INPUT REGISTER 20 ile ilgili problemin,
bit 4-0 SDI1R<4:0>:Assign SPI1 Data Input (SDI1) to the corresponding RPn pin bits
11111= Input tied VSS
11001= Input tied to RP25
.
.
.
00001= Input tied to RP1
00000= Input tied to RP0
açıkça bahsetmiş,
bu registerın en düşük beş bitini yani 4:0 arasını ne yaparsan o pinden alıyor SDI'yı,
00000 ise SDI1=RP0
00001 ise SDI1=RP1
SCK1 ise 12:8 de, yani xxx00000xxxxxxxx yazılırsa RP0 a bağlı,
aynı pine aynı hatları bağlamamaya dikkat et,
En tehlikeli an "zafer" anıdır.

rree

# word  RPIN20 = 0x06AB
//                   Bit15       Bit14      Bit13    bit 12         Bit11      Bit10      Bit9       Bit8      Bit7         Bit6
//RPIN20       SCK1R4  SCK1R3  SCK1R2  SCK1R1  SCK1R0  SDI1R4  SDI1R3  SDI1R2  SDI1R1  SDI1R0

void main(){
     
RPIN20 =0b  00000  11000   000000  ;

}

// işlemini uygularsam SCK1  RP0  bağlı      SDI1  RP24 bağlı olmuş olacak

Peki Bu RPXX aktif   etmetmek için başka kayıtcı varmı?  Yukardı işlem ile bağlanmış olacakmıyım.