Signal manager

Ярослав Лещинский midniwalker at gmail.com
Fri Aug 19 22:00:02 UTC 2016


Looks the same...Maybe something wrong i made with task initialization? I
took from guide example:
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

#include <bsp.h>
#include "rtems.h"

extern rtems_task hello_world(rtems_task_argument argument);

rtems_task init_tasks(__attribute__((unused)) rtems_task_argument ignored)
{
rtems_id tid = 0;
rtems_task_create(
rtems_build_name('M', 'I', 'M', 'U'),
1,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_INTERRUPT_LEVEL(0),
RTEMS_FLOATING_POINT,
&tid);

rtems_task_start(tid, hello_world, 0);
rtems_task_delete(RTEMS_SELF);
}

#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER

#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_MAXIMUM_TASKS 2

#define CONFIGURE_INIT_TASK_NAME rtems_build_name('T', 'E', 'S', 'T')
#define CONFIGURE_INIT

#include <rtems/confdefs.h>


2016-08-19 17:15 GMT+03:00 <groups at chichak.ca>:

> 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)
>
> On 2016-August-19, at 07:52, Ярослав Лещинский <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 st
>> m32f4xx_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
>
> 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>:
>
>> Andrei, thanks!
>> 17 мая 2016 г. 8:31 пользователь <groups at chichak.ca> написал:
>>
>>
>>> On 2016-May-16, at 11:10, Ярослав Лещинский <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 st
>>> m32f4xx_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
>>> i*n 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
>
>
>
> _______________________________________________
> users mailing list
> users at rtems.org
> http://lists.rtems.org/mailman/listinfo/users
>



-- 

С уважением, Лещинский Ярослав.
+79814031224
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20160820/6cfff9eb/attachment-0002.html>


More information about the users mailing list