工具/软件:Code Composer Studio
我完全不熟悉 MSP430系列、只在这4天内开始工作。 我使用的是 MSP430-EXP-FR6989 launchpad,我的目标是>>使用 SPI 接口将 LIS2DH 加速计评估板(STEVAL-MKI)连接到 MSP430板,并读取 WHO _AM_I 寄存器的值并 在 UART 中打印该值。>>>
下面我附上了我的代码。
当我运行代码而不是虚拟寄存器 WAND_AM_I (即0011 0011 = 0x33)中存储的默认值时、我在 USCAA0RXBUF 上获得的值为0xFF。 当我发送请求使用 USCAA0TXBUF 读取 SIMO 线路上 WO_AM_I 寄存器的内容时。 我使用的是 CCS_STUDIO_v7。 对于 UART、也为 USCI-A1设置了。
请原谅我的编码错误以及您在扫描时可能看到的所有错误、但请毫不犹豫地纠正我的错误。
-I 包含了许多用于测试目的的非活动变量<sorry about that too :\
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include
#include
volatile unsigned char RXData = 0;
volatile unsigned char TXData;
uint8_t pVal;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;
P1SEL1 |= BIT5;
P2SEL0 |= BIT0 | BIT1;
PJSEL0 |= BIT4 | BIT5;
//P2SEL0 |= BIT5;
P4DIR |= BIT4;//表示 XT1
P4OUT |= BIT4;
PM5CTL0 &=~LOCKL;
CSCTL0_H = CSKEY >> 8;
CSCTL1 = DCOFSEL_0;
CSCTL2 = SELA_LFXTCLK | SELESS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;
CSCTL4 &=~LFXTOFF;
操作
{
CSCTL5 &=~LFXTOFFG;
SFRIFG1 &=~OFIFG;
} while (SFRIFG1&OFIFG);
CSCTL0_H = 0;
UCA0CTLW0 = UCSWRST;
UCA0CTLW0 |= UCMST | UCSYNC | UCCKPL | UCMSB;
UCA0CTLW0 |= UCSSEL_ACLK;
UCA0BR0 = 0x02;
UCA0BR1=0;
UCA0MCTLW = 0;
UCA0CTLW0 &=~UCSWRST;
UCA0IE |= UCRXIE;
// TXData = 0x1;
TXData = 0x0F;
while (1)
{
UCA0IE |= UCTXIE;
//_ bis_SR_register (LPM0_bits | GIE);
_bis_SR_register (GIE);
_DELAY_CYCLES (2000);
UCA0TXBUF = TXData;
}
}
#pragma vector = USCI_A0_vector
_interrupt void USCI_A0_ISR (void)
{
开关(__evo_in_range (UCA0IV、USCI_SPI_UCTXIFG))
{
USCI_NONE 案例:
中断;
USCI_SPI_UCRXIFG 案例:
RXData = UCA0RXBUF;
UCA0IFG &=~UCRXIFG;
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);
中断;
USCI_SPI_UCTXIFG 案例:
accReadReg (TXData);
UCA0IE &=~UCTXIE;
中断;
默认值:
中断;
}
void accReadReg (uint8_t reg,uint8_t rec)
{
P4OUT = 0;
_DELAY_CYCLES (10);
spiWriteByte (reg);
spiWriteByte (0x00);
REC = UCA1RXBUF;
pVal = rec;
}
void WritspieByte (uint8_t write)
{
UCA0IFG &= UCTXIFG;
UCA0TXBUF =写入;
while (!(UCA0IFG&UCTXIFG));
}
void spiReadByte (uint8_t *读取、uint8_t write2)
{
UCA0IFG &= UCTXIFG;
UCA0TXBUF =写入2;
while (!(UCA0IFG&UCTXIFG));
*读取= UCA0TXBUF;
}
void UART_init (void)
{
WDTCTL = WDTPW | WDTHOLD;
P3SEL0 |= BIT4 | BIT5;
P3SEL1 &=~(BIT4 | BIT5);
PM5CTL0 &=~LOCKLPM5;
CSCTL0_H = CSKEY >> 8;
CSCTL1 = DCOFSEL_3 | DCORSEL;
CSCTL2 = SELA_VLOCLK | SELESS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;
CSCTL0_H = 0;
UCA1CTLW0 = UCSWRST;
UCA1CTLW0 |= UCSSEL_SMCLK;
UCA1BR0 = 52;
UCA1BR1 = 0x00;
UCA1MCTLW |= UCOS16 | UCBRF_1 | 0x4900;
UCA1CTLW0 &=~UCSWRST;
UCA1IE |= UCTXIE | UCRXIE;
pVal = UCA0RXBUF;
// pVal ='1';
UCA1TXBUF = pVal;
//UCA1TXBUF = UCA1RXBUF;
//_bis_SR_register (LPM3_bits | GIE);
_bis_SR_register (GIE);
__no_operation();
while (!(UCA1IFG&UCTXIFG));
}