This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM5728: 如何在DSP 端,使用SYSBIOS创建基于uart的硬件中断

Part Number: AM5728

我想要通过串口接收数据,使用UART_read()接收数据,则必须实时调用UART_read()才能收到数据,故想到使用Hwi_create()接口创建硬件中断,但是如何关联到串口的接收中断呢?

  • void hwiFunc(UArg arg)
    {
        unsigned char   rxData      = 0;
    
        //在中断服务程序中清中断
        //Hwi_clearInterrupt(7);
    
        /* Checking ths source of UART interrupt. */
        int32_t intId = UARTIntIdentityGet(SOC_UART1_BASE);
    
        Log_print1(Diags_ENTRY, "UARTIsr: %d", intId);
    
        switch (intId)
        {
            case UART_INTID_TX_THRES_REACH:
                Log_print0(Diags_ENTRY, "UART_INTID_TX_THRES_REACH");
                break;
    
            case UART_INTID_RX_THRES_REACH:
                rxData = UARTCharGetNonBlocking(SOC_UART1_BASE);
                //UARTCharPutNonBlocking(uartBaseAddr, rxByte);
    
                Log_print1(Diags_ENTRY, "Rx: %02x", rxData);
                break;
    
            case UART_INTID_RX_LINE_STAT_ERROR:
            case UART_INTID_CHAR_TIMEOUT:
                rxData = UARTCharGetNonBlocking(SOC_UART1_BASE);
                if(intId == UART_INTID_CHAR_TIMEOUT)
                    Log_print1(Diags_ENTRY, "UART_INTID_CHAR_TIMEOUT: %02x", rxData);
                else
                    Log_print1(Diags_ENTRY, "UART_INTID_RX_LINE_STAT_ERROR: %02x", rxData);
                break;
    
            default:
                break;
        }
    }
    
    void Hwi_Init(void)
    {
        Log_print0(Diags_ENTRY, "Hwi_Init");
    
        //创建中断
        Hwi_Handle hwi_uart1;         //句柄
        Hwi_Params hwi_params;        //传入参数
        Error_Block eb;               //错误块
    
        Error_init(&eb);              //错误块初始化,注意必须初始化,否则易进入System_abort
        Hwi_Params_init(&hwi_params); //初始化传入参数
        hwi_params.eventId = 43;
        hwi_params.enableInt = TRUE;
        //hwi_params.maskSetting = Hwi_MaskingOption_SELF;      // don't allow this interrupt to nest itself
        hwi_uart1 = Hwi_create(7, hwiFunc, &hwi_params, &eb); //注意此处id是中断等级编号,如中断5,则id为5
    
        if(hwi_uart1 == NULL)
        {
            System_abort("hwi_uart1 create failed");
        }
        
        Hwi_enableInterrupt(7);       //使能中断
    }
    我创建中断后,一直不能进入中断服务函数,串口这边的配置应该如何设置呢?是调用  PDK_INSTALL_PATH\packages\ti\csl\src\ip\uart\V1\uart.h 还是使用

    PDK_INSTALL_PATH\packages\ti\drv\uart\UART.h 的库函数配置串口?

  • 请查看一下寄存器,看中断标志位有没有置起来?中断使能位有没有使能?