Other Parts Discussed in Thread: SYSCONFIG
Tool/software:
Hi guys i was trying to use GPIO ISR with xTaskResumeFromISR( TaskHandle_t xTaskToResume ) and i get again no errors from compiler but by program halts at Drivers_open();
#include <stdlib.h>
#include <kernel/dpl/DebugP.h>
#include "ti_drivers_config.h"
#include "ti_board_config.h"
#include "FreeRTOS.h"
#include "task.h"
#include "ti_drivers_open_close.h"
#include "ti_board_open_close.h"
#include <stdio.h>
#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE))
void buttonisr(void *args);
TaskHandle_t gMainTask=NULL;
TaskHandle_t gTask1=NULL;
static HwiP_Object buttonobj;
uint32_t gpioBaseAddr,cnt=0;
void maintask(void *args)
{
while(1)
{ vTaskSuspend(NULL);
DebugP_log("button pressed\r\n");
vTaskResume(gTask1);
}
}
void button_innit(){
Drivers_open();
DebugP_log("Start 14 !!\r\n");
Board_driversOpen();
HwiP_Params button;
int32_t pinNum,intrNum;
uint32_t stat;
gpioBaseAddr = (uint32_t) AddrTranslateP_getLocalAddr(BUTTON_BASE_ADDR);
pinNum = BUTTON_PIN;
intrNum = BUTTON_INTR_NUM;
DebugP_log("Start 2 !!\r\n");
HwiP_Params_init(&button);
button.intNum = intrNum;
button.callback = &buttonisr;
button.args = (void*) pinNum;
button.isPulse = TRUE;
stat = HwiP_construct(&buttonobj, &button);
DebugP_assert(stat == SystemP_SUCCESS );
DebugP_log("Register pin interrupt parameters done !!\r\n");
}
void task1(void *p)
{
while(1)
{
DebugP_log("button Task running!! %d\r\n",cnt);
}
}
void buttonisr(void *args)
{
uint32_t pinNum = (uint32_t) args;
uint32_t bankNum = GPIO_GET_BANK_INDEX(pinNum);
uint32_t intrStatus, pinMask = GPIO_GET_BANK_BIT_MASK(pinNum);
int32_t stat;
intrStatus = GPIO_getBankIntrStatus(gpioBaseAddr, bankNum);
GPIO_clearBankIntrStatus(gpioBaseAddr, bankNum, intrStatus);
if(intrStatus & pinMask)
{
cnt = GPIO_pinRead(gpioBaseAddr, pinNum);
BaseType_t check;
check = xTaskResumeFromISR(gMainTask);
portYIELD_FROM_ISR(check); // from portmacro.h
}
}
int main(void)
{
DebugP_log("Start 11 !!\r\n");
System_init();
DebugP_log("Start 12 !!\r\n");
Board_init();
DebugP_log("Start 13 !!\r\n");
button_innit();
xTaskCreate( maintask,"task0",MAIN_TASK_SIZE,NULL,tskIDLE_PRIORITY,&gMainTask );
xTaskCreate( task1,"task1",MAIN_TASK_SIZE,NULL,configMAX_PRIORITIES-1,&gTask1 );
vTaskStartScheduler();
DebugP_assertNoLog(0);
Board_driversClose();
Drivers_close();
return 0;
}
my program output : Start 11 !!
Start 12 !!
Start 13 !!
