您好!
我将以 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); }