13年3个月前IP:未同步
646391
90楼
本帖最后由 神之觉醒 于 2013-9-28 20:34 编辑

SPI收发器1.jpg
SPI收发器,需要时钟输入,最高收发速率为输入时钟的4分频;

SPI的收发速率可以在I/O空间FF05H单元设置,高4位为SPI速率设置,0XH(X为SPI设备片选,后面说明)为最高收发速率,主时钟的4分频,1XH为8分频,2XH为16分频,3XH为32分频。

CPU有直接的位输出控制,BIT0、BIT1、BIT2、BIT3、BIT4、BIT5,可以直接用指令置1置0。

BIT2置0、BIT3置1时SPI的SO输出线始终为1,BIT2置1、BIT3置0时SPI的SO输出线始终为0,BIT2置1、BIT3置1时SPI的SO输出线正常输出数据;

要使用SPI收发器发送数据,先把BIT0置1,SPI收发器为置数状态,然后在I/O空间FF04H地址写入要发送的数据,最后把BIT0置0,SPI收发器为收发状态,再把BIT1置1、置0,启动SPI发送,如果想要知道发送是否完成,可以查询I/O空间FF05H的第6位,为0表示发送完成,如果不用查询,可以自己掌握指令周期估算发送状态,假如SPI的速率为CPU主时钟的4分频,而且本CPU的指令周期为8个时钟,那就是每执行1条指令SPI发送两位,在把BIT1置1(发送开始)、置0后,再经过3条指令即可再次操作SPI ,这3条指令可以放NOP空操作,或是别的神马操作。。要是连续发送数据的话,这是个很好的机会,你可以用SPI忙的这个时间,从内存读出数据到累加器A,这时SPI正好发送完成,又可以继续装数据发送撩~ 效率杠杠的。。。[s:420]


SPI收发器接收数据,BIT0必须是0(SPI收发器为收发状态), 再把BIT1置1、置0,启动SPI接收,和上面一样,查询、估算。。。确定SPI接收状态,然后从I/O空间FF04H地址读出接收到的数据;如果连续接收数据,可以把数据读到累加器A之后马上再次启动SPI接收,然后把累加器A的数据存放好,这时SPI又正好接收完成,效率杠杠杠杠。。。[s:427]

LED是指示SPI收发器上面移位寄存器的数据;


SPI收发器2.jpg

飞线飞线飞线飞线飞线。。。。。
评论
文号 / 646391

千古风流
名片发私信
学术分 4
总主题 71 帖总回复 1168 楼拥有证书:学者 机友 笔友
注册于 2011/08/12 17:13:20最后登录 2022/12/22 11:43:34
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的