реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как обработать нажатие на кнопку MCBSTR9, Механизм внешних прерываний
WreWolf
сообщение Nov 10 2007, 12:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 10-11-07
Пользователь №: 32 211



Пользуюсь mVision, отладочная плата MVBSTR9 (камешек STR912FA)
необходимо отследить нажатие на кнопку на порте P3.6 ( INT6 )
и обработать это событие.

P.S.
В микроконтроллера еще лолка и по этому прошу максимально подробно.
вот по аналогии с примером blinky для этой платы устанавливаю цифровой вход на P3.6

SCU->GPIOIN[3] |= 0x40; // ставим входы на P3 на 6 бит(вход) ( 01000000 ) такой ли порядок битов?
SCU->GPIOOUT[3] &=0xCFFF; // соответственно ставим выходы P3 ( 11001111 )
GPIO#->DDR &=0x40; // ( 01000000 ) направлени входа ( P3.6 direction - input ) или тут как и для P4.0 должно стоять 0xFE ( 11111110 )

Заранее спасибо.

Если есть то плиз. киньте линки на русс.(желательно) ресурся про MCBSTR9
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Nov 12 2007, 07:31
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Это должно работать.
Код для IAR 5.10

[code]
//инициализация вызывается 1 раз при стрете программы
SCU_PCGR1_bit.GPIO3 = 1;
SCU_PRR1_bit.RST_GPIO3 = 1;
SCU_MGR1_bit.MSK_GPIO3 = 1;
SCU_PECGR1_bit.GPIO3 = 1;
GPIO3_DIR_bit.no6 = 0; //this pin input
SCU_GPIOTYPE3_bit.P3TYPE6 = 0;
SCU_GPIOIN3_bit.P3IN6 = 0;
SCU_GPIOOUT3_bit.P3OUT6 = 0; //this pin input
//ко6нец инициализации

//возвращает 1 если кнопка нажата иначе 0
u32_t get_key(void)
{
u32_t i;
if (GPIO3_DATA_bit.no6 != 0) return(0);
for(i=0;i<200;i++) {__no_operation();}; //задает время анти дребезга
if (GPIO3_DATA_bit.no6 != 0) return(0);
return(1);
}
Go to the top of the page
 
+Quote Post
WreWolf
сообщение Nov 12 2007, 08:18
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 10-11-07
Пользователь №: 32 211



Спасибо бум пробовать. как до компа дойду скину код примера. в том числе и получение аналогового сигнала с потенциометра отладочной платы.
Go to the top of the page
 
+Quote Post
WreWolf
сообщение Nov 12 2007, 10:35
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 10-11-07
Пользователь №: 32 211



Вот такой вопрос, а ты уверн в
SCU_GPIOIN3_bit.P3IN6=0;
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Nov 13 2007, 08:16
Сообщение #5


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Цитата(WreWolf @ Nov 12 2007, 14:35) *
Вот такой вопрос, а ты уверн в
SCU_GPIOIN3_bit.P3IN6=0;

Да, изучайте мануал, это выбор альтернативной функции для входа, для пина не имеет значения по большому счету.
Go to the top of the page
 
+Quote Post
OsipovD
сообщение Nov 25 2007, 10:13
Сообщение #6





Группа: Участник
Сообщений: 13
Регистрация: 29-10-07
Пользователь №: 31 848



На форуме Keil(a) уже обсуждался этот вопрос и есть подробно изложенное решение - http://keil.com/forum/docs/thread8725.asp , приведён код как раз для keil(а).
Go to the top of the page
 
+Quote Post
WreWolf
сообщение Nov 25 2007, 11:15
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 10-11-07
Пользователь №: 32 211



Спасибо! очень информативно.

не подскажите какой регистр отвечает за сраба тывание прерывания по высокому уровню.
т.е. как я понял 1 регистр выбирает "перепад<->уровень"
а 2 регистр "высокий<->низкий" или "положительный<->отрицательный" перепад
Go to the top of the page
 
+Quote Post
OsipovD
сообщение Nov 28 2007, 20:30
Сообщение #8





Группа: Участник
Сообщений: 13
Регистрация: 29-10-07
Пользователь №: 31 848



Цитата(WreWolf @ Nov 25 2007, 14:15) *
Спасибо! очень информативно.

не подскажите какой регистр отвечает за сраба тывание прерывания по высокому уровню.
т.е. как я понял 1 регистр выбирает "перепад<->уровень"
а 2 регистр "высокий<->низкий" или "положительный<->отрицательный" перепад

А можно названия? Что за первый и что за второй регистры? Кстати если нужно только обработать нажатие. То можно просто настроить регистры SCU и GPIO как показано на форуме кейла ( это можно сделать и в окне configuration wizard в startup.s), а затем считать значение if ( GPIO3->DR[0x3FC] == 0x4F) {...}./* По-моему 0x4F( недавно писал подобный обработчик- воспроизвожу на память- программа осталась на работе)*/ Без всяких прерываний.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01495 секунд с 7
ELECTRONIX ©2004-2016