初级会员

- 积分
- 54
- 金钱
- 54
- 注册时间
- 2013-4-20
- 在线时间
- 0 小时
|
单片机部分:
#include "spi.h"
#include "sys.h"
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/*SPI1 pins: SS,SCK and MOSI ---------------------------------*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
uint8_t SPI_Read_Write(uint8_t data)
{
uint8_t i=0,receive=0,temp;
// SS_L(); //ss low
for(i=0;i<8;i++)
{
receive<<=1;
temp=data&0x80;
if(temp==0x80)
{
GPIO_SetBits(GPIOA,GPIO_Pin_6);
}
else
{
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
}
GPIO_SetBits(GPIOA,GPIO_Pin_4); //SCK
GPIO_SetBits(GPIOA,GPIO_Pin_4);
GPIO_SetBits(GPIOA,GPIO_Pin_4);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
if(MISO==1) //MISO
{
receive|=0x01;
}
else
{
receive&=~0x01;
}
data=data<<1;
}
return receive;
}
void SPI_Write_Byte(uint8_t data)
{
SPI_Read_Write(data);
}
uint8_t SPI_Read_Byte(void)
{
return SPI_Read_Write(0x00);
}
void SPI_Write_4Byte(uint32_t data)
{
uint8_t data0,data1,data2,data3;
data0=(uint8_t)data;
data1=(uint8_t)(data>>8);
data2=(uint8_t)(data>>16);
data3=(uint8_t)(data>>24);
GPIO_ResetBits(GPIOA,GPIO_Pin_3); //SS
SPI_Read_Write(data3);
SPI_Read_Write(data2);
SPI_Read_Write(data1);
SPI_Read_Write(data0);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
}
主函数就是一句话:SPI_Write_4Byte(6);
FPGA部分:
module spi_comm(sck,mosi,miso,ss,data_out,data_in,rst_n);
input sck,mosi,ss,rst_n;
input [31:0] data_in;
output miso;
output[31:0] data_out;
reg miso;
reg[4:0] bit_count;
reg[31:0] data_out,rxd;
always@(posedge sck)
begin
if(ss==0)
miso=data_in[31-bit_count];
end
always@(negedge sck or posedge ss)
begin
if(ss)
bit_count=0;
else
begin
rxd=rxd<<1;
rxd[0]=mosi;
if(bit_count==31)
data_out=rxd;
else data_out=32'h00000000;
bit_count=bit_count+1;
end
end
endmodule
目的是当FPGA接收到6的时候数码管显示数字,但是不成功,求大神指教!! |
|