主题中讨论的其他器件:MSP-FET、
大家好、
我对 MSP430器件比较陌生、最近为 MSP430F5325设计了自己的原型板。 我已经使用 MSP-FET 在 CCS 中的 SPI-Bi-Wire 调试接口上运行了一些简单的代码、现在我正在尝试通过 SPI 输出数据。 我在 YouTube 上关注了这个关于 不同 MSP430器件的教程、虽然它很有用、但它不起作用、并且在进行一些更改后、我仍然无法使它正常工作。 我已经阅读了产品数据表并在系列数据表中搜索了相关信息、但仍然不太幸运。 我想我一定会错过一些东西。
以下是我的代码:
#include <msp430.h>
char packet[] = {0xF0, 0xF0, 0xF0, 0x40};
unsigned int position;
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
// -- setup A0 for SPI
UCA0CTLW0 |= UCSWRST; // put A0 into SW Reset
UCA0CTLW0 |= UCSSEL__SMCLK; // Choose SMCLK
UCA0BRW = 10; // Set prescaler to 10 to get SCLK = 400kHz
UCA0CTLW0 |= UCSYNC; // Put A0 into SPI mode
UCA0CTLW0 |= UCMST; // Put into SPI Master
// -- configure ports
P2DIR |= BIT7;
P2SEL |= BIT7; // P2.7 = SCK (01)
P3DIR |= BIT3;
P3SEL |= BIT3; // P3.3 = SIMO (01)
P3DIR &= ~BIT4;
P3SEL |= BIT4; // P3.4 = SOMI (01)
UCA0CTLW0 &= ~UCSWRST; // Take out of SW Reset
//-- Enable IRQs
UCA0IE |= UCTXIE; // enable A0 Tx IRQ
UCA0IFG &= ~UCTXIFG; // clear flag
__enable_interrupt(); // enable global
UCA0TXBUF = packet[position]; // send first byte
while(1){}
//return 0;
}
// ------------------------------------------
// -- ISR
//void __attribute__((interrupt(USCI_A0_VECTOR)))
#pragma vector = USCI_A0_VECTOR
__interrupt void ISR_USCI_A0(void)
{
position++;
if (position < sizeof(packet))
{
UCA0TXBUF = packet[position];
} else
{
UCA0IFG &= ~UCTXIFG;
}
}
最初、我像 YouTube 视频中的人一样使用 PxSELy、但后来我了解到我的控制器只有一个 PxSEL 寄存器、因此我删除了第二组寄存器。 我添加 了 PxDIR 行 以尝试获取某种输出、但我也尝试不使用它们。 我使用 ADLM2000的示波 器设置测量信号。 我已经看到一些引脚变为高电平或低电平、具体取决于我尝试的操作、但没有什么与 我期望的串行数据类似的东西。
感谢您的所有帮助和反馈。 谢谢!