发新帖我要提问
123
返回列表
打印
[技术问题解答]

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

[复制链接]
楼主: elephy
手机看帖
扫描二维码
随时随地手机跟帖
41
elephy|  楼主 | 2015-12-4 14:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
FSL_TICS_ZJJ 发表于 2015-12-4 10:49
不会无限循环的,是因为你发送的时候,也进入中断了,这个中断向量表是发送与接收统一的中断。
如果你要 ...

可是我现在在接收数据前Print the initial banner的时候那个SendDataBlocking就会卡住发不出来东西,暂停的时候发现一直在那个中断里循环

使用特权

评论回复
42
elephy|  楼主 | 2015-12-4 14:18 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-12-4 10:50
这句代码就是判断是否接收到数据,接收到数据,把数据取出来。
你可以配合参考手册中的寄存器看下就知道 ...

这个我懂了,看了眼接到数的时候D寄存器里就会有显示,但是把这个数赋值给C又有什么用呢?
而且我在串口初始化之后加上了
UART0_C2|=UART_C2_RIE_MASK;
UART4_C2|=UART_C2_RIE_MASK;
UART5_C2|=UART_C2_RIE_MASK;
在主函数前面也加上了三个串口的中断服务函数:
/*UART0*/
static volatile unsigned char c;
void UART0_RX_TX_IRQHandler(void)
{
  //  UART_DRV_IRQHandler(0);
  if (UART0_S1&UART_S1_RDRF_MASK)
  {
    c = UART0_D;

  }
}
/*UART4*/
static volatile unsigned char c4;
void UART4_RX_TX_IRQHandler(void)
{
  //  UART_DRV_IRQHandler(0);
  if (UART4_S1&UART_S1_RDRF_MASK)
  {
    c4 = UART4_D;

  }
}
/*UART5*/
static volatile unsigned char c5;
void UART5_RX_TX_IRQHandler(void)
{
  //  UART_DRV_IRQHandler(0);
  if (UART5_S1&UART_S1_RDRF_MASK)
  {
    c5 = UART5_D;

  }
}
然后从串口4和5手动发数据,从串口0,也就是USB那根线连在电脑上的串口助手调试,仍然不能做到预期效果,即做不到某个串口收到数据后在屏幕上显示。
请问我以上贴的修改的代码哪里出问题了么?而且我发现D寄存器明明收到数据,但是receiveBuff里却没有东西的情况,请问该怎么解决?

使用特权

评论回复
43
elephy|  楼主 | 2015-12-8 12:59 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-12-4 10:49
不会无限循环的,是因为你发送的时候,也进入中断了,这个中断向量表是发送与接收统一的中断。
如果你要 ...

请问这个问题能不能再帮忙解决一下?

使用特权

评论回复
44
elephy|  楼主 | 2015-12-10 14:40 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-12-4 10:49
不会无限循环的,是因为你发送的时候,也进入中断了,这个中断向量表是发送与接收统一的中断。
如果你要 ...

您好,请问这个问题还有没有什么办法能解决?

使用特权

评论回复
45
追逐浪花| | 2015-12-12 17:24 | 只看该作者
你只需要设置接收中断就可以了,中断来了就直接读串口的数据就可以了

使用特权

评论回复
46
elephy|  楼主 | 2015-12-15 13:01 | 只看该作者
追逐浪花 发表于 2015-12-12 17:24
你只需要设置接收中断就可以了,中断来了就直接读串口的数据就可以了

这个我懂,可是不知道程序该怎么写

使用特权

评论回复
47
追逐浪花| | 2015-12-18 20:34 | 只看该作者
elephy 发表于 2015-12-15 13:01
这个我懂,可是不知道程序该怎么写

得初始化串口,然后初始化串口中断

使用特权

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

本版积分规则