Easyelectronics.ru

Электроника для всех
Текущее время: 26 фев 2021, 03:57

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: cc2540 mini dk добавление кнопки
СообщениеДобавлено: 25 май 2013, 19:10 
Здравствуйте!

Зарегистрирован: 25 май 2013, 16:19
Сообщения: 1
Здравствуйте!
Помогите пожалуйста добавить кнопку в пример SimpleBLEPeripheral.

Нужна кнопка по адресу P1.5
В файле hal_key.c меняю:
Код:
/* SW_1 is at P0.0 */
#define HAL_KEY_SW_1_PORT   P0
#define HAL_KEY_SW_1_BIT    BV(0)
#define HAL_KEY_SW_1_SEL    P0SEL
#define HAL_KEY_SW_1_DIR    P0DIR
#define HAL_KEY_SW_1_IEN      IEN1  /* CPU interrupt mask register */
#define HAL_KEY_SW_1_ICTL     P0IEN /* Port Interrupt Control register */
#define HAL_KEY_SW_1_ICTLBIT  BV(0) /* P0IEN - P0.0 enable/disable bit */
#define HAL_KEY_SW_1_IENBIT   BV(5) /* Mask bit for all of Port_0 */
#define HAL_KEY_SW_1_PXIFG    P0IFG /* Interrupt flag at source */

на
Код:
/* SW_1 is at P1.5 */
#define HAL_KEY_SW_1_PORT   P1
#define HAL_KEY_SW_1_BIT    BV(5)
#define HAL_KEY_SW_1_SEL    P1SEL
#define HAL_KEY_SW_1_DIR    P1DIR
#define HAL_KEY_SW_1_IEN      IEN1  /* CPU interrupt mask register */
#define HAL_KEY_SW_1_ICTL     P1IEN /* Port Interrupt Control register */
#define HAL_KEY_SW_1_ICTLBIT  BV(0) /* P0IEN - P0.0 enable/disable bit */
#define HAL_KEY_SW_1_IENBIT   BV(5) /* Mask bit for all of Port_0 */
#define HAL_KEY_SW_1_PXIFG    P1IFG /* Interrupt flag at source */


и в файле simpleBLEPeripheral.c меняю
Код:
  P0DIR = 0xFC; // Port 0 pins P0.0 and P0.1 as input (buttons), all others (P0.2-P0.7) as output
  P1DIR = 0xFF; // All port 1 pins (P1.0-P1.7) as output
  P2DIR = 0x1F; // All port 1 pins (P2.0-P2.4) as output

  P0 = 0x03; // All pins on port 0 to low except for P0.0 and P0.1 (buttons)
  P1 = 0;   // All pins on port 1 to low
  P2 = 0;   // All pins on port 2 to low


на
Код:
  P0DIR = 0xFD; // Port 0 pins P0.0 and P0.1 as input (buttons), all others (P0.2-P0.7) as output
  P1DIR = 0xDF; // All port 1 pins (P1.0-P1.7) as output
  P2DIR = 0x1F; // All port 1 pins (P2.0-P2.4) as output

  P0 = 0x02; // All pins on port 0 to low except for P0.0 and P0.1 (buttons)
  P1 = 0x20;   // All pins on port 1 to low
  P2 = 0;   // All pins on port 2 to low


и ожидаю что у меня будет работать кнопка SW1 (P1.5) и работавшая до этого кнопка SW2 (P0.1), но вопреки моим наивным предположениям, кнопка P1.5 не работает.

Если кто нибудь что нибудь знает, поделитесь пожалуйста информацией, или хоть наведите на путь куда копать.
Может у кого есть ссылочка или мануальчик какой нибудь :)
Спасибо!

UPD

Заработало! =D

Для того что бы добавить кнопку на порт 1, в файле hal_key.c нужно указывать :
Цитата:
/* SW_1 is at P1.5 */
#define HAL_KEY_SW_1_PORT P1
#define HAL_KEY_SW_1_BIT BV(5)
#define HAL_KEY_SW_1_SEL P1SEL
#define HAL_KEY_SW_1_DIR P1DIR
#define HAL_KEY_SW_1_IEN IEN2 /* CPU interrupt mask register */
#define HAL_KEY_SW_1_ICTL P1IEN /* Port Interrupt Control register */
#define HAL_KEY_SW_1_ICTLBIT BV(5) /* P1IEN - P1.5 enable/disable bit */
#define HAL_KEY_SW_1_IENBIT BV(4) /* Mask bit for all of Port_1 */
#define HAL_KEY_SW_1_PXIFG P1IFG /* Interrupt flag at source */


т.е. Для порта 1, IEN == IEN2 и IENBIT == BV(4), так же нужно указывать (извините, в терминологии не селен) IEN бит такой же как бит кнопки на порту: ICTLBIT == BV(5) для P1.5 (но об этом конечно и догадаться можно было).

Кроме этого, нужна функция, примерно такого содержания:
Код:
HAL_ISR_FUNCTION( halKeyPort1Isr, P1INT_VECTOR )
{
  HAL_ENTER_ISR();

  if (HAL_KEY_SW_1_PXIFG & HAL_KEY_SW_1_BIT)
  {
    halProcessKeyInterrupt();
  }

  /*
    Clear the CPU interrupt flag for Port_0
    PxIFG has to be cleared before PxIF
  */
  HAL_KEY_SW_1_PXIFG = 0;
  HAL_KEY_CPU_PORT_1_IF = 0;

  CLEAR_SLEEP_MODE();
  HAL_EXIT_ISR();

  return;
}


Вопрос закрыт


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB