UART MSP430 вопрос

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
ice126
Открыл глаза
Сообщения: 57
Зарегистрирован: Чт май 26, 2016 14:56:43

UART MSP430 вопрос

Сообщение ice126 »

Здравствуйте.
Не могу понять, почему не вызывается обработчик прерывания.
При том, что при передаче с COM Port Toolkit мигает светодиод RXD но в терминале ничего не отображается и прерывание не вызывается.
Порты создаю и связываю Virtual Serial Ports. Тестовое сообщение из кода выводит что попало в COM Port Toolkit.

Изображение

Изображение

Прерывание RX
Спойлер#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
char data;
data = UCA0RXBUF;
uart_puts(data);
}
Инициализация UART
СпойлерBCSCTL1 = CALBC1_1MHZ; // Тактовая частота 1MHz
DCOCTL = CALDCO_1MHZ;
P3SEL = BIT5+ BIT4; // настраиваем линии порта
UCA0CTL1 |= UCSSEL_2; // Источник тактирования UART --- SMCLK
UCA0BR0 = 104; // Настраиваем скорость 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Модуляция UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // Инициализируем модуль USCI
IE2 |= UCA0RXIE; // Разрешаем прерывания от UART.
Реклама
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: UART MSP430 вопрос

Сообщение JackSmith »

Мне не удалось завести в Proteus UART на MSP430x2xx, пришлось использовать софтовый.
Реклама
ice126
Открыл глаза
Сообщения: 57
Зарегистрирован: Чт май 26, 2016 14:56:43

Re: UART MSP430 вопрос

Сообщение ice126 »

JackSmith писал(а):Мне не удалось завести в Proteus UART на MSP430x2xx, пришлось использовать софтовый.
Я уже тоже решил плюнуть на это дело и в железе отладку делать.
Реально прикошмарило каждый раз после запуска дебагера перезагружаться - зависает COM-порт.
COM Port Toolkit хоть порты все видит, а Proteus на СОМ4 заканчивается. Делаю мосты СОМ2-СОМ5, СОМ3-СОМ6, СОМ4-СОМ7
И так вот 3 раза дебагер запустил и перезагрузка.

С I2C разобрался и все нормально работает. Вот думаю может и здесь я туплю, а не Proteus.
Может это из-за Windows 7 - не знаю.

У меня вообще проект на G2553, но его нет в Proteus.
Хотел отладить на F2132, а потом просто поменять линии порта и уже тестить в железе окончательно.

Добавлено after 15 minutes 57 seconds:
В то же время, когра вешаю на RXD осциллограф - сечет передачу по порту.
Мне кажется тут что-то с приемом на уровне МК, а вот что?..
Еще для G2553 линии порта указываются P1SEL и P1SEL2, а для F2132 - P3SEL.
Может здесь собака зарыта?
Хотя я пока еще думаю, что где-то я туплю - только изучаю данный МК.

Изображение
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: UART MSP430 вопрос

Сообщение JackSmith »

ice126 писал(а): Я уже тоже решил плюнуть на это дело и в железе отладку делать.
Аналогично, АЦП я там тоже не поднял, вне зависимости от того, что кидаешь на него: землю или шину питания - всегда выдает 1023, хотя та же программа на железке вполне нормально работает. Про то что I2C там рабочий для меня новость, я даже пытаться не стал его поднять, сразу поставил совтовый, потом попробую аппаратный завести.
У меня вообще проект на G2553, но его нет в Proteus.
В Proteus 8.5 он уже есть.
Реклама
Эиком - электронные компоненты и радиодетали
ice126
Открыл глаза
Сообщения: 57
Зарегистрирован: Чт май 26, 2016 14:56:43

Re: UART MSP430 вопрос

Сообщение ice126 »

JackSmith писал(а):
ice126 писал(а): Я уже тоже решил плюнуть на это дело и в железе отладку делать.
Аналогично, АЦП я там тоже не поднял, вне зависимости от того, что кидаешь на него: землю или шину питания - всегда выдает 1023, хотя та же программа на железке вполне нормально работает. Про то что I2C там рабочий для меня новость, я даже пытаться не стал его поднять, сразу поставил совтовый, потом попробую аппаратный завести.
У меня вообще проект на G2553, но его нет в Proteus.
В Proteus 8.5 он уже есть.

АЦП и I2C у меня работает норм. Компаратор тоже работает. Правда, когда выставил регистры на внешнее опорное Proteus вылетал всегда в фатал эрор. С 0,25 и 0,5 питания компаратор работает без проблем.

Может все же кто-то запустил USCI в Proteus? Поделитесь кодом, пожалуйста.
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: UART MSP430 вопрос

Сообщение Ser60 »

Верно-ли я понимаю, что проблема только как работать с UART в Протеусе, а в железе все работает? Протеус я не использую, но если есть проблемы с функционированием модулей MSP430 в железе, мог-бы помочь.
Реклама
ice126
Открыл глаза
Сообщения: 57
Зарегистрирован: Чт май 26, 2016 14:56:43

Re: UART MSP430 вопрос

Сообщение ice126 »

Ser60 писал(а):Верно-ли я понимаю, что проблема только как работать с UART в Протеусе, а в железе все работает? Протеус я не использую, но если есть проблемы с функционированием модулей MSP430 в железе, мог-бы помочь.

Здравствуйте.
В железе еще не реализовано - тестирую в Протеусе.
Если Вам не сложно - гляньте, правильно ли я инициализирую и прерывание прописал?

Добавлено after 13 minutes 8 seconds:
JackSmith писал(а):
У меня вообще проект на G2553, но его нет в Proteus.
В Proteus 8.5 он уже есть.
Типа есть. При создании проекта можно указать этот МК, но в наборе компонент его нет.
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: UART MSP430 вопрос

Сообщение Ser60 »

Вот Вам рабочий код, проверенный в железе под IAR. Он принимает символ из терминала по прерыванию и если это латинская буква, то инвертирует заглавные в строчные и наоборот, и отсылает символ обратно в терминал.

У Вас имеется внутрисхемный отладчик? Если ДА, никогда не понимал зачем нужен Протеус при наличии отладчика.
Спойлер

Код: Выделить всё

#include "io430.h"
#define RX	P1					// UART pins on P1
#define TX	P2

void Clock_config();				// function prototypes
void Ports_config();
void UART_config();

int main()
{
  	WDTCTL = WDTPW + WDTHOLD;		// stop watchdog timer
	Clock_config();				// set 8 MHz MSCK, 2 MHz SMCLK
	Ports_config();				// set up ports for GPIO
	UART_config();				// configure USCI A0 module for UART
  	__enable_interrupt();			// enable interrupts globally
	__low_power_mode_0();			// wait for char receive
	
	while(1)
	{
		__no_operation();		  
	}
}

void Clock_config()				// configure basic clock module
{
  	DCOCTL = CALDCO_1MHZ;			// set 1 MHz MCLK
	BCSCTL1 = CALBC1_1MHZ;
	BCSCTL2 = 0;				// SMCLK=MCLK
	BCSCTL3 = LFXT1S1;			// select VLO as ACLK  
}

void Ports_config()
{
  	P1SEL = RX + TX;				// assign P1.1 and P1.2 to UCA0
	P1SEL2 = RX + TX;
}

void UART_config()
{
  	UCA0CTL1 = UCSSEL1 + UCSWRST;		// SMCLK, keep module in RESET
	UCA0BR1 = 0;
	UCA0BR0 = 104;				// set 9600 8N1 mode
	UCA0MCTL = UCBRS1;			// fractional part of freq. divider
	UCA0CTL1 &= ~UCSWRST;			// enable operation
	IE2 = UCA0RXIE;				// enable RX interrupt
}

#pragma vector=USCIAB0RX_VECTOR		// USI UART handler
__interrupt void USCI_ISR(void)
{
 	char c = UCA0RXBUF;			// get received character
	if (('A' <= c && c <= 'Z') ||
	    ('a' <= c <= 'z'))
	  c ^= 32;					// flip case of letters
	while(!IFG2 & UCA0TXIFG){}		// wait for TX ready
	UCA0TXBUF = c;				// transmit character
}	
ice126
Открыл глаза
Сообщения: 57
Зарегистрирован: Чт май 26, 2016 14:56:43

Re: UART MSP430 вопрос

Сообщение ice126 »

Все же не во мне проблема.
Протеус уже 8.6 поставил - результат тот же.
К стати, G2553 тоже дает выбрать на стадии создания проекта, но компонента такого нет.
Жаль.
Сколько искал доп библиотеки - только за 600 баксов есть с этим МК.
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: UART MSP430 вопрос

Сообщение Ser60 »

Не понял какие доп. библиотеки искали. Для Протеуса что-ли? Мой Вам совет - забудьте о нём. Зачем Вам нужен инструмент, в котором баг на баге сидит, и который, к тому-же, не гарантирует, что после него будет работать в железе. Я код, выложенный выше только чтo лично проверит с G2553 и USB-UART конвертером на CP2104 и терминальной программой от Parallax и работоспособность его гарантирую.
СпойлерИзображение
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: UART MSP430 вопрос

Сообщение JackSmith »

ice126 писал(а):К стати, G2553 тоже дает выбрать на стадии создания проекта, но компонента такого нет.
Жаль.
?
Изображение

Ser60 писал(а):Верно-ли я понимаю, что проблема только как работать с UART в Протеусе, а в железе все работает? Протеус я не использую, но если есть проблемы с функционированием модулей MSP430 в железе, мог-бы помочь.
Не могу выставить тактирование через DCO

Код: Выделить всё

    DCOCTL=CALDCO_1MHZ;
    BCSCTL1=CALBC1_1MHZ;
Вне зависимости от константы устанавливается одинаковая частота около 8MHz(судя по скорости мигания светодиода). В чем может быть причина? Чип: msp430g2453
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: UART MSP430 вопрос

Сообщение Ser60 »

Не можете в Протеусе или в железе - с этого следует начинать вопрос. Если первое, то я бессилен. Строчки кода для установки частоты DCO правильные. Посмотрите отладчиком содержимое этих регистров (DCOCTL и BCSCTL1) и посчитайте какая должна быть частота. Или просто выведите SMCLK на P1.4 и измерьте. В общем, мало информации. Может у Вас в коде светодиод управляется таймером тактируемым от ACLK, или частотой независимой от DCO.
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: UART MSP430 вопрос

Сообщение JackSmith »

Ser60 писал(а):Не можете в Протеусе или в железе - с этого следует начинать вопрос. Если первое, то я бессилен. Строчки кода для установки частоты DCO правильные. Посмотрите отладчиком содержимое этих регистров (DCOCTL и BCSCTL1) и посчитайте какая должна быть частота. Или просто выведите SMCLK на P1.4 и измерьте. В общем, мало информации. Может у Вас в коде светодиод управляется таймером тактируемым от ACLK, или частотой независимой от DCO.
речь шла конечно же о реальном чипе. отладчика увы нет, есть только BSL программатор. теоретически можно было бы значения нужных регистров передать через UART, но чтобы выставить битрейт передатчика, нужно знать скорость работы микроконтроллера.
прошивка простейшая:

Код: Выделить всё

#include <msp430g2453.h>
#include <sys/types.h>
#define LED BIT0

int main (void)
{
    WDTCTL=WDTPW | WDTHOLD; //turn off watchdog

    P1DIR = LED;
    P1OUT &=~LED;

    //  setup DCO
    DCOCTL=CALDCO_1MHZ;
    BCSCTL1=CALBC1_1MHZ;

    int i=0;
    while (1)
    {
        for(i=0;i<20;i++)
            __delay_cycles(0xFFFF);
        P1OUT ^= LED;
    }

    return 0;
 }

здесь если суффиксы констант поменять на 16MHZ, то если судить по частоте мигания светодиода, эффекта никакого это не производит. причем, если вообще убрать это строки:

Код: Выделить всё

    DCOCTL=CALDCO_1MHZ;
    BCSCTL1=CALBC1_1MHZ;
то микроконтроллер работает на частоте 1MHz если судить по коэффициенту UART.

Если сравнивать ассемблерный код для 16MHz варианта, то здесь все правильно:

Код: Выделить всё

0000e03e <main>:
    e03e:	b2 40 80 5a 	mov	#23168,	&0x0120	;#0x5a80
    e042:	20 01 
    e044:	d2 43 22 00 	mov.b	#1,	&0x0022	;r3 As==01
    e048:	f2 f0 fe ff 	and.b	#-2,	&0x0021	;#0xfffe
    e04c:	21 00 
    e04e:	d2 42 f8 10 	mov.b	&0x10f8,&0x0056	
    e052:	56 00 
    e054:	d2 42 f9 10 	mov.b	&0x10f9,&0x0057	
    e058:	57 00 
    e05a:	0e 43       	clr	r14		
    e05c:	06 3c       	jmp	$+14     	;abs 0xe06a
    e05e:	3f 40 54 55 	mov	#21844,	r15	;#0x5554
    e062:	1f 83       	dec	r15		
    e064:	fe 23       	jnz	$-2      	;abs 0xe062
    e066:	03 43       	nop			
    e068:	1e 53       	inc	r14		
    e06a:	3e 90 14 00 	cmp	#20,	r14	;#0x0014
    e06e:	f7 3b       	jl	$-16     	;abs 0xe05e
    e070:	d2 e3 21 00 	xor.b	#1,	&0x0021	;r3 As==01
    e074:	0e 43       	clr	r14		
    e076:	f3 3f       	jmp	$-24     	;abs 0xe05e

0000e078 <__stop_progExec__>:
    e078:	32 d0 f0 00 	bis	#240,	r2	;#0x00f0
    e07c:	fd 3f       	jmp	$-4      	;abs 0xe078

для 1MHz варианта:

Код: Выделить всё

0000e03e <main>:
    e03e:	b2 40 80 5a 	mov	#23168,	&0x0120	;#0x5a80
    e042:	20 01 
    e044:	d2 43 22 00 	mov.b	#1,	&0x0022	;r3 As==01
    e048:	f2 f0 fe ff 	and.b	#-2,	&0x0021	;#0xfffe
    e04c:	21 00 
    e04e:	d2 42 fe 10 	mov.b	&0x10fe,&0x0056	
    e052:	56 00 
    e054:	d2 42 ff 10 	mov.b	&0x10ff,&0x0057	
    e058:	57 00 
    e05a:	0e 43       	clr	r14		
    e05c:	06 3c       	jmp	$+14     	;abs 0xe06a
    e05e:	3f 40 54 55 	mov	#21844,	r15	;#0x5554
    e062:	1f 83       	dec	r15		
    e064:	fe 23       	jnz	$-2      	;abs 0xe062
    e066:	03 43       	nop			
    e068:	1e 53       	inc	r14		
    e06a:	3e 90 14 00 	cmp	#20,	r14	;#0x0014
    e06e:	f7 3b       	jl	$-16     	;abs 0xe05e
    e070:	d2 e3 21 00 	xor.b	#1,	&0x0021	;r3 As==01
    e074:	0e 43       	clr	r14		
    e076:	f3 3f       	jmp	$-24     	;abs 0xe05e

0000e078 <__stop_progExec__>:
    e078:	32 d0 f0 00 	bis	#240,	r2	;#0x00f0
    e07c:	fd 3f       	jmp	$-4      	;abs 0xe078
что я делаю не так?
ice126
Открыл глаза
Сообщения: 57
Зарегистрирован: Чт май 26, 2016 14:56:43

Re: UART MSP430 вопрос

Сообщение ice126 »

Ser60 писал(а):Не понял какие доп. библиотеки искали. Для Протеуса что-ли? Мой Вам совет - забудьте о нём. Зачем Вам нужен инструмент, в котором баг на баге сидит, и который, к тому-же, не гарантирует, что после него будет работать в железе. Я код, выложенный выше только чтo лично проверит с G2553 и USB-UART конвертером на CP2104 и терминальной программой от Parallax и работоспособность его гарантирую.
СпойлерИзображение
Пока нет внутрисхемного. Максимум что есть отладочная платка за 4 бакса от TI и то как-то не пользуюсь ею - только для прошивки, как правило.
Протеус глючный и я в этом убедился, но все же некоторые вещи он помогает выполнить быстрее и проще. По крайней мере пока мне помогает.

Добавлено after 4 minutes 5 seconds:
JackSmith писал(а):
ice126 писал(а):К стати, G2553 тоже дает выбрать на стадии создания проекта, но компонента такого нет.
Жаль.
?
Изображение
Изображение

Вы бы не могли выложить свои библиотеки где-то?

Добавлено after 3 hours 8 minutes 23 seconds:
Извините - протупил. Протеусов у меня два и, соответственно, 8.6 хватнул пути библиотек от 8.1
Разрулил. Спасибо.
Самое интересное, когда даешь список из двух путей то он берет не самую новую библиотеку, а первую по списку...
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: UART MSP430 вопрос

Сообщение Ser60 »

JackSmith - всё правильно у Вас в коде. Сдаётся мне, что Вы затерли калибровочные константы в памяти МК. Они хоть и дефолтно защишены от записи после ресета, но ... всё бывает. Попробуйте згрузить непосредственно их значения для моего экземпляра 2553. Точных частот у себя вряд-ли получите, но разницу между 1 и 16 мгц ощутите:
CALDCO_16MHZ = 0x90
CALBC1_16MHZ = 0x8F
CALDCO_12MHZ = 0x9A
CALBC1_12MHZ = 0x8E
CALDCO_8MHZ = 0x8C
CALBC1_8MHZ = 0x8D
CALDCO_1MHZ = 0xCD
CALBC1_1MHZ = 0x86

ice126 - какая у Вас платка за $4? Такая? Раньше она действительно $4 стоила, сейчас около $10.

Коты - купите себе хотя-бы такую по ссылке выше. На ней и программатор и внутрисхемный отладчик имеется. Без него будете тыркаться с МК как слепые котята. Начнёте пользоваться - сами поймёте, что никакой Протеус и не нужен будет.
ice126
Открыл глаза
Сообщения: 57
Зарегистрирован: Чт май 26, 2016 14:56:43

Re: UART MSP430 вопрос

Сообщение ice126 »

Ser60 писал(а): ice126 - какая у Вас платка за $4? Такая? Раньше она действительно $4 стоила, сейчас около $10.

Коты - купите себе хотя-бы такую по ссылке выше. На ней и программатор и внутрисхемный отладчик имеется. Без него будете тыркаться с МК как слепые котята. Начнёте пользоваться - сами поймёте, что никакой Протеус и не нужен будет.
Да, такая. Но я ее брал на Али дешевле. Давно не паял и не програмил - со студенческих, по сути. Сейчас оброс и комплектухой и инструментами, осцилл купил, но всего сразу не купишь.
Чесно говоря, в сторону внутрисхемного даже не думал, но теперь подумаю. Поищу у китайцев.
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: UART MSP430 вопрос

Сообщение Ser60 »

Вы на правильном пути :beer: Но прежде чем покупать что-то более серьёзное, начните с той платки. С её помощью можно и внешние чипы отлаживать внутрисхемно. Их можно к ней подключить сняв джамперы, в мануале на плату все расписано.
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: UART MSP430 вопрос

Сообщение JackSmith »

Ser60 писал(а):JackSmith - всё правильно у Вас в коде. Сдаётся мне, что Вы затерли калибровочные константы в памяти МК. Они хоть и дефолтно защишены от записи после ресета, но ... всё бывает. Попробуйте згрузить непосредственно их значения для моего экземпляра 2553. Точных частот у себя вряд-ли получите, но разницу между 1 и 16 мгц ощутите:
CALDCO_16MHZ = 0x90
CALBC1_16MHZ = 0x8F
CALDCO_12MHZ = 0x9A
CALBC1_12MHZ = 0x8E
CALDCO_8MHZ = 0x8C
CALBC1_8MHZ = 0x8D
CALDCO_1MHZ = 0xCD
CALBC1_1MHZ = 0x86
с этими константами вроде все заработало как надо, потом еще буду проверять с соответствующими UART коэффициентами. спасибо)
ice126
Открыл глаза
Сообщения: 57
Зарегистрирован: Чт май 26, 2016 14:56:43

Re: UART MSP430 вопрос

Сообщение ice126 »

К стати, USCI u I2C, которые работали на F2132, на G2553 в Proteus 8.6 не ожило. Причина не понятна. Ноги поменял, а все остальное оставил в прежнем виде.
Не работает. Ну и фиг с ним - буду в железе уже реализовывать.
Ответить

Вернуться в «Разные вопросы по МК»