Форум программистов, компьютерный форум, киберфорум
AzaKendler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Hellow World MSP430

Запись от AzaKendler размещена 05.09.2012 в 19:04
Показов 17026 Комментарии 5
Метки interrupt, msp430, port, timer

В процессе изучения MSP430 столкнулся с большим множеством разрозненных примеров. И они конечно не работают. Основная причина - это разные вариации. Сразу скажу что код для MSP43f5137 имеено в таком заголовке и будут все соответсвующие костанты. Компиллятор - сборка msp430gcc. Постарался написать побольше комментов чтобы тем кто случайно найдет в поиске было бы как можно понятнее. Вобщем это для начинающих, примерно показывает как работает там все. Еще хочется добавить что в данном примере диоды и кнопки привязаны к конкретным ножкам кристалла - эту информацию надо брать из схемы конкретной платы с которой идет работа. Поэтому копипаст примеров из сети практически никогда не работает

HELLOW WORLD
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <msp430.h>
 
volatile short count = 0;
 
int main(void)
{
__disable_interrupt();//сбрасывает флаг GIE в SR
 
WDTCTL = WDTPW + WDTHOLD; //отключаем сторожевой таймер(можно и его использовать)
 
//настроить ножки порта на вывод для диодов
P2DIR|=BIT1;
P2DIR|=BIT2;
P2DIR|=BIT3;
P2DIR|=BIT4;
 
 
//настроить ножку порта для кнопки 0
P1DIR &= ~BIT0;//задаем направление на ножке - input
P1REN |= BIT0; //включаем pullup/pulldown резистор
P1IE |= BIT0; //включаем прерывания на ножке порта
P1IES |= BIT0;//выбираем момент генерации прерывания - на нажатие кнопки bit==1
P1IFG &=~BIT0; //очищаем флаг прерывания по данной ножке порта
P1OUT |= BIT0; //Bit = 1: Pin is pulled up поскольку P1REN == 1;
 
 
//настроить ножку порта для кнопки 1
P1DIR &= ~BIT1;//задаем направление на ножке - input
P1REN |= BIT1; //включаем pullup/pulldown резистор
P1IE |= BIT1; //включаем прерывания на ножке порта
P1IES |= BIT1;//выбираем момент генерации прерывания - на нажатие кнопки bit==1
P1IFG &=~BIT1; //очищаем флаг прерывания по данной ножке порта
P1OUT |= BIT1; //Bit = 1: Pin is pulled up, поскольку P1REN == 1;
 
P1DIR |=~(BIT1|BIT0);//установить неиспользованные ножки порта в положение out,
//так же неисп ножки должны быть настроены на I/O, оно по умолчанию так и есть
 
 
__enable_interrupt();// включаем прерывания
 
while(1)
{
//главный цикл
}
 
}
 
void cascad (void) //работа с диодами
{
 
++count;
 
switch(count)
{
case 1:
{
P2OUT|=BIT1;
P2OUT&=~(BIT2|BIT3|BIT4);
P1IFG &=~BIT0;
break;
}
case 2:
{
 
P2OUT|=BIT2;
P2OUT&=~(BIT1|BIT3|BIT4);
P1IFG &=~BIT0;
break;
}
case 3:
{
P2OUT|=BIT3;
P2OUT&=~(BIT2|BIT1|BIT4);
P1IFG &=~BIT0;
break;
}
case 4:
{
P2OUT|=BIT4;
P2OUT&=~(BIT2|BIT3|BIT1);
P1IFG &=~BIT0;
break;
}
 
default:
count=0;
P2OUT&=~(BIT2|BIT3|BIT1|BIT4);
P1IFG &=~BIT0;
}
}
 
 
 
void __attribute__((interrupt(PORT1_VECTOR))) P1INT(void) //обработка прерывания от порта 1 с кнопками
{
if(P1IFG&BIT0)
{
//остановка таймера
TA0CCR0 &= BITC;
TA0CTL &= BITC;
TA0CCTL0 &= BITC;
TA0CTL&= BITC;
cascad();
 
}
else if(P1IFG&BIT1)
{
count=0;
P2OUT&=~(BIT2|BIT3|BIT1|BIT4);
P1IFG &=~BIT1;
 
//запуск таймера
TA0CCR0 = 32767; //потолок таймера
TA0CTL = TASSEL_2+TACLR;//Выбор источника тактирования + очитска счетчика
TA0CCTL0 = CCIE; //включить прерывание таймера
TA0CTL|=MC_1; //выбрать направление таймера - вверх до значения из TA0CCR0
}
}
 
void __attribute__((interrupt(TIMER0_A0_VECTOR)))TIMER_INT(void) //обработка прерывания от таймера
{
cascad();
}


РЕЗУЛЬТАТ

что то все таки в этом есть.
Метки interrupt, msp430, port, timer
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 5
Комментарии
  1. Старый комментарий
    Аватар для raxper
    www.youtube.com/watch?v=pXCtkz_LayQ


    ...у вас что-то со ссылкой на видео, поправьте.
    Запись от raxper размещена 05.09.2012 в 19:23 raxper вне форума
  2. Старый комментарий
    Аватар для AzaKendler
    поправил спасибо
    Запись от AzaKendler размещена 05.09.2012 в 19:24 AzaKendler вне форума
  3. Старый комментарий
    Аватар для programina
    На 14-й строчке "дидодов"
    Запись от programina размещена 06.09.2012 в 16:34 programina вне форума
  4. Старый комментарий
    Аватар для and_y87
    Блин, Клёва!!!
    И красиво... с диодами

    Запись от and_y87 размещена 06.09.2012 в 21:49 and_y87 вне форума
  5. Старый комментарий
    Аватар для Dmitry
    давно не брал я в руки шашек...
    http://dmitrykhn.homedns.org/d... isplay.wmv
    Запись от Dmitry размещена 06.09.2012 в 22:38 Dmitry вне форума
 
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru