首页 > 代码库 > GPIO模拟SPI
GPIO模拟SPI
上次用gpio模拟i2c理解i2c协议,同样的,我用gpio模拟spi来理解spi协议。
我用的是4线spi,四线分别是片选、时钟、命令/数据、数据。
数据在时钟上升沿传递,数据表示的是数据还是命令由命令/数据线决定。
开始条件:
void spi_start(void) { gpio_config(GPIO_CS, GPIO_OUTPUT); udelay(SPI_SPEED_DURATION); gpio_set(GPIO_CS, 0);/* start condition */ udelay(SPI_SPEED_DURATION); }
结束条件:
void spi_stop(void) { gpio_set(GPIO_CS, 1); /* stop condition */ udelay(SPI_SPEED_DURATION); }
数据传输:
void spi_txdata_byte(uint8_t data) { int i = 0; for(i = 7; (i >= 0)&&(i <= 7); i--) { gpio_set(GPIO_CLK, 0);//时钟上升沿传递数据 udelay(SPI_SPEED_DURATION); if(i == 7) { gpio_config(GPIO_MOSI, GPIO_OUTPUT); udelay(SPI_SPEED_DURATION); } gpio_set(GPIO_MOSI, (data >> i) & 0x01); udelay(SPI_SPEED_DURATION); gpio_set(GPIO_CLK, 1); udelay(SPI_SPEED_DURATION * 2); } return; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。