|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 慕名而来 于 2019-5-11 15:37 编辑
先将自己理解的分享给大家:
STC12单片机的硬件SPI操作涉及三个寄存器,分别是控制寄存器SPCTL、状态寄存器SPSTAT、数据寄存器SPDAT,其中最复杂的是控制寄存器,设置控制寄存器的时候需要清楚被控SPI器件的时钟相位或者器件的SPI操作模式,对于W25Q64而言,他是在总线空闲状态时钟为低电平在上升沿采集数据,也就是前沿采样或第一个边沿采样后沿输出;说白了就是上跳脉冲触发,在已知这些后再来设置控制寄存器就简单了,直接SPCTL=0xD0(1101 0000)就好了,再说说这个数据的含义,7-0位依次为:SSIG=1忽略/SS由MSTR位决定主/从机;SPEN=1使能SPI;DORD=0高位先行;MSTR=1主机模式;CPOL=0、CPHA=0上跳脉冲前沿采集后沿输出;SPR1=0、SPR0=0总线时钟频率为单片机时钟4分频。
接下来说说状态寄存器,这个寄存器仅用到7、6两个位,第7位SPIF在输出传输一次完成时会自动置位为0,第6位是写冲突位,会在数据寄存器进行写操作是置位为0,这两个位需要软件写1清除标志。最后一个是数据寄存器,总线中无论是向器件写数据还是在总线上读取数据,都是通过这个寄存器来完成的,其他就没啥可说的了,具体例程可以参照数据手册就不贴了。
以上只是新手的学习心得,如有谬误请及时指正以免误导他人!
再把不懂的提出来请教大家:
以下是关于代码原理的问题,还请高手不吝赐教,先谢了!
1.对于清除标志位的操作,代码写作SPSTAT =0xc0;//1100 0000 这样就将寄存器中最高两位SPIF WCOL的0清除了;
而样例中写作SPSTAT = SPIF | WCOL;看着很高大上,但我真心没明白。
2.对于控制寄存器的设置,按照我上述文字描述的情形,只要SPCTL=0xD0(1101 0000)就好了,
而样例中写作SPCTL = SPEN | MSTR;这个我也不明白。
|
打赏
-
查看全部打赏
|