| 
				打卡等级:以坛为家III打卡总天数:657最近打卡:2025-10-31 08:27:32   荣誉版主 
 
	积分4469 
 | 
 
 发表于 2024-4-24 17:02:22
|
显示全部楼层 
| 楼上朋友,谢谢浏览回复.
 说到普通IO模拟SPI或硬件SPI接口方式上有何不同,我个人理解是:
 主要就是在输出字节的方式有所不同, 速度不同.
 硬件SPI方式, 输出一个字节,一次写出一字节, 剩下的就是硬件按既定时序发送了, 速度快, 源码简单. (但要了解各种CUP的SPI寄存器定义用法, 并且要确定所选用的IO口,必须是具有硬件SPI功能的口.)
 普通IO模拟SPI方式, 要完成输出一个字节, 就是循环八次,每次只将一个位移出,消耗的指令周期长了. 所以速度就慢了. (端口不需要一定具有硬件SPI功能,便于移植)
 
 
 现就以下这段代码, 加上注释, 再看不同点...
 
 #if(UseSPI)                               //如果是选择硬件SPI方式.
 SPDAT = Dat;                         //将一个字节数据放入寄存器SPDAT中,
 while(SPIF == 0);                   //等待硬件SPI发送完毕...(要了解SPIF标志位的定义用法)
 SPIF = 1;                                //清SPIF标志
 WCOL = 1;                              //清WCOL标志
 #else                                        //如果采用普通IO模拟SPI方式
 for(i=0;i<8;i++)                     //循环八次
 { if(Dat&0x80)OLED_SDA=1;   //根据最高位是1,输出端口电平为1
 else              OLED_SDA=0;  //根据最高位是0,输出端口电平为0
 Dat <<= 1;                         //左移一位
 OLED_SCK = 1;                   //给个脉冲推出: 时钟0->1跳变
 OLED_SCK = 0;                   //时钟1->0跳变
 }                                          //完成一字节的输出...
 #endif                                    //结束条件编译...
 
 两种方式各有特点: 模拟方式,便于移植,速度慢. 硬件方式,速度快,对端口功能有要求.
 设计具体项目时,条件允许的话,优先选用硬件SPI方式.
 仅供参考...
 
 
 
 
 | 
 |