打印

这里的UART中断要怎么使用呢?

[复制链接]
1969|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Larkinn|  楼主 | 2015-8-17 17:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本人初学CYBLE,求大神指导
这里的UART中断要怎么使用呢?
是指外面的MCU串口发给蓝牙芯片的UART中断吗?还是蓝牙天线接收数据后的中断?
函数在BLE_HAL_INT.C源文件里面

/*******************************************************************************
* Function Name: CyBLE_Uart_Interrupt
********************************************************************************
*
* Summary:
*  Handles the Interrupt Service Routine for the UART.
*
* Parameters:
*  None
*
* Return:
*  None
*
*******************************************************************************/
CY_ISR(CyBLE_Uart_Interrupt)
{
    uint8  uartTxStatus = CyBLE_INTR_TX_SUCCESS;
    uint32 srcInterrupt = 0u;

    uint8 length = 0u;
    uint8 srcCount = 0u;
    uint8 uartRxStatus = CyBLE_INTR_RX_SUCCESS;
    uint8 receivedData[BLE_HAL_Uart_FIFO_SIZE] = {0u};

    /* Evaluate RX interrupt event */
    srcInterrupt = BLE_HAL_Uart_GetRxInterruptSourceMasked();

    if(0u != (srcInterrupt & BLE_HAL_Uart_INTR_RX_NOT_EMPTY))
    {
        if(0u != (srcInterrupt & BLE_HAL_Uart_INTR_RX_PARITY_ERROR))
        {
            uartRxStatus |= CyBLE_INTR_RX_PARITY_ERROR;
        }
        if(0u != (srcInterrupt & BLE_HAL_Uart_INTR_RX_FRAME_ERROR))
        {
            uartRxStatus |= CyBLE_INTR_RX_FRAME_ERROR;
        }
        if(0u != (srcInterrupt & BLE_HAL_Uart_INTR_RX_OVERFLOW))
        {
            uartRxStatus |= CyBLE_INTR_RX_OVERFLOW;
        }
        if(uartRxStatus == CyBLE_INTR_RX_SUCCESS)
        {
            length = (uint8)BLE_HAL_Uart_SpiUartGetRxBufferSize();
            for(srcCount = 0u; srcCount < length; srcCount++)
            {
                receivedData[srcCount] = (uint8)BLE_HAL_Uart_SpiUartReadRxData();
            }
        }
        else
        {
            BLE_HAL_Uart_SpiUartClearRxBuffer();
        }
        for(uartTxStatus = 0u; uartTxStatus < length; uartTxStatus++)
        {
            CyBLE_pf_handle_uart_rx_data(receivedData[uartTxStatus]);
        }
        BLE_HAL_Uart_ClearRxInterruptSource(srcInterrupt);
    }
    else
    {
        /* No RX interrupt. Do nothing. */
    }

    /* Evaluate TX interrupt event in sequence */
    srcInterrupt = BLE_HAL_Uart_GetTxInterruptSourceMasked();

    /* Stack manager TX uart complete */
    if(0u != (srcInterrupt & BLE_HAL_Uart_INTR_TX_UART_DONE))
    {
        if(0u != (srcInterrupt & BLE_HAL_Uart_INTR_TX_OVERFLOW))
        {
            /*Stack manager TX uart error */
            uartTxStatus |= CyBLE_INTR_TX_OVERFLOW;
        }
        CyBLE_pf_handle_uart_tx_complt();
        BLE_HAL_Uart_ClearTxInterruptSource(srcInterrupt);
    }
    else
    {
        /* No TX interrupt. Do nothing. */
    }
}
沙发
上山砍老虎| | 2015-8-18 08:38 | 只看该作者
根据这个程序看,应该是你的串口收到数据的中断吧

使用特权

评论回复
板凳
关小波522| | 2015-8-18 08:39 | 只看该作者
建议楼主好好看下你的原理图,再看看你的程序,分析下

使用特权

评论回复
地板
Larkinn|  楼主 | 2015-8-18 09:13 | 只看该作者
关小波522 发表于 2015-8-18 08:39
建议楼主好好看下你的原理图,再看看你的程序,分析下

嗯嗯,我想用蓝牙的Broadcaster模式,只广播血压值到手机APP端,不知道BLE是怎么接收从单片机串口发来的数据的,上面贴的是Creator 自动生成的代码,不知道是不是用这个中断函数。

使用特权

评论回复
5
Larkinn|  楼主 | 2015-8-18 09:21 | 只看该作者
关小波522 发表于 2015-8-18 08:39
建议楼主好好看下你的原理图,再看看你的程序,分析下

这两个中断函数如图分别是怎么使用的呢?求指教,谢谢~

63.jpg (334.77 KB )

63.jpg

12.jpg (298.09 KB )

12.jpg

36.jpg (246.65 KB )

36.jpg

使用特权

评论回复
6
leijixiaomile| | 2015-8-18 13:52 | 只看该作者
楼主,蓝牙广播血压信号,为何要用到串口中断呢?  直接在蓝牙的广播数据中添加血压信号就好了。

使用特权

评论回复
7
gll123| | 2015-8-18 14:10 | 只看该作者
:handshake赞楼上

使用特权

评论回复
8
Larkinn|  楼主 | 2015-8-18 16:16 | 只看该作者
leijixiaomile 发表于 2015-8-18 13:52
楼主,蓝牙广播血压信号,为何要用到串口中断呢?  直接在蓝牙的广播数据中添加血压信号就好了。 ...

我是血压计主控IC 通过串口把血压数据发给蓝牙的,

使用特权

评论回复
9
Larkinn|  楼主 | 2015-9-7 22:53 | 只看该作者
上山砍老虎 发表于 2015-8-18 08:38
根据这个程序看,应该是你的串口收到数据的中断吧

是的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

23

帖子

0

粉丝