Ярлыки

_GetPixelIndex (1) _SetPixelIndex (1) 3-phase (1) 800x480 (1) АЦП (1) генератор (1) синхронный усилитель (2) структура (1) учебный курс (1) шаговый двигатель (1) ШИМ (2) accert (1) AD7608 (1) AD8429 (1) ADC (5) amplifer (1) arccos (1) arcsin (1) arctang (2) arctg (3) ARM (2) arm_sqrt_q15 (2) assembler (6) ASSERT (1) atan (2) bit (1) Bitband (1) boot (3) bootlloader (1) BUTTON (1) C (5) C# (1) CAN (2) CC2530 (5) CMSIS (4) command (1) Cordic (1) Core746I (1) CubeMX (4) DBGMCU (2) debug (2) debug.ini (1) delegate (1) Digital Potentiometers (1) DigitalPOT (1) Discovery (1) DMA (9) DMA2D (1) DSP (1) DSP library (1) DWT (1) EFM32 (5) EmWin (9) EXTI (1) FATFS (1) FMC (2) FreeRTOS (2) gl868-dual cmux (1) GPIO (4) GUI (2) GUIBuilder (1) GUIDRV_CompactColor_16 (1) HAL (3) HappyGecko (1) Hard Fault (2) heap (1) I2C (1) ID (1) ILI9320 (1) ILI9325 (1) Initialisation (1) InitLTDC (1) Instrumentithion (1) Interrupt (4) ITR (1) JTAG (1) Keil (5) LCDConf (2) lock-in (1) LTCD (1) LTDC (3) main (1) memory (1) MINI_STM32 Revision 01 (1) nBoot0 (1) NVIC (1) OnePulse (2) OSAL (4) pack (1) phase (1) printf (3) Pulse (1) PWM (12) RCC (2) RCR (1) Register (1) RESET (2) RS232 (3) RSS (1) RTC (3) RTOS-RTX (1) RTT (1) RTX-RTOS (1) SDCard (1) SDRAM (6) Segger (2) SPI (3) sqrt (3) SSD1298 (1) SSD1963 (1) Standart Peripherial Library (3) STANDBAY (1) startup (1) STemWin (8) stepper motor (1) STlink (2) STM32 (17) STM32429ZI (1) STM32Cube (1) STM32DBG.IN (1) STM32F (28) STM32F0 (4) STM32F1 (13) STM32F4 (10) STM32F4 Discovery (1) STM32F407ZG (1) STM32F429 (2) STM32F746 (1) STOP (1) string (1) struct (1) SWD (1) SWD JTAG (1) Synhronization (1) system_stm32f4xx.c (1) SystemInit (1) SysTick (1) task (4) telit (1) TIM (27) typedef (1) UART (1) USART (9) viewer (2) WM_PAINT (1) Z-stack (5) ZigBee (5)

среда, 14 января 2015 г.

STM32F103 External interrupt/event controller

External interrupt/event controller block diagram

Контроллер имеет 18 линий прерывания/событий, из них 16 линий можно подключить к линиям ввода-вывода. Генерирование прерываний/событий возможно по нарастающему и спадающему фронту входного сигнала, так же возможно принудительно (программно) сформировать прерывания/событие) путем записи соответствующего бита регистра Software interrupt event register (EXTI_SWIER):


Подключение GPIO к 16 линиям прерывания осуществляется следующим образом


The four other EXTI lines are connected as follows:
● EXTI line 16 is connected to the PVD output
● EXTI line 17 is connected to the RTC Alarm event
● EXTI line 18 is connected to the USB Wakeup event
● EXTI line 19 is connected to the Ethernet Wakeup event (available only in connectivity
line devices)

В таблице векторов прерываний следующее распределение векторов:
  • EXTI0 – индивидуальный для линии 0
  • EXTI1 – индивидуальный для линии 1
  • EXTI2 – индивидуальный для линии 2
  • EXTI3 – индивидуальный для линии 3
  • EXTI4 – индивидуальный для линии 4
  • EXTI5-9 – общий для линий с 5 по 9
  • EXTI10-15 – общий для линий с 10 по 15

To improve software efficiency, the CMSIS simplifies the NVIC register presentation. In the CMSIS: • The Set-enable, Clear-enable, Set-pending, Clear-pending and Active Bit registers map to arrays of 32-bit integers, so that: – The array ISER[0] to ISER[2] corresponds to the registers ISER0-ISER2 – The array ICER[0] to ICER[2] corresponds to the registers ICER0-ICER2 – The array ISPR[0] to ISPR[2] corresponds to the registers ISPR0-ISPR2 – The array ICPR[0] to ICPR[2] corresponds to the registers ICPR0-ICPR2 – The array IABR[0] to IABR[2] corresponds to the registers IABR0-IABR2. • The 8-bit fields of the Interrupt Priority Registers map to an array of 8-bit integers, so that the array IP[0] to IP[67] corresponds to the registers IPR0-IPR67, and the array entry IP[n] holds the interrupt priority for interrupt n. The CMSIS provides thread-safe code that gives atomic access to the Interrupt Priority Registers. For more information see the description of the NVIC_SetPriority function in NVIC programming hints in Table 41 shows how the interrupts, or IRQ numbers, map onto the interrupt registers and corresponding CMSIS variables that have one bit per interrupt.


  • ISER — Interrupt Set Enable Register. Запись бита в нужную позицию включает прерывание.
  • ICER — Interrupt Clr Enable Register. Запись сюда наоборот выключает прерывание.
Запись 1 в биты этих регистров запрещает/разрешает прерывания. Запись 0 не делает ничего, а чтение возвращает текущее состояние разрешено/запрещено
 
  • ISPR — Interrupt Set Pending Register. Поставить прерывание в ожидание.
  • IСPR — Interrupt Clr Pending Register. Сбросить прерывание с ожидания.
Запись 1 в биты этих регистров ставит/снимает прерывания в очередь на исполнение. Запись 0 не делает ничего, а чтение возвращает текущее состояние прерывания. Ждет он обработки или уже нет. Т.е. если в этом регистре где то стоит бит 1, значит это прерывание еще не вызывалось.
  • IABR — Interrupt active bit registers. Регистр показывающий активно ли в данный момент прерывание. Автоматически ставится когда мы попадаем в обработчик и автоматом же снимается когда мы уходим из него. Этот регистр можно только читать.
External Interrupts
                DCD     WWDG_IRQHandler         ; Window Watchdog      Номер 0
                DCD     PVD_IRQHandler          ; PVD through EXTI Line detect  Номер 1
                DCD     TAMPER_IRQHandler       ; Tamper     Номер 2
                DCD     RTC_IRQHandler          ; RTC           Номер 3

For STM32F2 

 ; External Interrupts
                DCD     WWDG_IRQHandler          ; Window Watchdog
                DCD     PVD_IRQHandler           ; PVD through EXTI Line detect
                DCD     TAMPER_IRQHandler        ; Tamper
                DCD     RTC_IRQHandler           ; RTC
                DCD     FLASH_IRQHandler         ; Flash
                DCD     RCC_IRQHandler            ; RCC
                DCD     EXTI0_IRQHandler          ; EXTI Line 0
                DCD     EXTI1_IRQHandler          ; EXTI Line 1
                DCD     EXTI2_IRQHandler          ; EXTI Line 2
                DCD     EXTI3_IRQHandler          ; EXTI Line 3
                DCD     EXTI4_IRQHandler          ; EXTI Line 4
                DCD     DMAChannel1_IRQHandler    ; DMA Channel 1
                DCD     DMAChannel2_IRQHandler    ; DMA Channel 2
                DCD     DMAChannel3_IRQHandler    ; DMA Channel 3
                DCD     DMAChannel4_IRQHandler    ; DMA Channel 4
                DCD     DMAChannel5_IRQHandler    ; DMA Channel 5
                DCD     DMAChannel6_IRQHandler    ; DMA Channel 6
                DCD     DMAChannel7_IRQHandler    ; DMA Channel 7
                DCD     ADC_IRQHandler            ; ADC
                DCD     USB_HP_CAN_TX_IRQHandler  ; USB High Priority or CAN TX
                DCD     USB_LP_CAN_RX0_IRQHandler ; USB Low  Priority or CAN RX0
                DCD     CAN_RX1_IRQHandler        ; CAN RX1
                DCD     CAN_SCE_IRQHandler        ; CAN SCE
                DCD     EXTI9_5_IRQHandler        ; EXTI Line 9..5
                DCD     TIM1_BRK_IRQHandler       ; TIM1 Break
                DCD     TIM1_UP_IRQHandler        ; TIM1 Update
                DCD     TIM1_TRG_COM_IRQHandler   ; TIM1 Trigger and Commutation
                DCD     TIM1_CC_IRQHandler        ; TIM1 Capture Compare
                DCD     TIM2_IRQHandler           ; TIM2
                DCD     TIM3_IRQHandler           ; TIM3
                DCD     TIM4_IRQHandler           ; TIM4
                DCD     I2C1_EV_IRQHandler        ; I2C1 Event
                DCD     I2C1_ER_IRQHandler        ; I2C1 Error
                DCD     I2C2_EV_IRQHandler        ; I2C2 Event
                DCD     I2C2_ER_IRQHandler        ; I2C2 Error
                DCD     SPI1_IRQHandler           ; SPI1
                DCD     SPI2_IRQHandler           ; SPI2
                DCD     USART1_IRQHandler         ; USART1
                DCD     USART2_IRQHandler         ; USART2
                DCD     USART3_IRQHandler         ; USART3
                DCD     EXTI15_10_IRQHandler      ; EXTI Line 15..10
                DCD     RTCAlarm_IRQHandler       ; RTC Alarm through EXTI Line
                DCD     USBWakeUp_IRQHandler      ; USB Wakeup from suspend

void NVIC_SetPriorityGrouping(uint32_t priority_grouping) // Задать группы/подгруппы приоритетов
void NVIC_EnableIRQ(IRQn_t IRQn)     // Включить IRQn
void NVIC_DisableIRQ(IRQn_t IRQn)    // Выключить IRQn 
uint32_t NVIC_GetPendingIRQ (IRQn_t IRQn)    // Вернуть true (точнее IRQ-Number) если  IRQn в ожидании
void NVIC_SetPendingIRQ (IRQn_t IRQn)    // Поставить IRQn в ожидание 
void NVIC_ClearPendingIRQ (IRQn_tIRQn)    // Выкинуть из очереди на ожидание IRQn 
uint32_t NVIC_GetActive (IRQn_t IRQn)    // Функция "Бля, где это я?" Возвращает номер текущего активного прерывания если такое имеется 
void NVIC_SetPriority (IRQn_t IRQn, uint32_t priority)  // Задать приоритет IRQn
uint32_t NVIC_GetPriority (IRQn_t IRQn)    // Считать приоритет IRQn
void NVIC_SystemReset (void)     // Reset the system

// Разрешаем прерывания в периферии для выводов 1 и 2. 
EXTI->IMR |=(EXTI_IMR_MR1 | EXTI_IMR_MR2);

Регистры настроек

EXTI_IMR – разрешение прерываний на конкретной линии
EXTI_EMR – разрешение событий на конкретной линии
EXTI_RTSR – установить бит для вызова прерывания по нарастающему фронту.
EXTI_FTSR– установить бит для вызова прерывания спаду импульса.
EXTI_SWIER - принудительный (программный) вызов прерывания от конкретной линии
EXTI_PR – регистр флагов. Устанавливаются биты при вызове прерывания от конкретного вывода

Для начала работы с модулем EXTI необходимо выполнить минимальный набор настроек, соблюдая следующую последовательность: 

1 Разрешить внешнее прерывание на определенной линии 
2 Установить вызов прерывания по нарастающему фронту или по спаду 
3 Разрешить прерывания EXTI 

Комментариев нет:

Отправить комментарий