[技术问题解答] 请问MAPS-K64在进行串口通信时如何调用中断?

[复制链接]
5607|46
 楼主| elephy 发表于 2015-11-25 21:16 | 显示全部楼层 |阅读模式
请问MAPS-K64在进行串口通信时如何调用中断? 我现在需要循环检测两个UART串口的的状态,只要其中一个收到数据,则不管另一个口的状态,直接接收该数据,并对其进行后续处理。在提出这个问题时,道友们说可以利用进入中断来解决这个问题,但是我不太清楚MAPS-K64的串口中断在什么地方,所以提出这样一个问题。
IversonCar 发表于 2015-11-25 21:17 | 显示全部楼层
不太明白楼主的意思,是串口发送和接收都要用中断模式吗
 楼主| elephy 发表于 2015-11-25 21:21 | 显示全部楼层
IversonCar 发表于 2015-11-25 21:17
不太明白楼主的意思,是串口发送和接收都要用中断模式吗

现在只需要接收的时候用中断模式,但是我不知道怎么才能进中断
FSL_TICS_ZJJ 发表于 2015-11-26 10:13 | 显示全部楼层
elephy 发表于 2015-11-25 21:21
现在只需要接收的时候用中断模式,但是我不知道怎么才能进中断

如果你使用UART_DRV_ReceiveDataBlocking这个函数的时候,里面就有使能了接收中断, 你可以仔细的看下UART_DRV_ReceiveDataBlocking这个函数:  UART_BWR_C2_RIE(base, 1U);这句话就是使能接收中断。
 楼主| elephy 发表于 2015-11-26 14:01 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-11-26 10:13
如果你使用UART_DRV_ReceiveDataBlocking这个函数的时候,里面就有使能了接收中断, 你可以仔细的看下UAR ...

所以您的意思是不用做任何修改,UART_DRV_ReceiveDataBlocking这个函数本身就是进中断接收数据的么?
我现在用板子上的CN7和CN12两个串口循环检测串口收数,如果一个串口收到数据,则跳出循环,如果说这个函数是进中断接收的话,正常情况下应该检测到某一个串口收到数据就会跳出循环的吧?但是我现在用串口助手调试的时候发现它并不能跳出来,而是死等另一个串口的数据,这会不会是和串口助手本身的设置有关?
 楼主| elephy 发表于 2015-11-26 14:17 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-11-26 10:13
如果你使用UART_DRV_ReceiveDataBlocking这个函数的时候,里面就有使能了接收中断, 你可以仔细的看下UAR ...

另外在fsl_uart_driver.c里的UART_DRV_ReceiveDataBlocking这里函数里我没有找到UART_BWR_C2_RIE(base, 1U); 这一句,请问这是在哪里?
Roderman_z 发表于 2015-11-26 16:32 | 显示全部楼层
elephy 发表于 2015-11-25 21:21
现在只需要接收的时候用中断模式,但是我不知道怎么才能进中断

只要接受到字符就马上进中断,在中断里把串口缓存区中的内容读出来
 楼主| elephy 发表于 2015-11-26 16:41 | 显示全部楼层
Roderman_z 发表于 2015-11-26 16:32
只要接受到字符就马上进中断,在中断里把串口缓存区中的内容读出来

嗯,道理我懂,就是不知道怎么操作,因为没有找到这个函数是怎么进入中断的
奥德赛 发表于 2015-11-27 09:19 | 显示全部楼层
elephy 发表于 2015-11-26 16:41
嗯,道理我懂,就是不知道怎么操作,因为没有找到这个函数是怎么进入中断的 ...

你要开启串口中断的功能,来了外部中断会自动进去的
 楼主| elephy 发表于 2015-11-27 10:12 | 显示全部楼层
奥德赛 发表于 2015-11-27 09:19
你要开启串口中断的功能,来了外部中断会自动进去的

我现在需要一个方法,比如在哪里看是不是开启了串口中断功能
FSL_TICS_ZJJ 发表于 2015-11-27 10:18 | 显示全部楼层
elephy 发表于 2015-11-26 14:17
另外在fsl_uart_driver.c里的UART_DRV_ReceiveDataBlocking这里函数里我没有找到UART_BWR_C2_RIE(base, 1 ...

MAPS 的KSDK里面的确没有,
现在在KSDK1.3.0里面的K64代码中,是有uart的中断的,我建议你参考那个代码。
KSDK1.3.0里面的fsl_uart_driver.c中
static uart_status_t UART_DRV_StartReceiveData(uint32_t instance,
                                               uint8_t * rxBuff,
                                               uint32_t rxSize)
{
    assert(instance < UART_INSTANCE_COUNT);

    uart_state_t * uartState = (uart_state_t *)g_uartStatePtr[instance];
    UART_Type * base = g_uartBase[instance];

    /* Check that we're not busy receiving data from a previous function call. */
    if ((uartState->isRxBusy) && (!uartState->rxCallback))
    {
        return kStatus_UART_RxBusy;
    }

    if (rxSize == 0U)
    {
        return kStatus_UART_NoDataToDeal;
    }

    /* Initialize the module driver state struct to indicate transfer in progress
     * and with the buffer and byte count data */
    uartState->rxBuff = rxBuff;
    uartState->rxSize = rxSize;
    uartState->isRxBusy = true;

    /* Enable the receive data overrun interrupt */
    UART_HAL_SetIntMode(base, kUartIntRxOverrun, true);

    /* Enable the receive data full interrupt */
    UART_BWR_C2_RIE(base, 1U);

    return kStatus_UART_Success;
}
FSL_TICS_ZJJ 发表于 2015-11-27 10:19 | 显示全部楼层
elephy 发表于 2015-11-26 14:17
另外在fsl_uart_driver.c里的UART_DRV_ReceiveDataBlocking这里函数里我没有找到UART_BWR_C2_RIE(base, 1 ...

如果你想用KSDK,那么我建议你参考KSDK1.3.0去做,MAPS的KSDK比较老了。
或者,你自己做一个不带KSDK的,那样中断操作起来就方便多了。
 楼主| elephy 发表于 2015-11-27 10:30 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-11-27 10:19
如果你想用KSDK,那么我建议你参考KSDK1.3.0去做,MAPS的KSDK比较老了。
或者,你自己做一个不带KSDK的, ...

请问这个1.3.0能给个下载地址么? 1.3.0的使用方法是不是和1.0.0一样,直接移植代码就可以了?
FSL_TICS_ZJJ 发表于 2015-11-27 10:38 | 显示全部楼层
elephy 发表于 2015-11-27 10:30
请问这个1.3.0能给个下载地址么? 1.3.0的使用方法是不是和1.0.0一样,直接移植代码就可以了? ...

www.freescale.com/ksdk
KSDK1.3是KSDK1.0的升级版,你可以在KSDK1.3的基础上,把MAPS的board.h文件拷贝过去,具体你对比下。
主要就是外围的不同,修改下就能用了。
 楼主| elephy 发表于 2015-11-27 10:49 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-11-27 10:38
www.freescale.com/ksdk
KSDK1.3是KSDK1.0的升级版,你可以在KSDK1.3的基础上,把MAPS的board.h文件拷贝 ...

里面的KSDK v1.3.0 Mainline releases
KSDK v1.3.0 Standalone releases          
WolfSSL for Kinetis SDK v1.3.0 with MQX RTOS releases and patches               
KSDK v1.3.0 Board support Patches       
这4个我都需要下载哪些?我只看到里面有K66K82的东西,没有看到K64的
FSL_TICS_ZJJ 发表于 2015-11-27 10:51 | 显示全部楼层
elephy 发表于 2015-11-27 10:49
里面的KSDK v1.3.0 Mainline releases
KSDK v1.3.0 Standalone releases          
WolfSSL for Kinetis SDK v ...

KSDK v1.3.0 Mainline releases
 楼主| elephy 发表于 2015-11-27 14:32 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-11-27 10:51
KSDK v1.3.0 Mainline releases

这个FRDM-K64和MAPS的外设差的有点多,实在不知道该修改什么了,折腾半天也用不了,要是还用原来1.0.0还有办法让它进中断么?
FSL_TICS_ZJJ 发表于 2015-11-27 15:26 | 显示全部楼层
elephy 发表于 2015-11-27 14:32
这个FRDM-K64和MAPS的外设差的有点多,实在不知道该修改什么了,折腾半天也用不了,要是还用原来1.0.0还 ...

你把原来的KSDK里面的接收代码改为KSDK1.3的结构试试。
比如UART_DRV_StartReceiveData代码改为11楼的代码,也就是使能中断的代码。
 楼主| elephy 发表于 2015-11-27 16:41 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-11-27 15:26
你把原来的KSDK里面的接收代码改为KSDK1.3的结构试试。
比如UART_DRV_StartReceiveData代码改为11楼的代 ...

还是不是很行,我要是想直接用中断要怎么用?
我在MK64F12.h里找到UART0-5的中断向量表了,要是想用fsl_interrupt_manager.h库加中断要怎么做?我看了英文的用户手册,但是不是很明白
奥德赛 发表于 2015-11-27 16:55 | 显示全部楼层
elephy 发表于 2015-11-27 16:41
还是不是很行,我要是想直接用中断要怎么用?
我在MK64F12.h里找到UART0-5的中断向量表了,要是想用fsl_i ...

这个飞思卡尔的中断例程看着很简单的,但是我用的也有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

64

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部