This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
最近项目用到这这个功能,我发现进入debug模式后,CCTL0和CCTL1的值均是0x1,对于CCTL0来说,就是USISWRST为高电平。对于CCTL1就是USIIFG是高电平。也就是说,系统默认的情况下已经产生了中断标志位,那么,第一个问题:这个标志位用不用清零?
然后,我尝试着将这个标志位清零,然后,当我设置USICNT的时候,比如USICNT=8(官方例程就是这样的),首先,寄存器的值依然是0x00,其次,USIIFG此时又被置高了。所以,我想问一下,有没有人用过这个功能?
就不要直接给我个官方的例子让我自己看了,我已经看了好多遍了,而且单步跟踪的时候现象是一样的。我就是想看看有没有人用过这个功能,请教一下。
你好,我是用msp430g2332来操作nrf24l01,和一般的spi没什么不一样。下面我给出我的配置;
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI master
USICTL0 &= ~USISWRST; // USI released for operation
USICTL0&=~USILSB; //MSB first
USICTL1 &=~ USIIE; // Counter interrupt, flag remains set
USICTL1 &=~ USIIFG;
USICTL1|=USICKPH;
USICKCTL = USIDIV_4 + USISSEL_2;
USICNT = 8;
下面是发送和接收函数,我并没有使用中断
unsigned char SPI_RW(unsigned char Byte)
{
unsigned int rec_val;
USISRL=Byte;
// while (!(USIIFG & USICTL1)); // Counter clear?
USICTL1 &= ~USIIFG; //
USICNT = 8; // re-load counter
while (!(USIIFG & USICTL1)); // Counter clear?
//USICNT = 8;
rec_val=USISRL;
USICTL1 &= ~USIIFG;
return (rec_val);
}
您看有什么问题吗?
而且,我的配置中,一旦将USICTL1|=USICKPH;改成USICTL1&=~USICKPH;
那么,miso就不输出数据了。理论上,相位配置的不同,最多会影响到我的接收函数能不能从nrf24l01读取到数据,nrf24l01自身输出的数据不会受到影响。但是,我发现实际上进行配置的时候,nrf24l01直接不输出数据了。