spi_master.c

来自「基於Full Speed USB Controller 1T 8051的SPI控」· C语言 代码 · 共 80 行

C
80
字号
/* Megawin "SPI process" demo code
 * Edited by: Peter Lin 
 * Mail: peter@megawin.com.tw
 * tel:03-5750050
 */

/*include megawin header file */
#include "MG84FL54.h"


/**
 * 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)
{
// CKCON |= 0x28;                 /* If Crystal = 12Mhzs */
P2M0 = 0x00;				   /* Quasi-bidirection */
P2M1 = 0x00;
SPICTL = 0x00;                 /*clear SPI Control register */
SPICTL |= 0xC0;                /*SSIG = 0 ,SPEN = 1,Slave Mode without SS Pin*/
P2_4=0;                        /* SS Pin pill low */ 
SPICTL |= 0x02;                /* Fclk Periph/8 */
SPICTL &= ~0x08;               /* CPOL=0; transmit mode example */
SPICTL |= 0x00;                /* CPHA=1; transmit mode example */
AUXR |= 0x80;                  /* enable spi interrupt */
SPICTL |= 0x40;                /* run spi */
AUXIE |= 0x01;                 /* Enable  SPI Interrupt */
}



/**
 * FUNCTION_PURPOSE:interrupt
 * FUNCTION_INPUTS: void
 * FUNCTION_OUTPUTS: transmit_complete is software transfert flag
 */
void it_SPI(void) interrupt 8 /* interrupt address is 0x0043 */
{
	switch	( SPISTAT & 0xC0)         /* read and clear spi status register */
	{
		case 0x80:
   /* TO DO */
         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();

EA=1;                                 /* enable interrupts */

	while(1)			 
   {
  

  
   SPIDAT = 0xAA;             /* echo data to master */
  
   
  
  }
}

⌨️ 快捷键说明

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