07.08.2012, 12:59
|
#21
|
Частый гость
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
Тк я вот как раз, сейчас, этим и занимаюсь) Но яж говорю- я не могу понять как задавать опред значения регистрам!Example я изучил, понял что зачем нужно, но как переделать в CMSIS???
Вот к примеру: регистр SYSCFG_EXTICR1 в нем уснатавливается порт для прерываний!Тк как в CMSIS задать порт?
Мне нужен не конкретный ответ, а как в общем случае все ищется в CMSIS?
|
|
|
|
07.08.2012, 13:09
|
#22
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
У Стаса были проблемы с клавой. Решил проверить на пупках ^C -› ^V.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
07.08.2012, 13:32
|
#23
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
sosedi, Вот пример оттуда :
Код:
|
void EXTILine0_Config(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable GPIOA clock */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
/* Enable SYSCFG clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* Configure PA0 pin as input floating */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Connect EXTI Line0 to PA0 pin */
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
/* Configure EXTI Line0 */
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/* Enable and set EXTI Line0 Interrupt to the lowest priority */
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
} |
До
Код:
|
/* Connect EXTI Line0 to PA0 pin */
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); |
Надеюсь все понятно ?
Далее лезем в STL stm32f4xx_syscfg.c находим определение SYSCFG_EXTILineConfig();
Код:
|
void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex)
{
uint32_t tmp = 0x00;
/* Check the parameters */
assert_param(IS_EXTI_PORT_SOURCE(EXTI_PortSourceGP IOx));
assert_param(IS_EXTI_PIN_SOURCE(EXTI_PinSourcex));
tmp = ((uint32_t)0x0F) ‹‹ (0x04 * (EXTI_PinSourcex & (uint8_t)0x03));
SYSCFG-›EXTICR[EXTI_PinSourcex ›› 0x02] &= ~tmp;
SYSCFG-›EXTICR[EXTI_PinSourcex ›› 0x02] |= (((uint32_t)EXTI_PortSourceGPIOx) ‹‹ (0x04 * (EXTI_PinSourcex & (uint8_t)0x03)));
} |
Лезем в хэдеры и ищем определения всей этой хрени , анализируем и переделываем ...
Код:
|
typedef struct
{
__IO uint32_t MEMRMP; /*!‹ SYSCFG memory remap register, Address offset: 0x00 */
__IO uint32_t PMC; /*!‹ SYSCFG peripheral mode configuration register, Address offset: 0x04 */
__IO uint32_t EXTICR[4]; /*!‹ SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */
uint32_t RESERVED[2]; /*!‹ Reserved, 0x18-0x1C */
__IO uint32_t CMPCR; /*!‹ SYSCFG Compensation cell control register, Address offset: 0x20 */
} SYSCFG_TypeDef; |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 07.08.2012 в 13:45.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
07.08.2012, 14:37
|
#24
|
Частый гость
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
Код:
|
typedef struct
{
__IO uint32_t MEMRMP; /*!‹ SYSCFG memory remap register, Address offset: 0x00 */
__IO uint32_t PMC; /*!‹ SYSCFG peripheral mode configuration register, Address offset: 0x04 */
__IO uint32_t EXTICR[4]; /*!‹ SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */
uint32_t RESERVED[2]; /*!‹ Reserved, 0x18-0x1C */
__IO uint32_t CMPCR; /*!‹ SYSCFG Compensation cell control register, Address offset: 0x20 */
} SYSCFG_TypeDef; |
[/QUOTE]
Спасибо большое за очень подробный ответ)
Подскажите я правильно Вас понял, т.е для того что бы задать SYSCFG_EXTICR1 регистр можно написать так:
Код:
|
SYSCFG-›EXTICR[1] = 0; |
тем самым я определю первые 4-ре ноги порта А для прерываний!
Последний раз редактировалось sosedi; 07.08.2012 в 14:40.
|
|
|
|
07.08.2012, 15:08
|
#25
|
Частый гость
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
А вот еще по поводу структур:
Цитата:
|
EXTI_GenerateSWInterrupt(EXTI_Line0);
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
|
Оно то понятно что тут идет стандартная настройка (выбор ноги,фронта т.д), но откуда берутся все эти переменные EXTI_Line = EXTI_Line0, EXTI_Mode = EXTI_Mode_Interrupt, EXTI_LineCmd = ENABLE. Где они объявлены?
|
|
|
|
07.08.2012, 15:08
|
#26
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
Сообщение от sosedi
|
тем самым я определю первые 4-ре ноги порта А для прерываний!
|
Угу . Правильно.
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
07.08.2012, 15:11
|
#27
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
Сообщение от sosedi
|
но откуда берутся все эти переменные
|
Смотрите хидеры .Тот же stm32f4xx_exti.h.
Код:
|
typedef struct
{
uint32_t EXTI_Line; /*!‹ Specifies the EXTI lines to be enabled or disabled.
This parameter can be any combination value of @ref EXTI_Lines */
EXTIMode_TypeDef EXTI_Mode; /*!‹ Specifies the mode for the EXTI lines.
This parameter can be a value of @ref EXTIMode_TypeDef */
EXTITrigger_TypeDef EXTI_Trigger; /*!‹ Specifies the trigger signal active edge for the EXTI lines.
This parameter can be a value of @ref EXTITrigger_TypeDef */
FunctionalState EXTI_LineCmd; /*!‹ Specifies the new state of the selected EXTI lines.
This parameter can be set either to ENABLE or DISABLE */
}EXTI_InitTypeDef;
...................................
#define EXTI_Line0 ((uint32_t)0x00001) /*!‹ External interrupt line 0 */
#define EXTI_Line1 ((uint32_t)0x00002) /*!‹ External interrupt line 1 */
#define EXTI_Line2 ((uint32_t)0x00004) /*!‹ External interrupt line 2 */
#define EXTI_Line3 ((uint32_t)0x00008) /*!‹ External interrupt line 3 */ |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 07.08.2012 в 15:16.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
07.08.2012, 15:15
|
#28
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
Вообщем смысл такой: в STL настройки модулей передаются через структуры .
Вы заполняете структуру , функции STL считывают ее и заполняют регистры модуля периферии.
Естественно можно исключить эту универсальную хрень и конфигурировать
модуль "вручную".
Тьфу ты ... Правильно не STL а SPL ...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 07.08.2012 в 15:21.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
07.08.2012, 15:58
|
#29
|
Частый гость
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
Блин, опять непонятки((Чет я туплю наверно. После EXTI мы должны настроить NVIC!!!Я весь даташит перерыл и ничего кроме приоритета прерываний про NVIC не нашел ((
чтож тогда здесь настраивается?
Код:
|
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 0x01;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); |
|
|
|
|
07.08.2012, 16:02
|
#30
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: stm32f4, asm с чего начать?
Прерывание от EXTI и его приоритет же ...
Цитата:
|
PM0214
Programming manual
4.3 Nested vectored interrupt controller (NVIC)
стр. 194
|
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
С чего начать?
|
ourlive |
Электроника - это просто |
179 |
17.04.2012 23:02 |
С чего начать?
|
nickdkn |
Электроника - это просто |
9 |
12.07.2011 20:13 |
С чего начать?
|
Митрофаныч |
Микроконтроллеры, АЦП, память и т.д |
17 |
03.10.2010 21:18 |
PICи - с чего начать?
|
Alexxx2005 |
Микроконтроллеры, АЦП, память и т.д |
11 |
27.05.2007 01:37 |
C чего начать?
|
melkij |
Микроконтроллеры, АЦП, память и т.д |
11 |
21.08.2006 13:39 |
Часовой пояс GMT +4, время: 17:46.
|
|