PuTTY данные в MSP430
Я пытаюсь запрограммировать два MSP430 для мгновенного обмена сообщениями через PuTTY, но не могу понять, как получить набранную информацию на MSP430 без отладчика. Я использую CCS, и это MSP430 F2274. У меня есть одна программа, в которой пользователь вводит азбуку Морзе на кнопке на одном MSP430, которая успешно выводит на PuTTY другой MSP430 с помощью следующего метода.
void displayString(char array[], char size) {
WDTCTL = WDTPW + WDTHOLD; // Disable WDT
DCOCTL = CALDCO_8MHZ; // Load 8MHz constants
BCSCTL1 = CALBC1_8MHZ; //
P3SEL |= 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 0x41; // 8MHz 9600
UCA0BR1 = 0x03; // 8MHz 9600
UCA0MCTL = UCBRS1; // Modulation UCBRSx = 2
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state
int count;
for(count=0; count<size; count++){
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = array[count]; // TX -> RXed character
}
}
Может кто-нибудь отправить код, который делает обратное (вводит информацию на MSP430) с подобной настройкой? Благодарю.
2 ответа
Я использовал Picocom:
$ picocom -r -b 9600 /dev/ttySxxxx
Код для инициализации UART:
void uart_setup()
{
// Configure UART pins
P2SEL1 |= BIT0 + BIT1;
P2SEL0 &= ~(BIT0 + BIT1);
// Configure UART 0
UCA0CTL1 |= UCSWRST; // perform reset
UCA0CTL1 = UCSSEL_1; // Set ACLK = 32768 as UCBRCLK
UCA0BR0 = 3; // 9600 baud
UCA0BR1 = 0;
UCA0MCTLW |= 0x5300; // 32768/9600 - INT(32768/9600)=0.41
// UCBRSx value = 0x53 (See UG)
UCA0CTL1 &= ~UCSWRST; // release from reset
//UCA0IE |= UCRXIE; // Enable RX interrupt
}
Переопределить putchar():
int putchar(int c)
{
if (c == '\n') putchar('\r');
while (!(UCA0IFG & UCTXIFG));
UCA0TXBUF = c;
return 0;
}
И тогда вы можете просто вызвать printf(...) для вывода текста из MSP430 в последовательный порт.
Если вы все еще хотите уйти putchar()
а также prtinf()
для целей отладки - печать в окне отладки отладчика, тогда вы можете иметь отдельный read
функция:
unsigned char ReadByteUCA_UART(void)
{
//while ((IFG2&UCA0RXIFG)==0); // wait for RX buffer (full)
while(UCA0STAT&UCBUSY);
return (UCA0RXBUF);
}