Signal manager

groups at chichak.ca groups at chichak.ca
Fri Aug 19 14:15:56 UTC 2016


Strangely, I got my first EXTI interrupt working two days ago.

Mine was on pin PB14 and goes low when active. Cube generated a bunch of code:

first, a file called mxconstants.h with:
#define SOL2ST_Pin GPIO_PIN_14
#define SOL2ST_GPIO_Port GPIOB

and in gpio.c:
  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = SOL2ST_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(SOL2ST_GPIO_Port, &GPIO_InitStruct);

in stm32f4xx_it.c:
/**
* @brief This function handles EXTI line[15:10] interrupts.
*/
void EXTI15_10_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI15_10_IRQn 0 */

  /* USER CODE END EXTI15_10_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
  /* USER CODE BEGIN EXTI15_10_IRQn 1 */

  /* USER CODE END EXTI15_10_IRQn 1 */
}




For my code, I hook it using:

	status = rtems_interrupt_handler_install(EXTI15_10_IRQn, "EXTI", RTEMS_INTERRUPT_UNIQUE,
			(rtems_interrupt_handler) EXTI15_10_IRQHandler, NULL);
	if (status != RTEMS_SUCCESSFUL) {
		printk(“EXTI interrupt install bombed with %d\n”, status);
	}


And catch the interrupt using:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
 	if (GPIO_Pin == SOL2ST_Pin) {
	}
}


I hope this helps.

Andrei from The Great White North
(embedded.fm/blog <http://embedded.fm/blog>)

> On 2016-August-19, at 07:52, Ярослав Лещинский <midniwalker at gmail.com <mailto:midniwalker at gmail.com>> wrote:
> 
> Hi, everyone!
> 
> My battle with stm32 interrupts continues. Three month ago Andrei from The Great White North gave me some code advise:
> 
> In my code I use interrupts for DMA with ADCs, and CAN using the HAL interrupt handler callback structure. 
> In this case, DMA2_Stream2_IRQHandler calls HAL_DMA_IRQHandler in stm32f4xx_hal_dma.c which figures what caused the interrupt and calls the appropriate callback.
> In my ADC code I use this:
> 	rtems_status_code status;
> 	const char ADC1handlerName[] = "AD1r";
> 	status = rtems_interrupt_handler_install((rtems_vector_number) DMA2_Stream2_IRQn,
> 			ADC2handlerName, RTEMS_INTERRUPT_UNIQUE,
> 			(rtems_interrupt_handler) DMA2_Stream2_IRQHandler, NULL);
> 	if (status != RTEMS_SUCCESSFUL) {
> 		printk("interrupt handler install 2 failed with %d\n", status);
> 	}
> 
> Later, I have the interrupt callbacks:
> void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
> 	rtems_status_code status;
> 	status = rtems_event_send(ADCTaskId, RTEMS_EVENT_0);
> 	if (status != RTEMS_SUCCESSFUL) {
> 		printk("complete callback failed with %d", status);
> 	}
> }
> void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc) {
> 	rtems_status_code status;
> 	status = rtems_event_send(ADCTaskId, RTEMS_EVENT_1);
> 	if (status != RTEMS_SUCCESSFUL) {
> 		printk("half complete callback failed with %d", status);
> 	}
> }
> 
> 
> i was trying the same but only for EXTI driver and no result. I have such code:
> http://pastebin.com/BZBNPRbg <http://pastebin.com/BZBNPRbg>
> 
> After flashing, i received in console string "53", when i pushed the button - all stopped, only reset can brought him back to life.
> 
> In C user guide i didn't find any references to  rtems_interrupt_handler_install, some info was about rtems_interrupt_catch, but when i try to use this, i received "undefined reference". 
> 
> Maybe, someone can help me with that problem?
> 
> Thanks.
> 
> P.S. Sorry for my english.
> 
> 
> 2016-05-17 8:40 GMT+03:00 Ярослав Лещинский <midniwalker at gmail.com <mailto:midniwalker at gmail.com>>:
> Andrei, thanks!
> 
> 17 мая 2016 г. 8:31 пользователь <groups at chichak.ca <mailto:groups at chichak.ca>> написал:
> 
> 
>> On 2016-May-16, at 11:10, Ярослав Лещинский <midniwalker at gmail.com <mailto:midniwalker at gmail.com>> wrote:
>> 
>> Hello. I'm try to use rtems with my stm board(stm32f4xx). And for now i have one problem: it's about ISR. The thing is, i have my own drivers, which uses isr(exti driver, uart and etc). I read rtems c-user manual properly,  but still can't understand clearly, how i can bring control to rtems signal manager via ASR. I'll be appreciated, if someone can give some advise.
>> 
>> Yaroslavl.
> 
> In my code I use interrupts for DMA with ADCs, and CAN using the HAL interrupt handler callback structure. 
> 
> In this case, DMA2_Stream2_IRQHandler calls HAL_DMA_IRQHandler in stm32f4xx_hal_dma.c which figures what caused the interrupt and calls the appropriate callback.
> 
> In my ADC code I use this:
> 
> 	rtems_status_code status;
> 	const char ADC1handlerName[] = "AD1r";
> 	status = rtems_interrupt_handler_install((rtems_vector_number) DMA2_Stream2_IRQn,
> 			ADC2handlerName, RTEMS_INTERRUPT_UNIQUE,
> 			(rtems_interrupt_handler) DMA2_Stream2_IRQHandler, NULL);
> 	if (status != RTEMS_SUCCESSFUL) {
> 		printk("interrupt handler install 2 failed with %d\n", status);
> 	}
> 
> 
> Later, I have the interrupt callbacks:
> 
> void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
> 
> 	rtems_status_code status;
> 	status = rtems_event_send(ADCTaskId, RTEMS_EVENT_0);
> 	if (status != RTEMS_SUCCESSFUL) {
> 		printk("complete callback failed with %d", status);
> 	}
> }
> 
> void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc) {
> 
> 	rtems_status_code status;
> 	status = rtems_event_send(ADCTaskId, RTEMS_EVENT_1);
> 	if (status != RTEMS_SUCCESSFUL) {
> 		printk("half complete callback failed with %d", status);
> 	}
> }
> 
> 
> In my CAN code I use:
> 
> 	rtems_status_code status;
> 
> 	status = rtems_interrupt_handler_install(CAN1_RX0_IRQn, "CANR", RTEMS_INTERRUPT_UNIQUE,
> 			(rtems_interrupt_handler) CAN1_RX0_IRQHandler, NULL);
> 	if (status != RTEMS_SUCCESSFUL) {
> 		printk("Pressure task interrupt install bombed with %d\n", status);
> 	}
> 
> and use the two call back functions HAL_CAN_RxCpltCallback and HAL_CAN_ErrorCallback in the same way as the ADC callbacks.
> 
> The symbol for external interrupt looks like EXTI0_IRQn and the UART would be like USART2_IRQn.
> 
> 
> Andrei from The Great White North.
> 
> 
> 
> 
> 
> 
> 
> -- 
> С уважением, Лещинский Ярослав.
> 
> +79814031224

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20160819/ef96e105/attachment-0002.html>


More information about the users mailing list