TI MSP430 Launch Pad
Re: TI MSP430 Launch Pad
Разбираюсь с UARTом. Нашел рабочий пример по ссылке, данной выше - http://dbindner.freeshell.org/msp430/#_a_uart_receiver Теперь пытаюсь разобрать код.
Вообще моя задача состоит в том, чтобы определить, какие данные были посланы в порт, и соответственно отреагировать. Нашел пример с контроллером MSP430F2274. Однако на моем MSP430G2211 оно работать отказывается (немудрено, собстно).
Так вот. Большая просьба - укажите неразумному на путь истинный) Причем желательно что-нибудь на русском языке, ибо в буржуицком я не бум-бум)
Вообще моя задача состоит в том, чтобы определить, какие данные были посланы в порт, и соответственно отреагировать. Нашел пример с контроллером MSP430F2274. Однако на моем MSP430G2211 оно работать отказывается (немудрено, собстно).
Так вот. Большая просьба - укажите неразумному на путь истинный) Причем желательно что-нибудь на русском языке, ибо в буржуицком я не бум-бум)
Re: TI MSP430 Launch Pad
С UARTом разобрался сам. Взял за основу драйвер, написанный товарищем YS'ом - спасибо ему за это) Но вот опять проблема возникла...
Собственно, проблема, скорее всего, больше софтовая, чем железячная. А заключается она вот в чем.
Пишу я в QT программу, для обмена данными между платой ЛончПада и компьютером. Использую для этого библиотеку QExtSerialPort. Так вот. Несмотря на то, что в Диспетчере устройств плата отображается и опознается как порт COM11, QExtSerialEnumerator ее не видит ни в какую! Все остальные COM-порты в программе видны. Терминальные программы типа HyperTerminal и PuTTY с портом спокойно работают. Если моей программе указать порт для подключения статично, то и она нормально работает... А вот так, чтобы увидеть порт в списке доступных портов - никак.
Я понимаю, что мала вероятность найти здесь программистов на QT, но чем черт не шутит...
Собственно, проблема, скорее всего, больше софтовая, чем железячная. А заключается она вот в чем.
Пишу я в QT программу, для обмена данными между платой ЛончПада и компьютером. Использую для этого библиотеку QExtSerialPort. Так вот. Несмотря на то, что в Диспетчере устройств плата отображается и опознается как порт COM11, QExtSerialEnumerator ее не видит ни в какую! Все остальные COM-порты в программе видны. Терминальные программы типа HyperTerminal и PuTTY с портом спокойно работают. Если моей программе указать порт для подключения статично, то и она нормально работает... А вот так, чтобы увидеть порт в списке доступных портов - никак.
Я понимаю, что мала вероятность найти здесь программистов на QT, но чем черт не шутит...
Re: TI MSP430 Launch Pad
Взял за основу драйвер, написанный товарищем YS'ом - спасибо ему за это)
Рад, что помог, но... Как? У меня же не драйвер железного UART'a, а его софтовая реализация.
А вот так, чтобы увидеть порт в списке доступных портов - никак.
Для доступа к портам с номером выше COM9 необходимо специальным способом задавать путь (\\.\COMnn). Видимо, стандартная процедура поиска этого не умеет.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: TI MSP430 Launch Pad
YS писал(а):Для доступа к портам с номером выше COM9 необходимо специальным способом задавать путь (\\.\COMnn). Видимо, стандартная процедура поиска этого не умеет.
Да, именно так и нужно обращаться к этим портам. Но все веселье в том, что порты COM12, COM13 и т.д. до 20-го (виртуальные порты Блюзуб-адаптера) Енумератор показывает без проблем.
-
x3medima17
- Открыл глаза
- Сообщения: 55
- Зарегистрирован: Ср окт 13, 2010 16:57:03
MSP430 LaunchPad с чего начать.
Всем привет.
Я год работал с AVR но было очень много проблем и решил перейти на MSP430. Купил себе launchpad с официального сайта.
http://www.ti.com/launchpad
Получилось только поморгать светодиодами. Кто уже с ними работал? С чего начать? Помогите найти хороший курс по этим МК , можно и на английском.
Сюда перенес.
aen
Я год работал с AVR но было очень много проблем и решил перейти на MSP430. Купил себе launchpad с официального сайта.
http://www.ti.com/launchpad
Получилось только поморгать светодиодами. Кто уже с ними работал? С чего начать? Помогите найти хороший курс по этим МК , можно и на английском.
Сюда перенес.
aen
Re: MSP430 LaunchPad с чего начать.
можно почитать тему: viewtopic.php?f=20&t=42019&hilit=launchpad+MSP430. Да и поиском по выделенным словам можно другие темы отыскать.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
-
x3medima17
- Открыл глаза
- Сообщения: 55
- Зарегистрирован: Ср окт 13, 2010 16:57:03
Re: MSP430 LaunchPad с чего начать.
Я там не нашёл чего искал
Моя задача на данный момент такова: Используя launchpad сзявать МК и копм через serial comunication port я использую IDE energia но когда посылаю данные через Serial Monitor никакой реакции(
Моя задача на данный момент такова: Используя launchpad сзявать МК и копм через serial comunication port я использую IDE energia но когда посылаю данные через Serial Monitor никакой реакции(
Re: MSP430 LaunchPad с чего начать.
Компы меня никогда не интересовали, а про курс - на 3 странице темы, на которую дал ссылку, есть ссылка на умную книгу. Правда, для начинающих, но всё-равно полезная к чтению.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: TI MSP430 Launch Pad
Моя задача на данный момент такова: Используя launchpad сзявать МК и копм через serial comunication port я использую IDE energia
Добрый совет - снесите Energia, это унылое ардуинообразное говно (прости, Господи!), и поставьте IAR Kickstart Edition.
А для него у меня есть пример софтового UART'a. В качестве терминалки рекомендую использовать PuTTY.
В старших МК есть аппаратный модуль UART, там даташит в помощь.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: TI MSP430 Launch Pad
x3medima17
В комплекте к лончпаду версии 1.5 идет два контроллера - MSP430G2452 и MSP430G2553. G2553 имеет аппаратный последовательный порт, для работы с ним подходят встроенные функции, но сначала надо переставить джамперы на плате launchpad (где написано SW UART/HW UART). MSP430G2452 аппаратного UART не имеет, но в энергии есть реализация программного - это библиотека TimerSerial.h. В примерах работа с ней есть, называется TimerSerial Example.
А вообще, согласен с YS - ардуиноподобные IDE это путь в никуда. Поэтому сейчас пытаюсь пересесть на IAR, но дальше дерганья ногами пока не ушел. Еще можете посмотреть http://www.ti.com/grace - генератор кода для работы с периферией MSP430. Я с ним пока не разобрался, может у вас получится.
В комплекте к лончпаду версии 1.5 идет два контроллера - MSP430G2452 и MSP430G2553. G2553 имеет аппаратный последовательный порт, для работы с ним подходят встроенные функции, но сначала надо переставить джамперы на плате launchpad (где написано SW UART/HW UART). MSP430G2452 аппаратного UART не имеет, но в энергии есть реализация программного - это библиотека TimerSerial.h. В примерах работа с ней есть, называется TimerSerial Example.
А вообще, согласен с YS - ардуиноподобные IDE это путь в никуда. Поэтому сейчас пытаюсь пересесть на IAR, но дальше дерганья ногами пока не ушел. Еще можете посмотреть http://www.ti.com/grace - генератор кода для работы с периферией MSP430. Я с ним пока не разобрался, может у вас получится.
- polli123456
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Пн мар 07, 2011 15:06:32
- Откуда: Murom
Re: TI MSP430 Launch Pad
2 x3medima17 Про энергия и СОМ посмотри в обсуждениях здесь http://we.easyelectronics.ru/msp430/ene ... duino.html, там кстати рабочий пример с I2C на LM75
А вообще она обновилась, появились библиотеки для работы с LCD 2x16, команда tone заработала, I2C/
А вообще она обновилась, появились библиотеки для работы с LCD 2x16, команда tone заработала, I2C/
Re: TI MSP430 Launch Pad
А чем плоха Energia? (ну кроме того, что там нет отладчика)
Компилятор там - обычный gcc, точнее даже g++. Поддержка языка отличная (из особенностей - нет new (что логично) нет исключений и нет стандартной библиотеки). Причем это современный gcc. Причем с полным набором инструментов, в том числе дизассемблером.
Компилятор там - обычный gcc, точнее даже g++. Поддержка языка отличная (из особенностей - нет new (что логично) нет исключений и нет стандартной библиотеки). Причем это современный gcc. Причем с полным набором инструментов, в том числе дизассемблером.
Re: TI MSP430 Launch Pad
чем плоха Energia? Компилятор там - обычный gcc
Если Вы уже обладаете опытом в разработке под встроенные системы - ничем особенно. Среда как среда, только без отладчика.
Для новичков она плоха "идеологией ардуино", плодящей дилетантов. Хотя для тех, кто собирается просто поиграться, это плюс.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: TI MSP430 Launch Pad
Доброго времени суток! Подскажите как мне сделать на msp430g2553 так, чтобы посылая через uart определенный символ скажем цифру 1 порт 1.0 менял свое значение.
Ни как не могу разобраться.....
делал на основе примера кода работы с uart
Ни как не могу разобраться.....
делал на основе примера кода работы с uart
Re: TI MSP430 Launch Pad
Эммм вы хотите чтобы когда контроллер выдает байт по уарту тут же менял значение одной из ножек?Или вы хотите хэндшейк сделать?? Если второе: до загрузки в буфер символа.
Re: TI MSP430 Launch Pad
я с компьютера посылаю символ по uart. контроллер его принимает и распознает. если пришлел символ A то надо переключить состояние ножки 1.0. как то так я хотел)
Re: TI MSP430 Launch Pad
Код: Выделить всё
if (symbol == 'A')
P1OUT ^= 0x01;
Re: TI MSP430 Launch Pad
//******************************************************************************
// MSP430G2xx2 Demo - Timer_A, Ultra-Low Pwr UART 9600 Echo, 32kHz ACLK
//
// Description: Use Timer_A CCR0 hardware output modes and SCCI data latch
// to implement UART function @ 9600 baud. Software does not directly read and
// write to RX and TX pins, instead proper use of output modes and SCCI data
// latch are demonstrated. Use of these hardware features eliminates ISR
// latency effects as hardware insures that output and input bit latching and
// timing are perfectly synchronised with Timer_A regardless of other
// software activity. In the Mainloop the UART function readies the UART to
// receive one character and waits in LPM3 with all activity interrupt driven.
// After a character has been received, the UART receive function forces exit
// from LPM3 in the Mainloop which configures the port pins (P1 & P2) based
// on the value of the received byte (i.e., if BIT0 is set, turn on P1.0).
// ACLK = TACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO
// //* An external watch crystal is required on XIN XOUT for ACLK *//
//
// MSP430G2xx2
// ----------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | CCI0B/TXD/P1.1|-------->
// | | 9600 8N1
// | CCI0A/RXD/P1.2|<--------
//
// D. Dang
// Texas Instruments Inc.
// December 2010
// Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
//******************************************************************************
#include "msp430g2452.h"
#include "msp430g2231.h"
#include "msp430x14x.h"
//----------
// Hardware-related definitions
//----------
#define UART_TXD 0x02 // TXD on P1.1 (Timer0_A.OUT0)
#define UART_RXD 0x04 // RXD on P1.2 (Timer0_A.CCI1A)
//----------
// Conditions for 9600 Baud SW UART, SMCLK = 1MHz
//----------
#define UART_TBIT_DIV_2 (1000000 / (9600 * 2))
#define UART_TBIT (1000000 / 9600)
//----------
// Global variables used for full-duplex UART communication
//----------
unsigned int txData; // UART internal variable for TX
unsigned char rxBuffer; // Received UART character
//----------
// Function prototypes
//----------
void TimerA_UART_init(void);
void TimerA_UART_tx(unsigned char byte);
void TimerA_UART_print(char *string);
//----------
// main()
//----------
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
DCOCTL = 0x00; // Set DCOCLK to 1MHz
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
P1OUT = 0x00; // Initialize all GPIO
P1SEL = UART_TXD + UART_RXD; // Timer function for TXD/RXD pins
P1DIR = 0xFF & ~UART_RXD; // Set all pins but RXD to output
P2OUT = 0x00;
P2SEL = 0x00;
P2DIR = 0xFF;
__enable_interrupt();
TimerA_UART_init(); // Start Timer_A UART
TimerA_UART_print("INIT UART\r\n");
TimerA_UART_print("READY.\r\n");
for (;;)
{
// Wait for incoming character
__bis_SR_register(LPM0_bits);
// Update board outputs according to received byte
if (rxBuffer ==' A') P1OUT |= 0x01; else P1OUT &= ~0x01; // P1.0
if (rxBuffer == 'B') P1OUT |= 0x08; else P1OUT &= ~0x08; // P1.3
// Echo received character
TimerA_UART_tx(rxBuffer);
}
}
//----------
// Function configures Timer_A for full-duplex UART operation
//----------
void TimerA_UART_init(void)
{
TACCTL0 = OUT; // Set TXD Idle as Mark = '1'
TACCTL1 = SCS + CM1 + CAP + CCIE; // Sync, Neg Edge, Capture, Int
TACTL = TASSEL_2 + MC_2; // SMCLK, start in continuous mode
}
//----------
// Outputs one byte using the Timer_A UART
//----------
void TimerA_UART_tx(unsigned char byte)
{
while (TACCTL0 & CCIE); // Ensure last char got TX'd
TACCR0 = TAR; // Current state of TA counter
TACCR0 += UART_TBIT; // One bit time till first bit
TACCTL0 = OUTMOD0 + CCIE; // Set TXD on EQU0, Int
txData = byte; // Load global variable
txData |= 0x100; // Add mark stop bit to TXData
txData <<= 1; // Add space start bit
}
//----------
// Prints a string over using the Timer_A UART
//----------
void TimerA_UART_print(char *string)
{
while (*string) {
TimerA_UART_tx(*string++);
}
}
//----------
// Timer_A UART - Transmit Interrupt Handler
//----------
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A0_ISR(void)
{
static unsigned char txBitCnt = 10;
TACCR0 += UART_TBIT; // Add Offset to CCRx
if (txBitCnt == 0) { // All bits TXed?
TACCTL0 &= ~CCIE; // All bits TXed, disable interrupt
txBitCnt = 10; // Re-load bit counter
}
else {
if (txData & 0x01) {
TACCTL0 &= ~OUTMOD2; // TX Mark '1'
}
else {
TACCTL0 |= OUTMOD2; // TX Space '0'
}
txData >>= 1;
txBitCnt--;
}
}
//----------
// Timer_A UART - Receive Interrupt Handler
//----------
#pragma vector = TIMER0_A1_VECTOR
__interrupt void Timer_A1_ISR(void)
{
static unsigned char rxBitCnt = 8;
static unsigned char rxData = 0;
switch (__even_in_range(TA0IV, TA0IV_TAIFG)) { // Use calculated branching
case TA0IV_TACCR1: // TACCR1 CCIFG - UART RX
TACCR1 += UART_TBIT; // Add Offset to CCRx
if (TACCTL1 & CAP) { // Capture mode = start bit edge
TACCTL1 &= ~CAP; // Switch capture to compare mode
TACCR1 += UART_TBIT_DIV_2; // Point CCRx to middle of D0
}
else {
rxData >>= 1;
if (TACCTL1 & SCCI) { // Get bit waiting in receive latch
rxData |= 0x80;
}
rxBitCnt--;
if (rxBitCnt == 0) { // All bits RXed?
rxBuffer = rxData; // Store in global variable
rxBitCnt = 8; // Re-load bit counter
TACCTL1 |= CAP; // Switch compare to capture mode
__bic_SR_register_on_exit(LPM0_bits); // Clear LPM0 bits from 0(SR)
}
}
break;
}
}
//----------
// MSP430G2xx2 Demo - Timer_A, Ultra-Low Pwr UART 9600 Echo, 32kHz ACLK
//
// Description: Use Timer_A CCR0 hardware output modes and SCCI data latch
// to implement UART function @ 9600 baud. Software does not directly read and
// write to RX and TX pins, instead proper use of output modes and SCCI data
// latch are demonstrated. Use of these hardware features eliminates ISR
// latency effects as hardware insures that output and input bit latching and
// timing are perfectly synchronised with Timer_A regardless of other
// software activity. In the Mainloop the UART function readies the UART to
// receive one character and waits in LPM3 with all activity interrupt driven.
// After a character has been received, the UART receive function forces exit
// from LPM3 in the Mainloop which configures the port pins (P1 & P2) based
// on the value of the received byte (i.e., if BIT0 is set, turn on P1.0).
// ACLK = TACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO
// //* An external watch crystal is required on XIN XOUT for ACLK *//
//
// MSP430G2xx2
// ----------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | CCI0B/TXD/P1.1|-------->
// | | 9600 8N1
// | CCI0A/RXD/P1.2|<--------
//
// D. Dang
// Texas Instruments Inc.
// December 2010
// Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
//******************************************************************************
#include "msp430g2452.h"
#include "msp430g2231.h"
#include "msp430x14x.h"
//----------
// Hardware-related definitions
//----------
#define UART_TXD 0x02 // TXD on P1.1 (Timer0_A.OUT0)
#define UART_RXD 0x04 // RXD on P1.2 (Timer0_A.CCI1A)
//----------
// Conditions for 9600 Baud SW UART, SMCLK = 1MHz
//----------
#define UART_TBIT_DIV_2 (1000000 / (9600 * 2))
#define UART_TBIT (1000000 / 9600)
//----------
// Global variables used for full-duplex UART communication
//----------
unsigned int txData; // UART internal variable for TX
unsigned char rxBuffer; // Received UART character
//----------
// Function prototypes
//----------
void TimerA_UART_init(void);
void TimerA_UART_tx(unsigned char byte);
void TimerA_UART_print(char *string);
//----------
// main()
//----------
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
DCOCTL = 0x00; // Set DCOCLK to 1MHz
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
P1OUT = 0x00; // Initialize all GPIO
P1SEL = UART_TXD + UART_RXD; // Timer function for TXD/RXD pins
P1DIR = 0xFF & ~UART_RXD; // Set all pins but RXD to output
P2OUT = 0x00;
P2SEL = 0x00;
P2DIR = 0xFF;
__enable_interrupt();
TimerA_UART_init(); // Start Timer_A UART
TimerA_UART_print("INIT UART\r\n");
TimerA_UART_print("READY.\r\n");
for (;;)
{
// Wait for incoming character
__bis_SR_register(LPM0_bits);
// Update board outputs according to received byte
if (rxBuffer ==' A') P1OUT |= 0x01; else P1OUT &= ~0x01; // P1.0
if (rxBuffer == 'B') P1OUT |= 0x08; else P1OUT &= ~0x08; // P1.3
// Echo received character
TimerA_UART_tx(rxBuffer);
}
}
//----------
// Function configures Timer_A for full-duplex UART operation
//----------
void TimerA_UART_init(void)
{
TACCTL0 = OUT; // Set TXD Idle as Mark = '1'
TACCTL1 = SCS + CM1 + CAP + CCIE; // Sync, Neg Edge, Capture, Int
TACTL = TASSEL_2 + MC_2; // SMCLK, start in continuous mode
}
//----------
// Outputs one byte using the Timer_A UART
//----------
void TimerA_UART_tx(unsigned char byte)
{
while (TACCTL0 & CCIE); // Ensure last char got TX'd
TACCR0 = TAR; // Current state of TA counter
TACCR0 += UART_TBIT; // One bit time till first bit
TACCTL0 = OUTMOD0 + CCIE; // Set TXD on EQU0, Int
txData = byte; // Load global variable
txData |= 0x100; // Add mark stop bit to TXData
txData <<= 1; // Add space start bit
}
//----------
// Prints a string over using the Timer_A UART
//----------
void TimerA_UART_print(char *string)
{
while (*string) {
TimerA_UART_tx(*string++);
}
}
//----------
// Timer_A UART - Transmit Interrupt Handler
//----------
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A0_ISR(void)
{
static unsigned char txBitCnt = 10;
TACCR0 += UART_TBIT; // Add Offset to CCRx
if (txBitCnt == 0) { // All bits TXed?
TACCTL0 &= ~CCIE; // All bits TXed, disable interrupt
txBitCnt = 10; // Re-load bit counter
}
else {
if (txData & 0x01) {
TACCTL0 &= ~OUTMOD2; // TX Mark '1'
}
else {
TACCTL0 |= OUTMOD2; // TX Space '0'
}
txData >>= 1;
txBitCnt--;
}
}
//----------
// Timer_A UART - Receive Interrupt Handler
//----------
#pragma vector = TIMER0_A1_VECTOR
__interrupt void Timer_A1_ISR(void)
{
static unsigned char rxBitCnt = 8;
static unsigned char rxData = 0;
switch (__even_in_range(TA0IV, TA0IV_TAIFG)) { // Use calculated branching
case TA0IV_TACCR1: // TACCR1 CCIFG - UART RX
TACCR1 += UART_TBIT; // Add Offset to CCRx
if (TACCTL1 & CAP) { // Capture mode = start bit edge
TACCTL1 &= ~CAP; // Switch capture to compare mode
TACCR1 += UART_TBIT_DIV_2; // Point CCRx to middle of D0
}
else {
rxData >>= 1;
if (TACCTL1 & SCCI) { // Get bit waiting in receive latch
rxData |= 0x80;
}
rxBitCnt--;
if (rxBitCnt == 0) { // All bits RXed?
rxBuffer = rxData; // Store in global variable
rxBitCnt = 8; // Re-load bit counter
TACCTL1 |= CAP; // Switch compare to capture mode
__bic_SR_register_on_exit(LPM0_bits); // Clear LPM0 bits from 0(SR)
}
}
break;
}
}
//----------
Re: TI MSP430 Launch Pad
Спасибо огромное!! помогло!!
-
andrey_vsk
- Родился
- Сообщения: 3
- Зарегистрирован: Ср дек 14, 2011 09:59:57
- Откуда: г.Мурманск
- Контактная информация:
Re: TI MSP430 Launch Pad
C HD44780 кто нибудь разобрался? У меня 3,3V вариант его, не хочет работать и все тут... в инете нашел описание, что в некоторых стоят совместимые чипы HD44780/ST7066. Вот на второй вариант чипа не пробовал писать, может у кого библиотека есть на него?