我用的是430F2274,现在要用到UCA0CTL0的串口功能,UCB0CTL0的SPI功能,ADC10CTL0的ADC功能,为什么我先是UART_INT(void),在SPI_INIT(),ADC_INT(),同时初始化这3个功能,就都不能用了,我只UART_INT串口初始化,SPI和ADC不初始化,串口就可以用,初始化函数为
void InitUart(void)
{
// UCSWRST = BIT1;
UCA0CTL1 = 0x01; //set ucswrst = 1
UCA0CTL1 |= UCSSEL_2; //UCSWRST = 0; /select smclk
P3SEL |= (BIT5|BIT4); //p3sel = 0x30 set p3.4,5is txd rxd,
//P3DIR |= BIT4;
//P3DIR &= ~BIT5;
//IE2 |= UCA0RXIE|UCA0TXIE;
UCA0CTL0 &= ~(BIT7|BIT4|BIT3|BIT2|BIT1|BIT0); //配置串口特性
// UCA0CTL0 = 0x00; //配置奇偶校验禁止,LSB首先发送,8数据位,1个停止位,UART模式,异步模式
// UCA0CTL1 = ;
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; //校准波特率用
UCA0CTL1 &= ~UCSWRST;
//IE2 |= (UCB0RXIE + UCA0RXIE);
IE2 |= UCA0RXIE;// + UCA0TXIE; // 使能USART0的收发中断
}
void InitSpi(void)
{
UCB0CTL1 = 0x01; //set ucswrst = 1
UCB0CTL1 |= UCSSEL_2; //UCSWRST = 0; /select smclk
UCB0CTL0 |= UCMSB + UCMST + UCSYNC; // 4-pin, 8-bit SPI mstr, MSB 1st sync mode
UCB0BR0 = 0x02; //baud
UCB0BR1 = 0;
P3SEL |= (BIT5|BIT4|BIT3|BIT2|BIT1);//0x0E; // // P3.3,2,1,0 USCI_B0 option select // p3.0 is output
P3DIR |= 0x01; // P3.0 output direction
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCB0RXIE;
// IE2 |= (UCB0RXIE | UCA0RXIE);
}
void ADC10_Init(void)
{
ADC10CTL0 &= ~ENC;
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE;
ADC10CTL1 = ADC10DF;
ADC10AE0 |= 0x01;
}
我3个功能单独分开来用就都可以用,也就是我只用串口可以收发,只用SPI可以发送,只用ADC,可以检测到,这是什么情况,我在UART_INIT函数之外,修改IE2的值,就不能修改,在UART_INIT函数内可以修改IE2 = 0X01,不能是其他的值,为什么呢,