在线时间390 小时
UID3007495
注册时间2015-12-22
NXP金币129
TA的每日心情 | 擦汗 2021-7-5 15:45 |
---|
签到天数: 664 天 连续签到: 1 天 [LV.9]以坛为家II
金牌会员
 
- 积分
- 5618
- 最后登录
- 2021-12-22
|
发表于 2017-12-7 16:39:29
|
显示全部楼层
本帖最后由 okwh 于 2017-12-7 17:04 编辑
网上有无数例子,搞明白一个,所有的都明白了:
例如:
先PINMUX, bing设置IO模式, 并设置好IO方向
然后: 循环下列内容
gpio_set(GPIO_CS, 0);/* start */
//delay(xxxx);
void spi_write_byte(uint8_t data)
{
int i = 0;
for(i = 7; (i >= 0)&&(i <= 7); i--) {
gpio_set(GPIO_CLK, 0); //时钟下沿 开始去写 , 留时间
//delay(xxx);
gpio_set(GPIO_MOSI, (data >> i) & 0x01);
//delay(xxxx);
gpio_set(GPIO_CLK, 1); //时钟上升沿 后 留时间让对方读
//delay(xxxx);
//需要时这时 己方 读MISO 就是读了.
}
return;
}//delay(xxxx);
gpio_set(GPIO_CS, 1); /* stop */
用示波器观察,在需要的地方增加 延迟, 查器件手册,确定 CLK 高低 和IO的顺序 排列的关系, 这个关系决定了使用的是哪种SPI模式. 其实就是CLK决定串行序列中 什么时候写, 什么时候读 .
SPI的核心就是 时钟控制节奏
在一个SPI时钟周期内(一个周期是一高一低或一低一高),会完成如下两种操作序列或其一:
1) MOSI: 主机通过MOSI线发送1位数据,从机通过该线读取这1位数据;
2) MISO: 从机通过MISO线发送1位数据,主机通过该线读取这1位数据。
时钟 沿jump 实现触发, level保持期间 完成操作, 数据存在一个周期. 一个周期有两个jump, 两个level, 完成两种操作-读写
|
|