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

 
 
> 1768 - частоты периферии
Allregia
сообщение Aug 16 2011, 21:42
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Или я слепой, но ни в DS ни в UM не нашел четких указаний какие макс. частоты могут иметь клоки периферии?
В CMSIS по умолчанию все стоит /4, т.е. 25Мгц, но есть варианты /1 и /2, так что можно и 100мгц поставить.

Хочу понять - есть ограничение на сами клоки периферии, или на соотношение с ними частоты ядра? Если первое, то не совсем понятно - многие виды периферии имеют потом еще делители/множители (X/Y), которыми можно отрегулировать.
Так есть разница, например для UART или I2S - выставлять клок периферии 25, 50 или 100мгц, если потом приводить к той-же самой рабочей частоте (baudrate, bitrate) ?

Попутно вопрос - какими командами в Кейле разрешаются/запрещаются прерывания (типа EI/DI), и достаточно-ли для того чтобы работало вложенность, просто разрешать прерывания (EI) в обработчике ? У меня есть прерывание от SPI, которому нужен был бы самый высший приоритет и минимальное латенси, т.е. оно должно произойти во время выполнения прерывания от всяких медленных UARTов, системного тика и т.п.

Сорри за глупые вопросы, глаза уже слипаются а голова уже не соображает, пора спать.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
GetSmart
сообщение Aug 18 2011, 06:03
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Общие правила работы с LPCxxxx.

1. Если на конкретный блок периферии не указано ограничение, то можно любое, до 100 мгц (LPC17xx).

2. Чем ниже клок, тем меньше потребление. Можно всегда выставлять 100, можно стараться экономить и ставить минимально необходимое, например делитель 1/8.

3. Чтобы работала вложенность прерываний, нужно их правильно настраивать в NVIC. Глобальный запрет/разрешение прерываний не имеет прямого отношения к вложенности. Эти команды запрещают или разрешают сразу все прерывания.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 18 2011, 07:17
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(GetSmart @ Aug 18 2011, 08:03) *
Общие правила работы с LPCxxxx.

1. Если на конкретный блок периферии не указано ограничение, то можно любое, до 100 мгц (LPC17xx).


Да, но в DS+UM все так разбросано, что хрен чего найдешь.
Вот для SPI указано:
Maximum SPI data bit rate of 12.5 Mbit/s
Maximum data bit rate of one eighth of the peripheral clock rate.
Тут понятно что периферийный клок может быть 100мгц (1/1), а вот для I2S написано:
The sampling frequency can range from 16 kHz to 96 kHz (16, 22.05, 32, 44.1, 48,96) kHz.
И тут уже непонятно что его граничивает на 96? Я пробовал, вроде работает и в 4 раза быстрее, но одно дело попробовать на столе, а другое дело - можно ли это использовать, не нарушение-ли спецификации?

Про SSP написано 50мбит/с в мастере и всего 8 в слейве - не очень понятно откуда такая разница? Сама логика (триггеры/гейты) ведь одна и та-же, и наверняка способна до 100мгц работать, почему слейв так ограничен? Это-же не программный опрос, все аппаратно делается!

Про DMA вообще не нашел указаний.

Цитата
2. Чем ниже клок, тем меньше потребление. Можно всегда выставлять 100, можно стараться экономить и ставить минимально необходимое, например делитель 1/8.

3. Чтобы работала вложенность прерываний, нужно их правильно настраивать в NVIC. Глобальный запрет/разрешение прерываний не имеет прямого отношения к вложенности. Эти команды запрещают или разрешают сразу все прерывания.


Я с NVIC только разбираюсь, непонятны некоторые ньюансы.
Например:
Код
/******  Cortex-M3 Processor Exceptions Numbers ***************************************************/
  NonMaskableInt_IRQn           = -14,      /*!< 2 Non Maskable Interrupt                         */
  MemoryManagement_IRQn         = -12,      /*!< 4 Cortex-M3 Memory Management Interrupt          */
  BusFault_IRQn                 = -11,      /*!< 5 Cortex-M3 Bus Fault Interrupt                  */
  UsageFault_IRQn               = -10,      /*!< 6 Cortex-M3 Usage Fault Interrupt                */
  SVCall_IRQn                   = -5,       /*!< 11 Cortex-M3 SV Call Interrupt                   */
  DebugMonitor_IRQn             = -4,       /*!< 12 Cortex-M3 Debug Monitor Interrupt             */
  PendSV_IRQn                   = -2,       /*!< 14 Cortex-M3 Pend SV Interrupt                   */
  SysTick_IRQn                  = -1,       /*!< 15 Cortex-M3 System Tick Interrupt               */

/******  LPC17xx Specific Interrupt Numbers *******************************************************/
  WDT_IRQn                      = 0,        /*!< Watchdog Timer Interrupt                         */
  TIMER0_IRQn                   = 1,        /*!< Timer0 Interrupt                                 */
  TIMER1_IRQn                   = 2,        /*!< Timer1 Interrupt                                 */
  TIMER2_IRQn                   = 3,        /*!< Timer2 Interrupt                                 */
  TIMER3_IRQn                   = 4,        /*!< Timer3 Interrupt                                 */
  UART0_IRQn                    = 5,        /*!< UART0 Interrupt                                  */
  UART1_IRQn                    = 6,        /*!< UART1 Interrupt                                  */
  UART2_IRQn                    = 7,        /*!< UART2 Interrupt                                  */
  UART3_IRQn                    = 8,        /*!< UART3 Interrupt                                  */
  PWM1_IRQn                     = 9,        /*!< PWM1 Interrupt                                   */
  I2C0_IRQn                     = 10,       /*!< I2C0 Interrupt                                   */
  I2C1_IRQn                     = 11,       /*!< I2C1 Interrupt                                   */
  I2C2_IRQn                     = 12,       /*!< I2C2 Interrupt                                   */
  SPI_IRQn                      = 13,       /*!< SPI Interrupt                                    */
  SSP0_IRQn                     = 14,       /*!< SSP0 Interrupt                                   */
  SSP1_IRQn                     = 15,       /*!< SSP1 Interrupt                                   */
  PLL0_IRQn                     = 16,       /*!< PLL0 Lock (Main PLL) Interrupt                   */
  RTC_IRQn                      = 17,       /*!< Real Time Clock Interrupt                        */
  EINT0_IRQn                    = 18,       /*!< External Interrupt 0 Interrupt                   */
  EINT1_IRQn                    = 19,       /*!< External Interrupt 1 Interrupt                   */
  EINT2_IRQn                    = 20,       /*!< External Interrupt 2 Interrupt                   */
  EINT3_IRQn                    = 21,       /*!< External Interrupt 3 Interrupt                   */
  ADC_IRQn                      = 22,       /*!< A/D Converter Interrupt                          */
  BOD_IRQn                      = 23,       /*!< Brown-Out Detect Interrupt                       */
  USB_IRQn                      = 24,       /*!< USB Interrupt                                    */
  CAN_IRQn                      = 25,       /*!< CAN Interrupt                                    */
  DMA_IRQn                      = 26,       /*!< General Purpose DMA Interrupt                    */
  I2S_IRQn                      = 27,       /*!< I2S Interrupt                                    */
  ENET_IRQn                     = 28,       /*!< Ethernet Interrupt                               */
  RIT_IRQn                      = 29,       /*!< Repetitive Interrupt Timer Interrupt             */
  MCPWM_IRQn                    = 30,       /*!< Motor Control PWM Interrupt                      */
  QEI_IRQn                      = 31,       /*!< Quadrature Encoder Interface Interrupt           */
  PLL1_IRQn                     = 32,       /*!< PLL1 Lock (USB PLL) Interrupt                    */
} IRQn_Type;

Это значит,  что приоритет SysTick выше чем WDT, а приоритет WDT выше приоритета PLL_IRQ, или наоборот?
Могу ли я поменять приоритеты? НАпример сделать SysTick самым низшим? Или для этого в качестве часов лучше
использовать RIT ?
Или вот мне бы хотелось чтобы DMA имел по вохзможности наивысший приоритет, а UARTу наоборот, можно и пониже.
Что жля этого надо изменить, номера в стартапе?

Попутно еще вопрос, вот такой код:
[code]
void I2S_IRQHandler (void){
    LPC_GPIO2->FIOPIN |=0x02;  //      зажигаем светодиод
        if ( LPC_I2S->I2SSTATE & 0x01 )  {
            LPC_DAC->DACR = (LPC_I2S->I2SRXFIFO>>16);
       }
    LPC_GPIO2->FIOPIN &=~0x02;  // гасим светодиод
   return;
}

То есть махаю ножкой со светодиодом, осциллограф показывает что это (проврека условия и переписыание их одного регистра в другой) выполняется аж за 600нс. Я ожидал как-то намного меньше. Где тут собака зарыта?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 18 2011, 09:56
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Allregia @ Aug 18 2011, 12:17) *
Про SSP написано 50мбит/с в мастере и всего 8 в слейве - не очень понятно откуда такая разница? Сама логика (триггеры/гейты) ведь одна и та-же, и наверняка способна до 100мгц работать, почему слейв так ограничен? Это-же не программный опрос, все аппаратно делается!

Просто соблюдайте рекомендации. Всё уже много раз на форуме объяснялось. Ищите, если надо.

На SPI я стабильно работал с делителем 6. Хоть и рекомендуют 8. Но это опять же риск за мой счёт. С делителем 4 уже не работает. Это делитель внутри SPI блока.

С I2S ничего не могу подсказать, не работал.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 18 2011, 10:32
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(GetSmart @ Aug 18 2011, 11:56) *
С I2S ничего не могу подсказать, не работал.


А про NVIC и про скорость ?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 18 2011, 10:45
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Allregia @ Aug 17 2011, 01:42) *
Или я слепой, но ни в DS ни в UM не нашел четких указаний какие макс. частоты могут иметь клоки периферии?


так вроде в DS все есть
Раздел 11. Dynamic characteristics
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 18 2011, 13:00
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(toweroff @ Aug 18 2011, 12:45) *
так вроде в DS все есть
Раздел 11. Dynamic characteristics


С этим уже разобрались, а насчет остального ?
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 18 2011, 18:51
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



хотя, про тактирование тоже остались еще вопросы.
вот например АЦП - у него макс. тактовая 13мгц.
но можно поставить периферийную частоту 100/8 = 12.5 и потом не делить, а можно поставить 100/2=50 а потом еще поделить на 4 и получить тоже самое.
Есть какая-то разница в этом ?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 18 2011, 19:43
Сообщение #9


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Allregia @ Aug 18 2011, 23:51) *
Есть какая-то разница в этом ?

Возможно будет разница в потреблении чипа. Возможно не будет. Не проверял.
В остальном работать будет одинаково.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


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


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