关于多个spi选择的注意事项!!!

一个工程的Qsys添加了两个SPI的模块,然后就是分别控制的时候有一个经常失效,还以为是管脚给烧了,然后测试下管脚(输出方波)能用,那应该就是软件问题了,然后就看spi手册,看那些片选的选择,然后想起来可能用了SPI通信后没有释放,,,,然后加了一句就好了 。

IOWR_ALTERA_AVALON_SPI_SLAVE_SEL(ADF4351_BASE, 0 << 0); 原来的scanf也不能用,把从设备释放就好了,看来控制台和SPI之间也有关系

int ADF4351_Set_Gain(float Gain) { //dB 0.5-----31.5
bool DB[6] = { 0 };
int i;
u8 Register = 0;
if (Gain > 31.5 || Gain < 0.5) {
return -1;
} else {
for (i = 0; i < 6; i++) {
if (Gain >= 16) {
Gain -= 16;
DB[5] = 1;
} else if (Gain >= 8) {
Gain -= 8;
DB[4] = 1;
} else if (Gain >= 4) {
Gain -= 4;
DB[3] = 1;
} else if (Gain >= 2) {
Gain -= 2;
DB[2] = 1;
} else if (Gain >= 1) {
Gain -= 1;
DB[1] = 1;
} else if (Gain >= 0.5) {
Gain -= 0.5;
DB[0] = 1;
}
}
}
Register = (DB[5] << 5 | DB[4] << 4 | DB[3] << 3 | DB[2] << 2 | DB[1] << 1
| DB[0]);
IOWR_ALTERA_AVALON_SPI_SLAVE_SEL(ADF4351_GAIN_BASE, 1 << 0);
while (!(IORD_ALTERA_AVALON_SPI_STATUS(ADF4351_GAIN_BASE)
& ALTERA_AVALON_SPI_STATUS_TRDY_MSK))
; //write control and sequence register
printf("GAIN SUCCESSED!!!\n");
IOWR_ALTERA_AVALON_SPI_TXDATA(ADF4351_GAIN_BASE, Register);
IOWR_ALTERA_AVALON_SPI_SLAVE_SEL(ADF4351_GAIN_BASE, 0 << 0);
return 0;
}

posted @ 2017-07-19 10:22  hahal  阅读(1177)  评论(1)    收藏  举报