使用CC2543的SPI口读HMC5983的数据,通过示波器可以观察到时钟信号正确,输出正确,但是无法得不到接收的数据。
使用硬件调试时,U0DBUF寄存器的数据显示一直为0,如果是发送的话,可以是认为发送太快,所以在使用硬件调试时,看不到U0DBUF赋值过程吗?
但是接收的时候,也没有数据。求帮助。
void main(void)
{
int8 data;
CLKCONCMD = (CLKCONCMD & ~(CLKCON_OSC | CLKCON_CLKSPD)) | CLKCON_CLKSPD_32M;
while (CLKCONSTA & CLKCON_OSC); // Wait until clock source has changed
/***************************************************************************
* Setup I/O ports
* Port and pins used by USART0 operating in SPI-mode are
* MISO (MI): P1_3
* MOSI (MO): P1_4
* SSN (SS) : P1_1
* SCK (C) : P1_2
*/
// Configure USART0 for Alternative 1 => Port P0 (PERCFG.U0CFG = 0).
// Give priority to USART 0 over Timer 1 for port 0 pins.
PERCFG = (PERCFG & ~PERCFG_U0CFG) | PERCFG_U0CFG_ALT2;
PPRI &= ~PPRI_PRI0P1;
P1SEL = (P1SEL & ~BIT1) | BIT2 | BIT3 | BIT4;
P1DIR |= BIT1;
U0CSR &= ~(U0CSR_MODE | U0CSR_SLAVE);
U0GCR |= U0GCR_ORDER; //MSB先发
U0GCR |= 0xC0; //CPOL CPHA
U0BAUD |= 216; //baudrate 57600
U0GCR |=10;
P1_1 = 0;
U0DBUF = 0x82;
while(!(U0CSR & U0CSR_TX_BYTE));
U0CSR &= ~U0CSR_TX_BYTE;
//有必要发送一个无效命令,将从器件的值取回来吗?
U0DBUF = 0xFF;
U0CSR &= ~U0CSR_TX_BYTE;
while(!(U0CSR & U0CSR_TX_BYTE));
data = U0DBUF;
P1_1 = 1;
}