SPITXBUF=(CHANNEL<<14)|(RNG<<13)|(SPI_DATA<<5)

[复制链接]
查看11 | 回复1 | 2014-5-19 23:32:22 | 显示全部楼层 |阅读模式
为什么CHANNEL是左移14 RNG是左移13位
能用其他的吗?
void DA_OUT(unsigned CHANNEL,unsigned int RNG,unsigned int SPI_DATA)
{

unsigned char flag=0;

SPITXBUF=(CHANNEL<<14)|(RNG<<13)|(SPI_DATA<<5) ;
//bit10,9~CHANNEL;bit8~RNG倍数

while(1)

{

flag=SPISTS&0x40;

if(flag==0x40)
break;

}

SPIRXBUF=SPIRXBUF;/*虚读寄存器以清除中断标志*/


PFDATDIR=PFDATDIR & 0xFFDF;//LOAD=0,更新模拟信号输出

for(i=0;i<5;i++);
//延时

PFDATDIR=PFDATDIR | 0x0020;
//LOAD=1,锁存数据


}

回复

使用道具 举报

千问 | 2014-5-19 23:32:22 | 显示全部楼层
串行数据长度设置的是11bit,当传输数据长度小于16位的,数据写入SPIDAT或者SPITXBUF时,必须左对齐,因此对数据进行了左移的操作,将15bit~5bit之间的数据放到了SPITXBUF中后启动数据传输,从SPIRXBUF读回时是右对齐的。在SPI_Init() 程序中对SPI进行了复位操作(SPICCR=0x004a),应该就是将SPITXBUF清零了吧~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行