This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Using CMSIS GPDMA driver in custom scripts

I've rewritten an UART driver since I was not happy with the CSMIS one. Now I want to use GPDMA_LPC17xx in this driver.

Including the header file:

#include "GPDMA_LPC17xx.h"              // Keil::Device:GPDMA


This gives me problems using the GPDMA functions (of course, there are extern declarations there)

Error: L6218E: Undefined symbol GPDMA_Initialize() (referred from uartcontroller.o).
Error: L6218E: Undefined symbol GPDMA_ChannelConfigure(unsigned char, unsigned, unsigned, unsigned, unsigned, void(*)(unsigned)) (referred from uartcontroller.o).
Error: L6218E: Undefined symbol GPDMA_PeripheralSelect(unsigned char, unsigned char) (referred from uartcontroller.o).

Including the "GPDMA_LPC17xx.c" makes me able to at least compile the software. It does also run once, but the interrupts are not called so it stops there.

This is the code I run to send a data buffer to UART

if (evt.value.v & SIGNAL_UART_DATA_READY)
{

        //UART->THR = 0x01;


        GPDMA_PeripheralSelect (GPDMA_CONN_UART0_Tx, 0U);
                        // Configure DMA channel


        stat = GPDMA_ChannelConfigure (RTE_UART0_DMA_TX_CH,
                 (uint32_t)pSendDataBuffer,
                 (uint32_t)(&(UART->THR)),
                 GPDMA_CH_CONTROL_TRANSFERSIZE(100)                       |  // size
                 GPDMA_CH_CONTROL_SBSIZE(GPDMA_BSIZE_1)                   |
                 GPDMA_CH_CONTROL_DBSIZE(GPDMA_BSIZE_1)                   |
                 GPDMA_CH_CONTROL_SWIDTH(GPDMA_WIDTH_BYTE)                |
                 GPDMA_CH_CONTROL_DWIDTH(GPDMA_WIDTH_BYTE)                |
                 GPDMA_CH_CONTROL_I                                       |
                 GPDMA_CH_CONTROL_SI,
                 GPDMA_CH_CONFIG_DEST_PERI( GPDMA_CONN_UART0_Tx)                |
                 GPDMA_CH_CONFIG_FLOWCNTRL(GPDMA_TRANSFER_M2P_CTRL_DMA)   |
                 GPDMA_CH_CONFIG_IE                                       |
                 GPDMA_CH_CONFIG_ITC                                      |
                 GPDMA_CH_CONFIG_E,
                 USART0_DMA_callback);


        if (stat == -1)
                __breakpoint(0);


}

This works once, then the breakpoint triggers.

Am I doing something wrong with the including part or is just my GPDMA trigger wrong?