//******************************************************************************
// 针对MSP430F5510,IFG2&UCB0RXIFG 需要被替换为 UCB0IFG &= ~UCRXIFG;
// 而F2xx需要采用为 IFG2 &= ~UCB0RXIFG;
void TI_CC_SPISetup(void)
{
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;
TI_CC_CSn_PxDIR |= TI_CC_CSn_PIN; // /CS disable
TI_CC_SPI_USCIB0_PxSEL |= TI_CC_SPI_USCIB0_SIMO | TI_CC_SPI_USCIB0_SOMI | TI_CC_SPI_USCIB0_UCLK;
// SPI option select
TI_CC_SPI_USCIB0_PxDIR |= TI_CC_SPI_USCIB0_SIMO | TI_CC_SPI_USCIB0_UCLK;
// SPI TXD out direction
UCB0CTL0 |= UCMST+UCCKPL+UCMSB+UCSYNC; // 3-pin, 8-bit SPI master
UCB0CTL1 |= UCSSEL_2; // SMCLK
UCB0BR0 |= 0x02; // UCLK/2
UCB0BR1 = 0;
// UCA0MCTL = 0; // No modulation,F5510新增设定
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
}
void TI_CC_SPIWriteReg(char addr, char value)
{
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_USCIB0_PxIN&TI_CC_SPI_USCIB0_SOMI); // Wait for CCxxxx ready
IFG2 &= ~UCB0RXIFG; // Clear flag,F2xx采用的代码
// UCB0IFG &= ~UCRXIFG; // Clear flag,F5510采用的代码
UCB0TXBUF = addr; // Send address
while (!(IFG2 &= ~UCB0RXIFG)); // Wait for TX to finish
IFG2 &= ~UCB0RXIFG; // Clear flag
UCB0TXBUF = value; // Send data
while (!(IFG2 &= ~UCB0RXIFG)); // Wait for TX to finish
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
//******** F5510用的UART0 RX中断 **************************************
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
RX0Buf[RX0Buf_in] = UCA0RXBUF; // RXed character ->
RX0Buf_in++; // 数组保存位置的指针
TI_CC_Wait(20); // 如果不加这个微量的延时,会出现丢包现象
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
//******** F247用的UART0 RX中断 **************************************
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI_A0_ISR(void)
{
RX0Buf[RX0Buf_in] = UCA0RXBUF; // RXed character ->
RX0Buf_in++; // 数组保存位置的指针
TI_CC_Wait(20); // 如果不加这个微量的延时,会出现丢包现象
}
F247的SPI使用P3.0~P3.3,UART0使用P3.4~P3.5;
F5510的SPI使用P2.7、P3.0~P3.2,UART0使用P3.3~P3.4。
现在发现F5510的SPI、UART0同时工作是正常的,而F247的中断向量使用的是同一个IFG2,如何避免冲突呢?
F247的UART0_RX中断,能否写成类似于F5510的形式?