串口中断&定时器中断

想知道如何配置串口中断,在哪里去编写串口中断函数?

定时器也是,如何配置,在哪编写定时器中断?

  • 串口驱动程序已经把中断程序写好了,用户不需要写了,可以根据手册使用发送接收函数就可以了。如果感觉这个驱动的函数的策略不符合自己的要求,可以自己重新写驱动部分,

    在generate/sc_drivers/r_scifa/src/lld函数的基础上写自己的驱动程序就可以了,中断函数指针的设定可以使用R_SCIFA_SetupInterrupts来设置

    OSTM定时器的中断可以在配置器里设置

  • 感谢您的回复。
    我了解到可以通过
    result = write(scifa_handle, data_out, sizeof(data_out));

    result = read(scifa_handle, data_in, sizeof(data_in));
    来发送和接收数据,但是read函数好像是阻塞的,影响到了我的程序逻辑。
    所以想说看看有没有中断,让他接收到信息之后调用中断函数提醒我。

    刚才去翻看了总数据手册,了解到串口有6种中断:
    The SCIFA has six interrupt sources: transmit-FIFO-data-empty (TXI), receive-error (ERI), receive-FIFO-data-full
    (RXI), break (BRI), transmit-end (TEI), receive-data-ready (DRI). The TEI, DRI, ERI, and BRI interrupts share the same
    vector number.

    所以我想问问,如果我想比如利用receive-data-ready (DRI)写一个中断函数具体需要怎么操作?
    然后,我平常在其它函数里可以直接通过一些读寄存器操作来直接读寄存器来判断这些内容吗,比如Serial Status Register (FSR)寄存器的DR、TDFE位?
  • 如果想自己写这个中断函数的话可以参考generate/sc_drivers/r_scifa/src/hld/r_scifa_hld_prv.c中的RXI_handler和TXEI_handler和TXI_handler来写中断函数,使用时调用open初始化串口,然后编写wirte和read函数。

  • 你好,请问scifa_handle = open(DEVICE_INDENTIFIER "scifa0",O_RDWR);开串口为什么返回-1呢,谢谢