spi_com.h

来自「使用MC9S12DP256写的CAN转串口程序。」· C头文件 代码 · 共 89 行

H
89
字号
#define SUCCESS						0
#define SPI_EEPROM_ERROR 			1
#define ONCHIP_EEPROM_ERROR 		2

uchar CMD(uchar op_code)
{
	uchar temp;	
	ulong error_count = 0;
	
	SPI2DR = op_code;
	temp = SPI2DR;
	while(SPI2SR_SPIF == 0)
	{	
		error_count++;
		if(error_count >= TIME_OUT)
			return SPI_EEPROM_ERROR;//操作超时,返回 SPI_EEPROM_ERROR.
	}	
	
	return SUCCESS;
}

//连续写,中间需要延时。
uchar Write(uint address,uchar m_data)
{
	SS_0;
	if(CMD(0x06) != SUCCESS)
		return SPI_EEPROM_ERROR;//	写使能
	SS_1;	
	
	SS_0;	
	if(CMD(0x02) != SUCCESS)		
		return SPI_EEPROM_ERROR;//	写命令0x02		
	if(CMD(address>>8) != SUCCESS)
		return SPI_EEPROM_ERROR;//	传输高八位地址
	if(CMD(address) != SUCCESS)	
		return SPI_EEPROM_ERROR;//	传输低八位地址
	if(CMD(m_data) != SUCCESS)	
		return SPI_EEPROM_ERROR;//	传输数据
	SS_1;
	
	Delay(1000);//如果进行了2倍频,则需要加上这条延时语句
	return SUCCESS;//操作成功,返回SUCCESS.
}

uchar Page_Write(uint address,uchar * p_data,uchar size_of_data)
{
    uchar j=0;
	
	SS_0;
	if(CMD(0x06) != SUCCESS)
		return SPI_EEPROM_ERROR;//	写使能
	SS_1;	
	
	SS_0;
	if(CMD(0x02) != SUCCESS)		
		return SPI_EEPROM_ERROR;//	写命令0x02	
	if(CMD(address>>8) != SUCCESS)
		return SPI_EEPROM_ERROR;//	传输高八位地址
	if(CMD(address) != SUCCESS)	
		return SPI_EEPROM_ERROR;//	传输低八位地址	
    for(j=0;j<size_of_data;j++)
        if(CMD(p_data[j]) != SUCCESS)
        	return SPI_EEPROM_ERROR;//传输数据
    SS_1;
    
    return SUCCESS;//操作成功,返回SUCCESS.
}

uchar Read(uint address,uchar * read_result)
{
	SS_0;	
	if(CMD(0x03) != SUCCESS)		
		return SPI_EEPROM_ERROR;//	读命令0x02	
	if(CMD(address>>8) != SUCCESS)
		return SPI_EEPROM_ERROR;//	传输高八位地址
	if(CMD(address) != SUCCESS)	
		return SPI_EEPROM_ERROR;//	传输低八位地址
	if(CMD(0) != SUCCESS)			
		return SPI_EEPROM_ERROR;//	任意启动一个传输,接收数据
	
	SS_1;
	Delay(1000);//如果进行了2倍频,则需要加上这条延时语句
	*read_result = SPI2DR;
	
	return SUCCESS;//操作成功,返回SUCCESS.
}


⌨️ 快捷键说明

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