您好!
我将以 SPI 主设备的身份运行 MSP430F2618。 该应用程序正在使用 UCB1 (端口5上)、没有问题。 由于要求更改、需要使用第二个 SPI、因此我移植了之前工作的代码;SPI 现在应在端口3 (P3.5 SOMI、P3.4 SIMO、P3.0 CLK)上使用 UCA0。
我更改了所需引脚的定义、更改了 P3SEL 并将每个 UCB1***更改为 UCA0***。 进行这些更改后、SPI 不再工作。 显示正确片选/ STE 模式的 Oszilloscope (使用 P3OUT |=...完成、因此"手动")、但 CLK 线始终处于高电平、不会移动。 MOSI/SIMO 正在输出一些东西、但由于缺少时钟信号、从器件无法响应。
我已经测试了引脚输出、手动切换 CLK 引脚正常工作、因此硬件仍处于运行状态。
我错过了什么吗?
谢谢、此致、
Marius
#define DD_MISO BIT5 //p3.5 /**< port for SPI miso */
#define DD_MOSI BIT4 //P3.4 /**< port for SPI mosi */
#define DD_SCK BIT0 //P3.0 /**< port for SPI clock */
#define DD_SS BIT3 //P3.3 /**< port for SPI slave select */
static void spi_init(
void
) {
P3SEL |= DD_MOSI + DD_MISO + DD_SCK;
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0BR0 |= 0x00;
UCA0BR1 |= 0x00;
UCA0CTL1 |= UCSSEL_2;
UCA0CTL0 |= UCCKPH + UCMSB + UCMST ;
UCA0CTL1 &= ~UCSWRST;
}
// TX function
static uint8_t spi_txrx_char(
char cData /**< character to transmit */
) {
UCA0TXBUF = cData;
//while (!(IFG2 & UCA0RXIFG)); - this line was removed because no CLK => no answer from the slave
unsigned char spi_rx = UCA0RXBUF;
return(spi_rx);
}