STC8单片机OLED通过SPI硬件中断方式驱动(上)

说明一点直接就是怎么用没有重点讲SPI原理,很多博主已经把原理讲的很好了这里就不提了,后面会补上。

第一点为啥要用中断方式进行,而不用轮询?

目前很多博主都是用轮询的方式进行SPI通信,但是这样的效率比较低,浪费单片机的算力,再加上STC8A8K64S4A12没有硬件DMA,所以选择中断方式。

第一我们先看说明书上咋说的

 

驱动一块OLED那肯定是单主单从方式,然后再看看应该配置的寄存器

 

根据说明书SPSTAT寄存器那就很好配置了,再void SPI_Init()初始化函数中就直接全部写0,那就是SPSTAT = 0X00;

再看看第二个应该配置的 

看到这里有些刚刚学SPI肯定一脸懵逼,我们接着看说明书

 

这不就一目了然了,单片机肯定是主机模式了这样就解决了控制寄存器的B7、B4两位了,我们再接着看说明书,后面的几个小节先不用理会,我们直接跳到数据模式,,

 

乍一看这是啥,这个得配合OLED的传输模式进行配置,这里说明一点MOSI是(Master output slave input )翻译过来就是主机输出,从机输入,MISO反之,

到这里很多小伙伴还是一脸懵逼我该咋选,当时我学的时候也是这样,这时候我们要去看OLED的说明书,说白了就是SSD1306的说明手册。

 然后就是连连看,会发现跟主机模式1惊人的一致,好家伙到这里基本配置就一目了然了。

直接上代码


void SPI_Init()
{
    SPDAT = 0X00;  //数据寄存器清0
    SPSTAT = 0XC0; //写冲突标志位清零
    SPCTL = 0xD0;  //使能SPI主机模式,SPI使能控制位打开,先发送\接收数据的高位,频率4分频,SCLKL空闲时为低电平
    IE2 = ESPI;    //使能SPI中断
    EA = 1;        //中断使能
}

还有一个SPEN不知道咋配置,根据自己需求来选择分频,这里我就选择4分频。

到此我们的中断方式的SPI就完成了初始化,下面的配置看下一篇文章。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅哥的小迷弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值