📄 spi_master.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 + -