⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.c

📁 使用MC9S12DG128芯片
💻 C
字号:

#include "includes.h"

INT8U DataSPI[3];

INT8U FlagSPI = ON;

INT8U  LengthData ;
/******************************************************************
SPI.h
use this function to transfer the data,use the SPI0
******************************************************************/



/***************************************/

void SPI_Func(void) {

    INT8U LcdSPI[] = {"Now Display the Function Of SPI "};
       
    LcdWriteAll(LcdSPI);
   
    InitSPI();
    
    StarSPI0();
    
    //SPISend(0x00);
    
    for(;;) {
    
    while (KeyFlag == ON) {
      
      KeyFlag = OFF;
      
      if (ValueKey == Exit) {StopSPI0();return;} 
      
      else if (ValueKey == Enter) { SPISend(0x00,1);}
        
      }
   
    }
  
} 

/**************************************/

#pragma CODE_SEG __NEAR_SEG NON_BANKED

__interrupt void SPI_ISR(void) {

     
    switch (SPI0SR) {
      
    
      case 0x80:  
      
     
        DataSPI[(LengthData-1)] = SPI0DR;
     
        //LengthData--;
     
       // while(LengthData == 0)    {
      
       //     FlagSPI = OFF;
       //
      //      _NOP_
      ///
       //     _NOP_
     
       //     _NOP_
     
            PTS_PTS7 = 1;
            
            StopSPI0();
     
      //      LengthData = ~LengthData;
       // /
      //   }
     
        SPI0SR_SPIF = 1;
     
        break;
     
  case 0x20:
  
      SPI0DR = 0xAA;
  
      break;
  
      default:
      
           break;
  
    }
        
}

/************************************/


#pragma CODE_SEG DEFAULT


void InitSPI(void)

{
   MODRR = 0;//PS4-7  //1:PS2-5
   
   SPI0CR1 = (SPI0CR1_SPIE_MASK 
   
   //+  SPI0CR1_SPTIE_MASK
   
   //+ SPI0CR1_SSOE_MASK 
   
   //+ SPI0CR1_CPHA_MASK 
   
   //+ SPI0CR1_CPOL_MASK
   
   + SPI0CR1_SPTIE_MASK
   ); 
   
   MasterSPI0();
   
   //SPI0CR2 = SPI0CR2_MODFEN_MASK ;
  
   //SPI0BR = 0B10000100;
   
   //SPI0BR = 0x03;
   
   //SPI0BR_SPR2 = 1; 
   
   DDRS_DDRS7 = 1;
   
   PTS_PTS7 = 1;
   
   
   
   
}

/**********************************
void SPIsend(byte ch)
{
  SPI0CR1   =   0b01010010;
  SPI0CR2   =   0b00010000;
  SPI0BR    =   0b00000011;
                                      //the vesion of hyj.The s12 is master.no interrupt.
  
  
  while(!SPI0SR_SPTEF){};
  SPI0DR    =   ch;  
}
  
*************************************/

/*******************************************/
INT8U *SPISend(INT8U ch,INT8U i)

{

   
    INT8U *pP;
    
    ch = 0;
    
    InitSPI();
    
   StarSPI0();
    
    LengthData = i ;
    
    PTS_PTS7 = 0;
    
    _NOP_
    
    _NOP_
    
    _NOP_
    
/*while (FlagSPI){

    while(!SPI0SR_SPTEF) {};
  
    SPI0DR = ch;
    
    //ch = 0xFF;
    
 } */
 
 FlagSPI = ON; 
 
 pP = DataSPI;
 
 return  (pP);
 
  
}
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -