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

📄 spi_master.c

📁 MPC82xx系列SPI Demo, 採用Keilc 開發,完整source code
💻 C
字号:
/* Megawin "SPI process" demo code
 * Edited by: Peter Lin 
 * Mail: peter@megawin.com.tw
 * tel:03-5750050
 */

/*include megawin header file */
#include "reg82xx.h"
char serial_data;
char data_example=0x55;
char data_save;
bit transmit_completed= 0;
sbit test_SCON= P2^4;

/**
 * FUNCTION_PURPOSE: This file set up spi in master mode 
 * FUNCTION_INPUTS: P1.6(MISO) serial input
 * FUNCTION_OUTPUTS: P1.5(MOSI) serial output
 * FUNCTION_OUTPUTS: P1.4(/SS)=0 slave selected/=1 master selected
 */
void init_spi(void)
{
P1M0 = 0x00;
P1M1 = 0x00;
SPICTL = 0x00;                 /*clear SPI Control register */
SPICTL |= 0xC0;                /*SSIG = 0 ,SPEN = 1,Slave Mode without SS Pin*/
P1_4=0;                        /* SS Pin pill low */ 
SPICTL |= 0x02;                /* Fclk Periph/128 */
SPICTL &= ~0x08;               /* CPOL=0; transmit mode example */
SPICTL |= 0x00;                /* CPHA=1; transmit mode example */
AUXR |= 0x80;                  /* enable spi interrupt */
SPICTL |= 0x40;                /* run spi */
ESPI_ADC = 1;                  /* enable SPI/ADC interrupt */
}

// initialization UART 
void init_uart(void)
{
 TMOD=0x21;
 SCON=0x50;                  // Crystal as 11.0592Mhz
 TH1=0xFD;                    //Configure Timer1, so to set UART to operate at buad rate 9600
 TL1=0xFD;
 PCON=0x80;
 TCON=0x45;	
 RI=0;
 ES=1;
}

void SCON_int (void) interrupt 4  
 
{
 if(TI)                            
  {      
   test_SCON ^=1;
   TI=0;                             
   REN=1;                            
  }
 else
   {   
   RI=0;                           
   SPIDAT=SBUF;
   while(SPISTAT & 0x80 == 0);   
   } 	   
}


/**
 * FUNCTION_PURPOSE:interrupt
 * FUNCTION_INPUTS: void
 * FUNCTION_OUTPUTS: transmit_complete is software transfert flag
 */
void it_SPI(void) interrupt 9 /* interrupt address is 0x004B */
{
	switch	( SPISTAT & 0xC0)         /* read and clear spi status register */
	{
		case 0x80:
         TI  = 0;
         SBUF=SPIDAT;   /* read receive data */
         transmit_completed=1;/* set software flag */
         SPISTAT = 0xC0;   //clear spistat flag
 		break;

		case 0x10:
         /* put here for mode fault tasking */	
		break;
	
		case 0x40:
         /* put here for overrun tasking */	
		break;
	}
    SPISTAT |= 0xC0;    // clear SPIF Flag
}



void main(void)
{
init_spi();
init_uart();
EA=1;                                 /* enable interrupts */
transmit_completed = 0;    /* clear software transfert flag */

	while(1)			 
   {
  
if(transmit_completed)
   {
   SPIDAT = serial_data;       /* echo data to master */
   transmit_completed = 0;    /* clear software transfert flag */
   
   }
  }
}

⌨️ 快捷键说明

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