#define W25X_WriteEnable 0x06
#define W25X_ReadData 0x03
#define W25X_PageProgram 0x02
#define W25X_DO GPIO_PIN_2
#define W25X_CLK GPIO_PIN_3
#define W25X_DI GPIO_PIN_4
#define W25X_CS GPIO_PIN_5
void SPI_RW(unsigned char byte)
{
GPIOPinWrite(GPIO_PORTA,W25X_CS, 0x00);
unsigned char bit_ctr,a;
for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
{
if(0X80 == (byte & 0x80))
GPIOPinWrite(GPIO_PORTA,W25X_DI, 0xff);
else
{
GPIOPinWrite(GPIO_PORTA,W25X_DI, 0x00);
}
byte = (byte << 1); // shift next bit into MSB..
GPIOPinWrite(GPIO_PORTA,W25X_CLK, 0xFF);
GPIOPinWrite(GPIO_PORTA,W25X_CLK, 0x00); // ..then set SCK low again
}
}
unsigned char SPI_RE()
{
GPIOPinWrite(GPIO_PORTA,W25X_CS, 0x00);
unsigned char bit_ctr,a;
for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
{
GPIOPinWrite(GPIO_PORTA,W25X_CLK, 0xff);
if((0X10 & GPIOPinRead(GPIO_PORTA_BASE , 0xff))==0X10)
a |=1;
else
a&=~1;
GPIOPinWrite(GPIO_PORTA,W25X_CLK, 0x00);
a = (a << 1);
}
return (a);
}
int main(void)
{
uchar a;
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MH
SysCtlPeriEnable(GPIOA);
GPIOPinTypeOut(GPIO_PORTA, W25X_CS);
GPIOPinTypeOut(GPIO_PORTA, W25X_CLK);
GPIOPinTypeIn(GPIO_PORTA, W25X_DO);
GPIOPinTypeOut(GPIO_PORTA, W25X_DI);
while(1)
{
SPI_RW(0x06); //写使能命令
SPI_RW(0x02); //写命令
SPI_RW(0x00); //地址23-16位
SPI_RW(0x01); //地址15-8位
SPI_RW(0x00); //地址7-0位
SPI_RW(0xa5); //待发数据
SPI_RW(0x03); //读使能
SPI_RW(0x00); //地址
SPI_RW(0x01);
SPI_RW(0x00);
a=SPI_RE(); //读出数据 这个地方总是没有数据输出??????
}
}
麻烦各位大侠帮忙看看, 别人的程序我也看过了,也是这样模拟的,但我的就是不行。
望指点,十分感谢! |