РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

ФОРУМ НА ЭЛВО

РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ
  • БЛОГИ
  • НОВОЕ
  • СХЕМЫ
  • РАЗНОЕ
  • ТЕОРИЯ
  • ТЕЛЕВИДЕО
  • СВЕТОДИОД
  • МЕДТЕХНИКА
  • БЫТТЕХНИКА
  • ИЗМЕРИТЕЛИ
  • СПРАВОЧНИК
  • ТЕХНОЛОГИИ
  • РЕМОНТ СХЕМ
  • МОБИЛЬНИКИ
  • КОМПЬЮТЕРЫ
  • НАЧИНАЮЩИМ
  • ЗАРЯДКИ И АКБ
  • СИГНАЛИЗАЦИИ
  • АУДИОТЕХНИКА
  • АВТОВЕЛОМОТО
  • БЛОКИ ПИТАНИЯ
  • РАДИОПРИЁМНИКИ
  • МЕТАЛЛОИСКАТЕЛИ
  • МИКРОКОНТРОЛЛЕР
  • РАДИОПЕРЕДАТЧИКИ


    • Страница 1 из 2
    • 1
    • 2
    • »
    Архив - только для чтения
    Осваиваем микроконтроллер MSP430
    Пн, 24.12.2012, 22:13 | Сообщение # 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)
    Вт, 25.12.2012, 07:51 | Сообщение # 2        
    skateman
    аватар
      Постов: 2201   Друзья 
    frenele, какой объем кода халявный IAR для MSP поддерживает?
    Вт, 25.12.2012, 21:53 | Сообщение # 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
    {

    }

    }

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


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

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

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

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

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


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

    Круто. Жаль времени нет, а то бы поковырял.
    Чт, 27.12.2012, 17:52 | Сообщение # 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. Что исключает непредсказуемые задержки при новом счёте. Это важно для временных диаграмм требующих особой точности.
    Пт, 28.12.2012, 07:30 | Сообщение # 10        
    skateman
    аватар
      Постов: 2201   Друзья 
    Цитата (frenele)
    Его период определятся регистром сравнения TA0CCR0, а не загрузкой нового значения в обработчике прерывания как реализуется в пик и авр контроллерах.

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

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

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



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