论坛元老
 
- 积分
- 3448
- 金钱
- 3448
- 注册时间
- 2017-7-4
- 在线时间
- 869 小时
|
发表于 2017-9-12 10:26:44
|
显示全部楼层
[mw_shl_code=c,true]struct ops_spi_dev
{
void (*set_cs)(int8_t state);
void (*set_data)(int8_t state);
void (*set_clk)(int8_t state);
int8_t (*get_data)(void);
void (*delayus)(uint32_t us);
};
int8_t ops_spi_xfer(struct ops_spi_dev *spi_bus,int8_t write_data)
{//高位在前,空闲时钟为低电平,上升沿获取数据
int8_t recv_data,i;
spi_bus->set_cs(0);
for(i = 7; i >= 0; i--)
{
if((write_data >> i) & 0x01)
spi_bus->set_data(1);
else
spi_bus->set_data(0);
spi_bus->set_clk(0);
spi_bus->delayus(1);
spi_bus->set_clk(1);
spi_bus->delayus(1);
if(spi_bus->get_data())
recv_data |= 1<<i;
else
recv_data &= ~(1<<i);
spi_bus->delayus(1);
}
spi_bus->set_cs(0);
spi_bus->set_clk(0);
return recv_data;
} [/mw_shl_code]
以上,通用所有mcu模拟spi,不同的mcu初始化一个struct ops_spi_dev即可。 |
|