我在用MSP430启动板。更具体地说,我使用的是微控制器MS430G2553。我试图编译一些为MS430G2230设计的代码,但问题是代码的某些部分与MS430G2553不匹配。
这是密码
void USI_Init (void)
{
// configure SPI
USICTL0 |= USISWRST; // USI in reset
USICTL0 = USICTL0 | USILSB; // Least Significant Bit first
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI Master
USICTL1 |= USICKPH; // flag remains set
USICKCTL = USIDIV_1 + USISSEL_2; // /2 SMCLK
USICTL0 &= ~USISWRST; // USI released for operation
USICNT = USICNT | 0x50; // 16 bit mode; 16 bit to be transmitted/received
return;
}
这是第二个不起作用的程序
#pragma vector=WDT_VECTOR
__interrupt void Write_Matrix(void)
{
static unsigned char index=0;
P1OUT |= DATA_LATCH_PIN;
P1OUT &= ~DATA_LATCH_PIN;
USICTL1 &= ~USIIFG; // Clears the interrupt flag
USISRH = 1<<index; // Move the index of the column in the high bits of USISR
USISRL = Matrix[index]; // Move the index of the rows (value of Matrix[index]) in the low bits of USIRS
USICNT = USICNT | 0x10; // 16 bit format
index = (index+1) & 7;
return;
}
有什么想法吗?
谢谢
最佳答案
首先,您不应该期望在这两个处理器系列之间有100%可移植的代码。MSP430G2553是一个更大的值线处理器,配备了比MSP430G2230更多的外围设备。
请参考下图:
MSP430G2230功能图
MSP430G2553功能图
如你所见,这些MCU是非常不同的。
因为MSP430G2553没有USI
外设,所以第一个例程不起作用。相反,SPI通信是使用USCI
外设执行的。你需要修改你的代码来使用这个外设。更多信息请参考User's Guide。
你的第二个程序又因为缺少USI
外围设备而无法工作。注意对USI
寄存器的引用:USICTL1 &= ~USIIFG;
等。您需要再次修改代码以使用USCI
外围设备。