roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 04:10

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Вопросы по AT91SAM7S64
СообщениеДобавлено: 17 янв 2018, 20:36 
Не в сети

Зарегистрирован: 20 янв 2014, 22:44
Сообщения: 63
Здравствуйте!
Немного разобрался с AT91SAM7S64 управляю по TWI микросхемой PCA9685 шевелю сервомашинками, с USART тоже вроде все работает, но не могу разобраться с прерыванием по приходу данных в USART прерывание устанавливается один первый раз потом сбрасываю и больше не реагирует, что только не пробовал, может кто сталкивался, подскажите? Еще вопрос такой почему у меня в коде в Keil uVision4 не работает инструкция типа A = A + B; что мешает проводить подобные арифметические операции? И еще вопрос по преобразованию типов как преобразовать unsigned int -> char для последующей отправки по USART?

Код:
void CPUinit()

  //AIC_IDCR регистр запрещения прерываний
  AT91C_BASE_AIC->AIC_IDCR = 0x1 << AT91C_ID_US0;
  //AIC_SVR регистр вектора источника прерываний 0-31
  AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0] = (unsigned long) Usart_c_irq_handler;
  //AIC_SMR регистр режима источника прерываний 0-31
  AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US0] = AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | USART_INTERRUPT_LEVEL;//AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE//AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL
  //AIC_ICCR регистр команды сброса прерываний
  AT91C_BASE_AIC->AIC_ICCR = 0x1 << AT91C_ID_US0;
  //AT91C_BASE_AIC->AIC_ICCR = 0;
  AT91C_BASE_AIC->AIC_IECR = 0x1 << AT91C_ID_US0;//AIC_IECR регистр команды разрешения прерываний
}
//======================================================
void InitUSART0(unsigned long int baudrate)
{
  //US_IER регистр разрешения прерываний от USART (разрешение прерываний при приеме символа USART0)
  AT91C_BASE_US0->US_IER = (0x1 << 5);//***???***AT91C_US_RXRDY (0x1 << 0) / AT91C_US_TXRDY (0x1 << 1)       

  AT91C_BASE_US0->US_CR = AT91C_US_RXEN |          /* Receiver Enable    */
                          AT91C_US_TXEN;           /* Transmitter Enable */
   
  //AIC_ICCR регистр команды сброса прерываний
  AT91C_BASE_AIC->AIC_ICCR = 0x1 << AT91C_ID_US0;   
}
//======================================================
//Обработчик прерываний от USART0
void Usart_c_irq_handler(void)
{
    unsigned int status;
    unsigned int i1 = 0;
    //получение регистра состояния USART0 и номера активного прерывания
    status = AT91C_BASE_US0->US_CSR ;//US_CSR регистр состояния канала USART
    status &= AT91C_BASE_US0->US_IMR;//US_IMR регистр маски прерываний от USART
    //если это прерывание при приеме символа  USART0, то обработать его
    /*if(status & AT91C_US_RXRDY)
  {
      data = read_char_USART0();
  }*/
    status = 0;
    data = 0;
    AT91C_BASE_PIOA->PIO_SODR = LED3;
    for(i1 = 0; i1<2000000; i1++)
    {
            //***
    }
    AT91C_BASE_PIOA->PIO_CODR = LED3;
    //=======================================
    //Reset the satus bit for error
    AT91C_BASE_US0->US_CR = AT91C_US_RSTSTA;//***???***
    //=======================================
    AT91C_BASE_AIC->AIC_EOICR = 0;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по AT91SAM7S64
СообщениеДобавлено: 01 апр 2018, 08:26 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
у меня at91sam3x8e зависал из-за прерывания по уходу байта, приходилось проверять в прерывании есть ли ещё данные на отправку, если нет отключать прерывание(иначе прерывание бесконечно срабатывало). посмотрите на форуме атмел, я там нашёл решение своей проблемы.

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по AT91SAM7S64
СообщениеДобавлено: 01 апр 2018, 13:27 
Не в сети

Зарегистрирован: 20 янв 2014, 22:44
Сообщения: 63
Проблему решил, нужно каждый раз снова включать бит установки прерывания, после того как оно отработает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по AT91SAM7S64
СообщениеДобавлено: 19 авг 2021, 09:22 
Не в сети
Аватара пользователя

Зарегистрирован: 30 июл 2021, 08:58
Сообщения: 20
Почитай PDC с microsin.net. PERIPH_TCR=0 выключение PDC ,а вдруг


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по AT91SAM7S64
СообщениеДобавлено: 19 авг 2021, 16:59 
Не в сети

Зарегистрирован: 20 янв 2014, 22:44
Сообщения: 63
Год сообщения посмотри!
Тем же годом перешел на STM32 и проблемы исчезли!


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

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


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

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


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO