打印
[技术问题解答]

请问MAPS-K64在进行串口通信时如何调用中断?

[复制链接]
4762|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);这句话就是使能接收中断。

使用特权

评论回复
5
elephy|  楼主 | 2015-11-26 14:01 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-11-26 10:13
如果你使用UART_DRV_ReceiveDataBlocking这个函数的时候,里面就有使能了接收中断, 你可以仔细的看下UAR ...

所以您的意思是不用做任何修改,UART_DRV_ReceiveDataBlocking这个函数本身就是进中断接收数据的么?
我现在用板子上的CN7和CN12两个串口循环检测串口收数,如果一个串口收到数据,则跳出循环,如果说这个函数是进中断接收的话,正常情况下应该检测到某一个串口收到数据就会跳出循环的吧?但是我现在用串口助手调试的时候发现它并不能跳出来,而是死等另一个串口的数据,这会不会是和串口助手本身的设置有关?

使用特权

评论回复
6
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); 这一句,请问这是在哪里?

使用特权

评论回复
7
Roderman_z| | 2015-11-26 16:32 | 只看该作者
elephy 发表于 2015-11-25 21:21
现在只需要接收的时候用中断模式,但是我不知道怎么才能进中断

只要接受到字符就马上进中断,在中断里把串口缓存区中的内容读出来

使用特权

评论回复
8
elephy|  楼主 | 2015-11-26 16:41 | 只看该作者
Roderman_z 发表于 2015-11-26 16:32
只要接受到字符就马上进中断,在中断里把串口缓存区中的内容读出来

嗯,道理我懂,就是不知道怎么操作,因为没有找到这个函数是怎么进入中断的

使用特权

评论回复
9
奥德赛| | 2015-11-27 09:19 | 只看该作者
elephy 发表于 2015-11-26 16:41
嗯,道理我懂,就是不知道怎么操作,因为没有找到这个函数是怎么进入中断的 ...

你要开启串口中断的功能,来了外部中断会自动进去的

使用特权

评论回复
10
elephy|  楼主 | 2015-11-27 10:12 | 只看该作者
奥德赛 发表于 2015-11-27 09:19
你要开启串口中断的功能,来了外部中断会自动进去的

我现在需要一个方法,比如在哪里看是不是开启了串口中断功能

使用特权

评论回复
11
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;
}

使用特权

评论回复
12
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的,那样中断操作起来就方便多了。

使用特权

评论回复
13
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一样,直接移植代码就可以了?

使用特权

评论回复
14
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文件拷贝过去,具体你对比下。
主要就是外围的不同,修改下就能用了。

使用特权

评论回复
15
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的

使用特权

评论回复
16
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

使用特权

评论回复
17
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还有办法让它进中断么?

使用特权

评论回复
18
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楼的代码,也就是使能中断的代码。

使用特权

评论回复
19
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库加中断要怎么做?我看了英文的用户手册,但是不是很明白

使用特权

评论回复
20
奥德赛| | 2015-11-27 16:55 | 只看该作者
elephy 发表于 2015-11-27 16:41
还是不是很行,我要是想直接用中断要怎么用?
我在MK64F12.h里找到UART0-5的中断向量表了,要是想用fsl_i ...

这个飞思卡尔的中断例程看着很简单的,但是我用的也有问题

使用特权

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

本版积分规则

4

主题

64

帖子

1

粉丝