goldtiny 发表于 2016-3-4 16:52:28

瑞萨RX62N使用DMA+SCI传输问题

我在使用瑞萨RX62N单片机,有瑞萨官方提供的RPDL驱动,实现通过DMA接收SCI的数据,但是SCI发送不通过DMA,结果我的发送串口收不到。
代码如下:
/* PDL functions and definitions */
#include "r_pdl_dmac.h"
#include "r_pdl_cgc.h"
#include "r_pdl_intc.h"
#include "r_pdl_sci.h"
/* RPDL device-specific definitions */
#include "r_pdl_definitions.h"


/* Callback function prototype */
void DMAC2_transfer_end_handler(void);
void main(void);
/* Data destination area */
volatile uint8_t destination_string_1={0};

void main(void)
{
        unsigned char i;
        /* Initialise the system clocks */
        R_CGC_Set(
                8E6,
                64E6,
                32E6,
                PDL_NO_DATA,
                PDL_CGC_BCLK_DISABLE
        );
        /* Set the CPU’s Interrupt Priority Level to 0 */
        R_INTC_Write(
                PDL_INTC_REG_IPL,
                0
                );
        /* Configure the RS232 port */
        R_SCI_Create(
                2,
                PDL_SCI_ASYNC |PDL_SCI_TX_CONNECTED | PDL_SCI_RX_CONNECTED | PDL_SCI_8_BIT_LENGTH | PDL_SCI_PARITY_NONE | PDL_SCI_STOP_1,
                115200,
                7
        );
               
        /* Configure channel 2 */
        R_DMAC_Create(
                2,
                PDL_DMAC_NORMAL | PDL_DMAC_SOURCE_ADDRESS_FIXED| \
                PDL_DMAC_DESTINATION_ADDRESS_PLUS| PDL_DMAC_SIZE_8 | PDL_DMAC_IRQ_END | PDL_DMAC_TRIGGER_CLEAR,
                PDL_DMAC_TRIGGER_SCI2_RX,
                (uint8_t *)&SCI2.RDR,
                destination_string_1,
                32,
                PDL_NO_DATA,
                PDL_NO_DATA,
                PDL_NO_DATA,
                PDL_NO_DATA,
                DMAC2_transfer_end_handler,
                0
        );
        /* Enable channel 2 */
        R_DMAC_Control(
                2,
                PDL_DMAC_ENABLE,
                PDL_NO_PTR,
                PDL_NO_PTR,
                PDL_NO_DATA,
                PDL_NO_DATA,
                PDL_NO_DATA,
                PDL_NO_DATA,
                PDL_NO_DATA
        );
       
               
        /* Initiate reception, triggering the DMAC when data is received */
        R_SCI_Receive(
                2,
                PDL_SCI_DMAC_TRIGGER_ENABLE,
                PDL_NO_PTR,
                PDL_NO_DATA,
                PDL_NO_FUNC,
                PDL_NO_FUNC
        );

               
        R_SCI_Send(
                2,
                PDL_NO_DATA,
                "SEND",
                0,
                PDL_NO_FUNC
        );       
       
}



void DMAC2_transfer_end_handler(void)
{
        /* Disable channel 2 */
        R_DMAC_Control(
                2,
                PDL_DMAC_SUSPEND,
                PDL_NO_PTR,
                PDL_NO_PTR,
                PDL_NO_DATA,
                PDL_NO_DATA,
                PDL_NO_DATA,
                PDL_NO_DATA,
                PDL_NO_DATA
        );
}

黑巧克力 发表于 2016-3-20 16:35:45

DMA 这玩意很难,一直搞不清楚。

关注中

goldtiny 发表于 2016-4-21 11:04:47

串口DMA收发已经实现了。但是我想使用DMA接收串口数据存入循环队列里,不知道如何实现。
页: [1]
查看完整版本: 瑞萨RX62N使用DMA+SCI传输问题