РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

Форум на ЭЛВО


РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ



  • Страница 1 из 2
  • 1
  • 2
  • »
Архив - только для чтения
Осваиваем микроконтроллер MSP430
Сообщение # 1        
frenele
аватар
  Постов: 30   ОК 
Здравствуйте уважаемые форумчане! Решил я поделится свежими знания по программированию нового микроконтроллера MSP430 для радиолюбителей.

Компания Техас Инструменс разработала для начинающих недорогой отладочный набор MSP-EXP430G2. На сегодняшний день это самое дешевое отладочное средство.
Я купил такой набор всего за 319 рублей. В него входит два микроконтроллера и отладочная плата с программатором с поддержкой внутрисхемной отладки.

Добавлено (24.12.2012, 22:51)
---------------------------------------------
На сайте производителя предполагаются две бесплатные среды разработки
Code Composer Studio
IAR Embedded Workbench Kickstart

Вот пример проекта мигание светодиода от таймера
Добавлено (24.12.2012, 23:13)
---------------------------------------------
#include <msp430g2553.h>

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT

BCSCTL1 |= DIVA_0; // ACLK/1
BCSCTL3 |= XCAP_3; // 12.5pF cap- setting for 32768Hz crystal
BCSCTL2 = SELS + SELM_2;

CCR0 = 512; // 512 -> 1 sec, 30720 -> 1 min
CCTL0 = CCIE; // CCR0 interrupt enabled
TA0CTL = TASSEL_2 + ID_3 + MC_1; // ACLK, /8, upmode

P1DIR = 0xFF; // All P1.x outputs
P1OUT = 0; // All P1.x reset

P2DIR = 0xFF; // All P2.x outputs
P2OUT = 0; // All P2.x reset

_BIS_SR(GIE); //interrupt Enable

while (1) // mainLoop
{

}
}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0 (void)
{
P1OUT ^= 0x01; // Toggle P1.0
}
Файлы: 9826599.jpg (71.0 Kb)
Сообщение # 2        
skateman
аватар
  Постов: 2201   Друзья 
frenele, какой объем кода халявный IAR для MSP поддерживает?
Сообщение # 3        
frenele
аватар
  Постов: 30   ОК 
Цитата (skateman)
какой объем кода халявный IAR для MSP поддерживает?


IAR Embedded Workbench Kickstart - 4 кБт
Code Composer Studio - 16 кБт

Добавлено (25.12.2012, 22:50)
---------------------------------------------
Выкладываю инициализацию UARTа для связи с компьютером
скорость 9600 бод и подключен кварц 32768 Гц

void init_UART()
{
UCA0CTL1 |= UCSWRST; // Reset on USARTA
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600 = 3.41
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
}
void init_PORTS()
{
P1DIR = BIT1 + BIT2; // P1.1,2 outputs

P1SEL = BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD
P1SEL2= BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD

P1OUT = 0; // All P1.x reset

P2DIR = 0xFF; // All P2.x outputs
P2OUT = 0; // All P2.x reset
}

Добавлено (25.12.2012, 22:53)
---------------------------------------------
И обработчик прерывания
#pragma vector= USCIAB0RX_VECTOR
__interrupt void USCIAB0RX (void)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF+1; // TX -> RXed character
unsigned int b = UCA0RXBUF;

if ( b == '...') это пример
{

}
else
{

}

}

Сообщение # 4        
skateman
аватар
  Постов: 2201   Друзья 
frenele, к коду желательно комментов побольше и на нашем славянском.
Как я понял в MSP глобального разрешения прерываний не требуется?
Сообщение # 5        
frenele
аватар
  Постов: 30   ОК 
Цитата (skateman)
Как я понял в MSP глобального разрешения прерываний не требуется?


Тоже требуется, вот строка:
пример на Си

_BIS_SR(GIE); //Разрешение маскируемых прерываний

пример на ассемблер

bis.b #GIE,SR ;Разрешение маскируемых прерываний

Я буду по русски писать коменты, все коды которые я выкладываю опробованы мною.
Сообщение # 6        
skateman
аватар
  Постов: 2201   Друзья 
Теперь ясно. Видимо разница от AVR не особая.
Сообщение # 7        
frenele
аватар
  Постов: 30   ОК 
Цитата (skateman)
Теперь ясно. Видимо разница от AVR не особая.


Разница очень большая. Архитектура и принципы работы модулей очень сильно отличаются от авр и пик. Микроконтроллер способен работать на разных клоках одновременно и переходить с одного клока на другой. Допустим ядро работает на одном тактовом генераторе, а периферия на другом, UART на третем.
Сообщение # 8        
skateman
аватар
  Постов: 2201   Друзья 
Цитата (frenele)
Допустим ядро работает на одном тактовом генераторе, а периферия на другом, UART на третем.

Круто. Жаль времени нет, а то бы поковырял.
Сообщение # 9        
frenele
аватар
  Постов: 30   ОК 
Вот пример реализации шим на порт P1.6

void init_TAMERS()
{
TA0R =0; // начальное значение таймера
TA0CCR0 = 500; // установка периода
TA0CTL |= TASSEL_1 + ID_0 + MC_1; // ACLK, /8, счёт таймера в верх
TA0CCR1 = 400; // Собственно регистр отвечающий за шим
TA0CCTL1 |= OUTMOD_6; // режим установка/сброс порта P1.6

P1DIR |= BIT6; // P1.6 на выход
P1SEL |= BIT6; // P1.6 альтернативная функция вывода
P1OUT = 0; // Очистка порта P1
}

Прерывание не нужно.
TA0CCR1 - в этот регистр загружаешь число для изменения длительности импульса (шим)

Обращаю особое внимание на принцип работы таймера.
Его период определятся регистром сравнения TA0CCR0, а не загрузкой нового значения в обработчике прерывания как реализуется в пик и авр контроллерах.

В MSP430 таймер может инкриминироваться от начального значения как и в авр и пик, а вот сбрасываться в нуль может не только по переполнению, а сравнению с регистром TA0CCR0. Что исключает непредсказуемые задержки при новом счёте. Это важно для временных диаграмм требующих особой точности.
Сообщение # 10        
skateman
аватар
  Постов: 2201   Друзья 
Цитата (frenele)
Его период определятся регистром сравнения TA0CCR0, а не загрузкой нового значения в обработчике прерывания как реализуется в пик и авр контроллерах.

Цитата (frenele)
В MSP430 таймер может инкриминироваться от начального значения как и в авр и пик, а вот сбрасываться в нуль может не только по переполнению, а сравнению с регистром TA0CCR0

в авр это тож есть
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Внимание! Форум переехал на Tehnodium.ru



© 2010-2022 "Форум Радиосхемы". All Rights Reserved  Почта  PDA