微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ATmega8---SPI总线控制

ATmega8---SPI总线控制

时间:11-27 来源:互联网 点击:
开发中对ATmega8外设SPI总线使用:

在发送数据之前都处于从模式,处于接收状态。在发送的时候,需要进入主模式,完成发送之后再进入从模式。

以下为操作函数:

interrupt [SPI_STC] void spi_interrupt(void)

{

//uchar tmp;

uchar i,b;

//tmp=SPSR;

b=SPDR;

r_buf[0]=r_buf[1];

r_buf[1]=r_buf[2];

r_buf[2]=r_buf[3];

r_buf[3]=r_buf[4];

r_buf[4]=r_buf[5];

r_buf[5]=b;

if((r_buf[0]==0xff)&&(r_buf[5]==0xaa))

{

r_full=1;

r_data[0]=r_buf[0];

r_data[1]=r_buf[1];

r_data[2]=r_buf[2];

r_data[3]=r_buf[3];

r_data[4]=r_buf[4];

r_data[5]=r_buf[5];

}

if(r_full)

{

r_full=0;

if(r_data[1]!=99)return;

switch(r_data[2])

{

case 3:

case 0x31:

if((r_data[4]>16)||(r_data[3]>16))return;

if(r_data[3]==0)return;

else if(r_data[4]==0)

{

for(i=0;i<16;i++)

{

tmp_ddc[i]=r_data[3];

}

}

else

{

tmp_ddc[r_data[4]-1]=r_data[3];

}

break;

default:

break;

}

}

}

//-------------------------------------------------

void spi_init_s() //在没有通讯之前,处于从模式

{

DDRB.4=1;

DDRB.2=0;

PORTB.2=1;

DDRB.3=0;

DDRB.5=0;

SPCR=0XC0;

}

void spi_init_m()

{

DDRB.4=0;

DDRB.2=1;

DDRB.3=1;

DDRB.5=1;

SPCR=0x52;

SPSR=0X01;

}

//-------------------------------------

void send_spi()

{

uchar i;

while(PINB.2==0){;}

spi_init_m();

#asm("cli")

PORTB.2=0;

delay_ms(1);

for(i=0;i<2;i++)

{

SPDR=video_new[i];

#asm("wdr")

while((SPSR&0X80)!=0X80);

}

delay_ms(10);

PORTB.2=1;

#asm("sei")

spi_init_s();

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top