Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.08 KB | None | 0 0
  1. /**********************************************************************************************************
  2.     File: SPI.c
  3.     Description: simple interface to the SPI bus
  4. **********************************************************************************************************/
  5.     #include "HtlStddef.h"
  6.     #include "SPI.h"
  7.     #include <avr/io.h>
  8.     #include <string.h>
  9.     #define  uselessData 0x00;
  10.     unsigned int help;
  11.    
  12.     TBool
  13.     SPIInit(TSPI_Mode aSPIMode){
  14.        
  15.         DDRB    |= ((1<<PB4) | (1<<PB5) | (1<<PB7));
  16.         PORTB   &= ~(0xFF);
  17.         SPIgetDefaultValue(&aSPIMode);
  18.        
  19.          DDRB |= (1<<PB4)|(1<<PB5)|(1<<PB7);
  20.          DDRB &= ~(1<<PB6);
  21.          SPCR |= (1<<SPE);
  22.          PORTB|= (1<<PB4);
  23.  
  24.          //PRESCALER
  25.          if(aSPIMode.Prescaler>3)
  26.          SPSR |= (1<<SPI2X);
  27.          else
  28.          SPSR &= ~(1<<SPI2X);
  29.  
  30.          SPCR |= ((0b011&&aSPIMode.Prescaler)<<SPR0);
  31.  
  32.          //POL
  33.          if(aSPIMode.Cpol)
  34.          SPCR |= (1<<CPOL);
  35.          else
  36.          SPCR &= ~(1<<CPOL);
  37.  
  38.          //PHA
  39.          if(aSPIMode.Cpha)
  40.          SPCR |= (1<<CPHA);
  41.          else
  42.          SPCR &= ~(1<<CPHA);
  43.  
  44.          //DATAODER
  45.          if(aSPIMode.DataOrder)
  46.          SPCR |= (1<<DORD);
  47.          else
  48.          SPCR &= ~(1<<DORD);
  49.  
  50.          //MASTER SLAVE
  51.          if(aSPIMode.MasterSlave)
  52.          SPCR |= (1<<MSTR);
  53.          else
  54.          SPCR &= ~(1<<MSTR);
  55.  
  56.          return ETRUE;
  57.     }
  58.    
  59.     void  SPIgetDefaultValue(TSPI_Mode* aSPIMode){
  60.     memset( aSPIMode, 0, sizeof(TSPI_Mode));
  61.             aSPIMode->IntEnable     = DISABLE_INTERRUPT;
  62.             aSPIMode->Enable        = ENABLE;
  63.             aSPIMode->Prescaler     = E_SPI_Prescaler_2;
  64.             aSPIMode->Cpol          = ECPOL_RISING;
  65.             aSPIMode->Cpha          = EPHCA_LEAD_SAMPLE;
  66.             aSPIMode->DataOrder     = EDATAORDER_LSB_FIRST;
  67.             aSPIMode->MasterSlave   = EMASTER;               
  68.     }
  69.    
  70.     TBool SPIWriteByte(unsigned char aByte){
  71.         PORTB   &= ~(1<<PB4);
  72.         SPDR    = aByte;
  73.         while(!(SPSR & (1<<SPIF)));
  74.         PORTB  |= (1<<PB4);
  75.         return ETRUE;
  76.     }
  77.     TBool SPIReadByte (unsigned char* aByte){
  78.         PORTB  &= (1<<PB4);
  79.         SPDR     = uselessData;
  80.         while(!(SPSR&(1<<SPIF)));
  81.         *aByte   = SPDR;
  82.          PORTB  |= (1<<PB4);
  83.         return ETRUE;
  84.     }
  85.     TBool SPIReadWriteBuffer(unsigned char* aReadBuffer, unsigned char* aWriteBuffer, unsigned char aSize){
  86.        
  87.        
  88.        
  89.         return ETRUE;
  90.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement