#include "em_device.h"
#include "em_chip.h"
#include "em_usart.h"
#include "em_gpio.h"
#include "em_dma.h"
#include "em_cmu.h"
#include "em_emu.h"
#include "em_timer.h"
#include "em_int.h"
#include "em_prs.h"
#include "InitDevice.h"
#define DMA_CHANNEL_UART_TX 0 //
/* DMA init structure */
DMA_Init_TypeDef dmaInit;
/* DMA callback structure */
DMA_CB_TypeDef cb[DMA_CHAN_COUNT];//DMA_CHAN_COUN????
/** DMA control block, requires proper alignment. */
DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] __attribute__ ((aligned(256)));
uint8_t ucComplete = 0;
uint8_t Tx_buffer[8] = {0x30,0x31,0x32,0x33,0x34,0x35,0x0D,0x0A};
void UARTTxTransferComplete(unsigned int channel, bool primary, void *user)
{
ucComplete = 1;
GPIO_PinOutToggle(gpioPortE, 12);
}
void DMA_for_UART_Tx(void)
{
DMA_CfgChannel_TypeDef chnlCfg;
DMA_CfgDescr_TypeDef descrCfg;
/* Setting up call-back function */
cb[DMA_CHANNEL_UART_TX].cbFunc = UARTTxTransferComplete; //Set DMA is completed, whether to call the callback function. If there is no callback function, it is set to NULL
cb[DMA_CHANNEL_UART_TX].userPtr = NULL;
/* Setting up channel */
chnlCfg.highPri = false;
chnlCfg.enableInt = true;
//Set the DMA to send the next byte of the conditions, here is: When the Tx is completed, DMA then start to take down a byte to send
chnlCfg.select = DMAREQ_USART1_TXEMPTY;
//Initializes the function of the callback part of the DMA register
chnlCfg.cb = &(cb[DMA_CHANNEL_UART_TX]);
DMA_CfgChannel(DMA_CHANNEL_UART_TX, &chnlCfg);
//Register that defines the logical portion of the DMA
/* Setting up channel descriptor */
descrCfg.dstInc = dmaDataIncNone; //Meaning of the target address unchanged
descrCfg.srcInc = dmaDataInc1; //This means that the source address is incremented by one byte at a time
descrCfg.size = dmaDataSize1; //The byte unit of each transmission
descrCfg.arbRate = dmaArbitrate1; //DMA arbitration, one arbitration for every 1 byte sent
descrCfg.hprot = 0;
DMA_CfgDescr(DMA_CHANNEL_UART_TX, true, &descrCfg);
}
void DMAInit(void)
{
CMU_ClockEnable(cmuClock_DMA, true);
/* Initializing the DMA */
dmaInit.hprot = 0;
dmaInit.controlBlock = dmaControlBlock;
DMA_Init(&dmaInit);
}
int main(void)
{
/* Initialize chip */
CHIP_Init();
enter_DefaultMode_from_RESET();
GPIO_PinModeSet(gpioPortE, 12, gpioModePushPullDrive, 0); /* TX */
DMAInit();
DMA_for_UART_Tx();
ucComplete = 1;
GPIO_PinOutSet(DE_PORT, DE_PIN);
/* Infinite blink loop */
while(1)
{
if(ucComplete)
{
GPIO_PinOutSet(DE_PORT, DE_PIN);
DMA_ActivateBasic(DMA_CHANNEL_UART_TX,
true,
false,
(void *)&(USART1->TXDATA),
(void *)&Tx_buffer,
sizeof(Tx_buffer) - 1);
ucComplete = 0;
}
}
}
//=========================================================
// inc/InitDevice.h: generated by Hardware Configurator
//
// This file will be regenerated when saving a document.
// leave the sections inside the "$[...]" comment tags alone
// or they will be overwritten!
//=========================================================
#ifndef __INIT_DEVICE_H__
#define __INIT_DEVICE_H__
// USER CONSTANTS
// USER PROTOTYPES
// $[Mode Transition Prototypes]
extern void enter_DefaultMode_from_RESET(void);
// [Mode Transition Prototypes]$
// $[Config(Per-Module Mode)Transition Prototypes]
extern void HFXO_enter_DefaultMode_from_RESET(void);
extern void LFXO_enter_DefaultMode_from_RESET(void);
extern void CMU_enter_DefaultMode_from_RESET(void);
extern void ADC0_enter_DefaultMode_from_RESET(void);
extern void ACMP0_enter_DefaultMode_from_RESET(void);
extern void ACMP1_enter_DefaultMode_from_RESET(void);
extern void DAC0_enter_DefaultMode_from_RESET(void);
extern void BURTC_enter_DefaultMode_from_RESET(void);
extern void RTC_enter_DefaultMode_from_RESET(void);
extern void OPAMP0_enter_DefaultMode_from_RESET(void);
extern void OPAMP1_enter_DefaultMode_from_RESET(void);
extern void OPAMP2_enter_DefaultMode_from_RESET(void);
extern void USART0_enter_DefaultMode_from_RESET(void);
extern void USART1_enter_DefaultMode_from_RESET(void);
extern void USART2_enter_DefaultMode_from_RESET(void);
extern void LEUART0_enter_DefaultMode_from_RESET(void);
extern void LEUART1_enter_DefaultMode_from_RESET(void);
extern void VCMP_enter_DefaultMode_from_RESET(void);
extern void WDOG_enter_DefaultMode_from_RESET(void);
extern void I2C0_enter_DefaultMode_from_RESET(void);
extern void I2C1_enter_DefaultMode_from_RESET(void);
extern void TIMER0_enter_DefaultMode_from_RESET(void);
extern void TIMER1_enter_DefaultMode_from_RESET(void);
extern void TIMER2_enter_DefaultMode_from_RESET(void);
extern void TIMER3_enter_DefaultMode_from_RESET(void);
extern void LETIMER0_enter_DefaultMode_from_RESET(void);
extern void PCNT0_enter_DefaultMode_from_RESET(void);
extern void PCNT1_enter_DefaultMode_from_RESET(void);
extern void PCNT2_enter_DefaultMode_from_RESET(void);
extern void PRS_enter_DefaultMode_from_RESET(void);
extern void ETM_enter_DefaultMode_from_RESET(void);
extern void PORTIO_enter_DefaultMode_from_RESET(void);
// [Config(Per-Module Mode)Transition Prototypes]$
// $[User-defined pin name abstraction]
#define DE_PIN (4)
#define DE_PORT (gpioPortD)
#define LEUART1_RX_PIN (7)
#define LEUART1_RX_PORT (gpioPortC)
#define LEUART1_TX_PIN (6)
#define LEUART1_TX_PORT (gpioPortC)
#define USART0_RX_PIN (11)
#define USART0_RX_PORT (gpioPortE)
#define USART0_TX_PIN (10)
#define USART0_TX_PORT (gpioPortE)
#define USART1_RX_PIN (1)
#define USART1_RX_PORT (gpioPortC)
#define USART1_TX_PIN (0)
#define USART1_TX_PORT (gpioPortC)
// [User-defined pin name abstraction]$
#endif
//=========================================================
// src/InitDevice.c: generated by Hardware Configurator
//
// This file will be regenerated when saving a document.
// leave the sections inside the "$[...]" comment tags alone
// or they will be overwritten!
//=========================================================
// USER INCLUDES
#include "InitDevice.h"
// USER PROTOTYPES
// USER FUNCTIONS
// $[Library includes]
#include "em_system.h"
#include "em_emu.h"
#include "em_cmu.h"
#include "em_device.h"
#include "em_chip.h"
#include "em_assert.h"
#include "em_dma.h"
#include "em_gpio.h"
#include "em_leuart.h"
#include "em_usart.h"
// [Library includes]$
//==============================================================================
// enter_DefaultMode_from_RESET
//==============================================================================
extern void enter_DefaultMode_from_RESET(void) {
// $[Config Calls]
CHIP_Init();
HFXO_enter_DefaultMode_from_RESET();
LFXO_enter_DefaultMode_from_RESET();
CMU_enter_DefaultMode_from_RESET();
USART0_enter_DefaultMode_from_RESET();
USART1_enter_DefaultMode_from_RESET();
LEUART1_enter_DefaultMode_from_RESET();
PORTIO_enter_DefaultMode_from_RESET();
// [Config Calls]$
}
//================================================================================
// HFXO_enter_DefaultMode_from_RESET
//================================================================================
extern void HFXO_enter_DefaultMode_from_RESET(void) {
// $[HFXO]
CMU->CTRL = (CMU->CTRL & ~_CMU_CTRL_HFXOMODE_MASK) | CMU_CTRL_HFXOMODE_XTAL;
CMU->CTRL = (CMU->CTRL & ~_CMU_CTRL_HFXOBOOST_MASK)
| CMU_CTRL_HFXOBOOST_50PCENT;
SystemHFXOClockSet(24000000);
// [HFXO]$
}
//================================================================================
// LFXO_enter_DefaultMode_from_RESET
//================================================================================
extern void LFXO_enter_DefaultMode_from_RESET(void) {
// $[Use oscillator source]
CMU->CTRL = (CMU->CTRL & ~_CMU_CTRL_LFXOMODE_MASK) | CMU_CTRL_LFXOMODE_XTAL;
// [Use oscillator source]$
// $[LFXO Boost Percent]
CMU->CTRL = (CMU->CTRL & ~_CMU_CTRL_LFXOBOOST_MASK)
| CMU_CTRL_LFXOBOOST_100PCENT;
// [LFXO Boost Percent]$
// $[REDLFXO Boost]
// [REDLFXO Boost]$
}
//================================================================================
// CMU_enter_DefaultMode_from_RESET
//================================================================================
extern void CMU_enter_DefaultMode_from_RESET(void) {
// $[LFXO enable]
CMU_OscillatorEnable(cmuOsc_LFXO, true, true);
// [LFXO enable]$
// $[HFXO enable]
CMU_OscillatorEnable(cmuOsc_HFXO, true, true);
// [HFXO enable]$
// $[LFACLK Setup]
// [LFACLK Setup]$
// $[High Frequency Clock select]
/* Using HFXO as high frequency clock, HFCLK */
CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO);
/* Enable peripheral clock */
CMU_ClockEnable(cmuClock_HFPER, true);
// [High Frequency Clock select]$
// $[LF clock tree setup]
/* Enable LF clocks */
CMU_ClockEnable(cmuClock_CORELE, true);
CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO);
// [LF clock tree setup]$
// $[Peripheral Clock enables]
/* Enable clock for DMA */
CMU_ClockEnable(cmuClock_DMA, true);
/* Enable clock for LEUART1 */
CMU_ClockEnable(cmuClock_LEUART1, true);
/* Enable clock for USART0 */
CMU_ClockEnable(cmuClock_USART0, true);
/* Enable clock for USART1 */
CMU_ClockEnable(cmuClock_USART1, true);
/* Enable clock for GPIO by default */
CMU_ClockEnable(cmuClock_GPIO, true);
// [Peripheral Clock enables]$
}
//================================================================================
// ADC0_enter_DefaultMode_from_RESET
//================================================================================
extern void ADC0_enter_DefaultMode_from_RESET(void) {
// $[ADC_Init]
// [ADC_Init]$
// $[ADC_InitSingle]
// [ADC_InitSingle]$
// $[ADC_InitScan]
// [ADC_InitScan]$
}
//================================================================================
// ACMP0_enter_DefaultMode_from_RESET
//================================================================================
extern void ACMP0_enter_DefaultMode_from_RESET(void) {
// $[ACMP Initialization]
// [ACMP Initialization]$
// $[ACMP Channel config]
// [ACMP Channel config]$
}
//================================================================================
// ACMP1_enter_DefaultMode_from_RESET
//================================================================================
extern void ACMP1_enter_DefaultMode_from_RESET(void) {
// $[ACMP Initialization]
// [ACMP Initialization]$
// $[ACMP Channel config]
// [ACMP Channel config]$
}
//================================================================================
// DAC0_enter_DefaultMode_from_RESET
//================================================================================
extern void DAC0_enter_DefaultMode_from_RESET(void) {
// $[DAC Initialization]
// [DAC Initialization]$
// $[DAC Channel 0 config]
// [DAC Channel 0 config]$
// $[DAC Channel 1 config]
// [DAC Channel 1 config]$
}
//================================================================================
// BURTC_enter_DefaultMode_from_RESET
//================================================================================
extern void BURTC_enter_DefaultMode_from_RESET(void) {
// $[CMU_ClockEnable]
// [CMU_ClockEnable]$
// $[CMU_OscillatorEnable]
// [CMU_OscillatorEnable]$
// $[RMU_ResetControl]
// [RMU_ResetControl]$
// $[BURTC_Init]
// [BURTC_Init]$
// $[BURTC_CompareSet]
// [BURTC_CompareSet]$
}
//================================================================================
// RTC_enter_DefaultMode_from_RESET
//================================================================================
extern void RTC_enter_DefaultMode_from_RESET(void) {
// $[RTC_Init]
// [RTC_Init]$
}
//================================================================================
// OPAMP0_enter_DefaultMode_from_RESET
//================================================================================
extern void OPAMP0_enter_DefaultMode_from_RESET(void) {
// $[DAC Output]
// [DAC Output]$
// $[OPAMP_Enable]
// [OPAMP_Enable]$
}
//================================================================================
// OPAMP1_enter_DefaultMode_from_RESET
//================================================================================
extern void OPAMP1_enter_DefaultMode_from_RESET(void) {
// $[DAC Output]
// [DAC Output]$
// $[OPAMP_Enable]
// [OPAMP_Enable]$
}
//================================================================================
// OPAMP2_enter_DefaultMode_from_RESET
//================================================================================
extern void OPAMP2_enter_DefaultMode_from_RESET(void) {
// $[DAC Output]
// [DAC Output]$
// $[OPAMP_Enable]
// [OPAMP_Enable]$
}
//================================================================================
// USART0_enter_DefaultMode_from_RESET
//================================================================================
extern void USART0_enter_DefaultMode_from_RESET(void) {
// $[USART_InitAsync]
USART_InitAsync_TypeDef initasync = USART_INITASYNC_DEFAULT;
initasync.baudrate = 115200;
initasync.databits = usartDatabits8;
initasync.parity = usartNoParity;
initasync.stopbits = usartStopbits1;
initasync.oversampling = usartOVS16;
#if defined( USART_INPUT_RXPRS ) && defined( USART_CTRL_MVDIS )
initasync.mvdis = 0;
initasync.prsRxEnable = 0;
initasync.prsRxCh = 0;
#endif
USART_InitAsync(USART0, &initasync);
// [USART_InitAsync]$
// $[USART_InitSync]
// [USART_InitSync]$
// $[USART_InitPrsTrigger]
USART_PrsTriggerInit_TypeDef initprs = USART_INITPRSTRIGGER_DEFAULT;
initprs.rxTriggerEnable = 0;
initprs.txTriggerEnable = 0;
initprs.prsTriggerChannel = usartPrsTriggerCh0;
USART_InitPrsTrigger(USART0, &initprs);
// [USART_InitPrsTrigger]$
}
//================================================================================
// USART1_enter_DefaultMode_from_RESET
//================================================================================
extern void USART1_enter_DefaultMode_from_RESET(void) {
// $[USART_InitAsync]
USART_InitAsync_TypeDef initasync = USART_INITASYNC_DEFAULT;
initasync.baudrate = 115200;
initasync.databits = usartDatabits8;
initasync.parity = usartNoParity;
initasync.stopbits = usartStopbits1;
initasync.oversampling = usartOVS16;
#if defined( USART_INPUT_RXPRS ) && defined( USART_CTRL_MVDIS )
initasync.mvdis = 0;
initasync.prsRxEnable = 0;
initasync.prsRxCh = 0;
#endif
USART_InitAsync(USART1, &initasync);
// [USART_InitAsync]$
// $[USART_InitSync]
// [USART_InitSync]$
// $[USART_InitPrsTrigger]
USART_PrsTriggerInit_TypeDef initprs = USART_INITPRSTRIGGER_DEFAULT;
initprs.rxTriggerEnable = 0;
initprs.txTriggerEnable = 0;
initprs.prsTriggerChannel = usartPrsTriggerCh0;
USART_InitPrsTrigger(USART1, &initprs);
// [USART_InitPrsTrigger]$
}
//================================================================================
// USART2_enter_DefaultMode_from_RESET
//================================================================================
extern void USART2_enter_DefaultMode_from_RESET(void) {
// $[USART_InitAsync]
// [USART_InitAsync]$
// $[USART_InitSync]
// [USART_InitSync]$
// $[USART_InitPrsTrigger]
// [USART_InitPrsTrigger]$
}
//================================================================================
// LEUART0_enter_DefaultMode_from_RESET
//================================================================================
extern void LEUART0_enter_DefaultMode_from_RESET(void) {
// $[LEUART0 initialization]
// [LEUART0 initialization]$
}
//================================================================================
// LEUART1_enter_DefaultMode_from_RESET
//================================================================================
extern void LEUART1_enter_DefaultMode_from_RESET(void) {
// $[LEUART1 initialization]
LEUART_Init_TypeDef initleuart = LEUART_INIT_DEFAULT;
initleuart.enable = leuartEnable;
initleuart.baudrate = 9600;
initleuart.databits = leuartDatabits8;
initleuart.parity = leuartNoParity;
initleuart.stopbits = leuartStopbits1;
LEUART_Init(LEUART1, &initleuart);
/* Configuring non-standard properties */
LEUART_TxDmaInEM2Enable(LEUART1, 0);
LEUART_RxDmaInEM2Enable(LEUART1, 0);
// [LEUART1 initialization]$
}
//================================================================================
// VCMP_enter_DefaultMode_from_RESET
//================================================================================
extern void VCMP_enter_DefaultMode_from_RESET(void) {
// $[VCMP_Init]
// [VCMP_Init]$
}
//================================================================================
// WDOG_enter_DefaultMode_from_RESET
//================================================================================
extern void WDOG_enter_DefaultMode_from_RESET(void) {
// $[CMU_ClockEnable]
// [CMU_ClockEnable]$
// $[CMU_OscillatorEnable]
// [CMU_OscillatorEnable]$
// $[WDOG_Init]
// [WDOG_Init]$
}
//================================================================================
// I2C0_enter_DefaultMode_from_RESET
//================================================================================
extern void I2C0_enter_DefaultMode_from_RESET(void) {
// $[I2C0 initialization]
// [I2C0 initialization]$
}
//================================================================================
// I2C1_enter_DefaultMode_from_RESET
//================================================================================
extern void I2C1_enter_DefaultMode_from_RESET(void) {
// $[I2C1 initialization]
// [I2C1 initialization]$
}
//================================================================================
// TIMER0_enter_DefaultMode_from_RESET
//================================================================================
extern void TIMER0_enter_DefaultMode_from_RESET(void) {
// $[TIMER0 initialization]
// [TIMER0 initialization]$
// $[TIMER0 CC0 init]
// [TIMER0 CC0 init]$
// $[TIMER0 CC1 init]
// [TIMER0 CC1 init]$
// $[TIMER0 CC2 init]
// [TIMER0 CC2 init]$
// $[TIMER0 DTI init]
// [TIMER0 DTI init]$
}
//================================================================================
// TIMER1_enter_DefaultMode_from_RESET
//================================================================================
extern void TIMER1_enter_DefaultMode_from_RESET(void) {
// $[TIMER1 initialization]
// [TIMER1 initialization]$
// $[TIMER1 CC0 init]
// [TIMER1 CC0 init]$
// $[TIMER1 CC1 init]
// [TIMER1 CC1 init]$
// $[TIMER1 CC2 init]
// [TIMER1 CC2 init]$
}
//================================================================================
// TIMER2_enter_DefaultMode_from_RESET
//================================================================================
extern void TIMER2_enter_DefaultMode_from_RESET(void) {
// $[TIMER2 initialization]
// [TIMER2 initialization]$
// $[TIMER2 CC0 init]
// [TIMER2 CC0 init]$
// $[TIMER2 CC1 init]
// [TIMER2 CC1 init]$
// $[TIMER2 CC2 init]
// [TIMER2 CC2 init]$
}
//================================================================================
// TIMER3_enter_DefaultMode_from_RESET
//================================================================================
extern void TIMER3_enter_DefaultMode_from_RESET(void) {
// $[TIMER3 initialization]
// [TIMER3 initialization]$
// $[TIMER3 CC0 init]
// [TIMER3 CC0 init]$
// $[TIMER3 CC1 init]
// [TIMER3 CC1 init]$
// $[TIMER3 CC2 init]
// [TIMER3 CC2 init]$
}
//================================================================================
// LETIMER0_enter_DefaultMode_from_RESET
//================================================================================
extern void LETIMER0_enter_DefaultMode_from_RESET(void) {
// $[LETIMER0_Init]
// [LETIMER0_Init]$
}
//================================================================================
// PCNT0_enter_DefaultMode_from_RESET
//================================================================================
extern void PCNT0_enter_DefaultMode_from_RESET(void) {
// $[PCNT0 initialization]
// [PCNT0 initialization]$
}
//================================================================================
// PCNT1_enter_DefaultMode_from_RESET
//================================================================================
extern void PCNT1_enter_DefaultMode_from_RESET(void) {
// $[PCNT1 initialization]
// [PCNT1 initialization]$
}
//================================================================================
// PCNT2_enter_DefaultMode_from_RESET
//================================================================================
extern void PCNT2_enter_DefaultMode_from_RESET(void) {
// $[PCNT2 initialization]
// [PCNT2 initialization]$
}
//================================================================================
// PRS_enter_DefaultMode_from_RESET
//================================================================================
extern void PRS_enter_DefaultMode_from_RESET(void) {
// $[PRS initialization]
// [PRS initialization]$
}
//================================================================================
// ETM_enter_DefaultMode_from_RESET
//================================================================================
extern void ETM_enter_DefaultMode_from_RESET(void) {
// $[ETM initialization]
// [ETM initialization]$
}
//================================================================================
// PORTIO_enter_DefaultMode_from_RESET
//================================================================================
extern void PORTIO_enter_DefaultMode_from_RESET(void) {
// $[Port A Configuration]
// [Port A Configuration]$
// $[Port B Configuration]
// [Port B Configuration]$
// $[Port C Configuration]
/* Pin PC0 is configured to Push-pull */
GPIO->P[2].MODEL = (GPIO->P[2].MODEL & ~_GPIO_P_MODEL_MODE0_MASK)
| GPIO_P_MODEL_MODE0_PUSHPULL;
/* Pin PC1 is configured to Input enabled */
GPIO->P[2].MODEL = (GPIO->P[2].MODEL & ~_GPIO_P_MODEL_MODE1_MASK)
| GPIO_P_MODEL_MODE1_INPUT;
/* Pin PC6 is configured to Push-pull */
GPIO->P[2].MODEL = (GPIO->P[2].MODEL & ~_GPIO_P_MODEL_MODE6_MASK)
| GPIO_P_MODEL_MODE6_PUSHPULL;
/* Pin PC7 is configured to Input enabled */
GPIO->P[2].MODEL = (GPIO->P[2].MODEL & ~_GPIO_P_MODEL_MODE7_MASK)
| GPIO_P_MODEL_MODE7_INPUT;
// [Port C Configuration]$
// $[Port D Configuration]
/* Pin PD4 is configured to Push-pull */
GPIO->P[3].MODEL = (GPIO->P[3].MODEL & ~_GPIO_P_MODEL_MODE4_MASK)
| GPIO_P_MODEL_MODE4_PUSHPULL;
// [Port D Configuration]$
// $[Port E Configuration]
/* Pin PE10 is configured to Push-pull */
GPIO->P[4].MODEH = (GPIO->P[4].MODEH & ~_GPIO_P_MODEH_MODE10_MASK)
| GPIO_P_MODEH_MODE10_PUSHPULL;
/* Pin PE11 is configured to Input enabled */
GPIO->P[4].MODEH = (GPIO->P[4].MODEH & ~_GPIO_P_MODEH_MODE11_MASK)
| GPIO_P_MODEH_MODE11_INPUT;
// [Port E Configuration]$
// $[Port F Configuration]
// [Port F Configuration]$
// $[Route Configuration]
/* Enable signals RX, TX */
LEUART1->ROUTE |= LEUART_ROUTE_RXPEN | LEUART_ROUTE_TXPEN;
/* Enable signals RX, TX */
USART0->ROUTE |= USART_ROUTE_RXPEN | USART_ROUTE_TXPEN;
/* Enable signals RX, TX */
USART1->ROUTE |= USART_ROUTE_RXPEN | USART_ROUTE_TXPEN;
// [Route Configuration]$
}
#include "em_chip.h"
#include "em_usart.h"
#include "em_gpio.h"
#include "em_dma.h"
#include "em_cmu.h"
#include "em_emu.h"
#include "em_timer.h"
#include "em_int.h"
#include "em_prs.h"
#include "InitDevice.h"
#define DMA_CHANNEL_UART_TX 0 //
/* DMA init structure */
DMA_Init_TypeDef dmaInit;
/* DMA callback structure */
DMA_CB_TypeDef cb[DMA_CHAN_COUNT];//DMA_CHAN_COUN????
/** DMA control block, requires proper alignment. */
DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] __attribute__ ((aligned(256)));
uint8_t ucComplete = 0;
uint8_t Tx_buffer[8] = {0x30,0x31,0x32,0x33,0x34,0x35,0x0D,0x0A};
void UARTTxTransferComplete(unsigned int channel, bool primary, void *user)
{
ucComplete = 1;
GPIO_PinOutToggle(gpioPortE, 12);
}
void DMA_for_UART_Tx(void)
{
DMA_CfgChannel_TypeDef chnlCfg;
DMA_CfgDescr_TypeDef descrCfg;
/* Setting up call-back function */
cb[DMA_CHANNEL_UART_TX].cbFunc = UARTTxTransferComplete; //Set DMA is completed, whether to call the callback function. If there is no callback function, it is set to NULL
cb[DMA_CHANNEL_UART_TX].userPtr = NULL;
/* Setting up channel */
chnlCfg.highPri = false;
chnlCfg.enableInt = true;
//Set the DMA to send the next byte of the conditions, here is: When the Tx is completed, DMA then start to take down a byte to send
chnlCfg.select = DMAREQ_USART1_TXEMPTY;
//Initializes the function of the callback part of the DMA register
chnlCfg.cb = &(cb[DMA_CHANNEL_UART_TX]);
DMA_CfgChannel(DMA_CHANNEL_UART_TX, &chnlCfg);
//Register that defines the logical portion of the DMA
/* Setting up channel descriptor */
descrCfg.dstInc = dmaDataIncNone; //Meaning of the target address unchanged
descrCfg.srcInc = dmaDataInc1; //This means that the source address is incremented by one byte at a time
descrCfg.size = dmaDataSize1; //The byte unit of each transmission
descrCfg.arbRate = dmaArbitrate1; //DMA arbitration, one arbitration for every 1 byte sent
descrCfg.hprot = 0;
DMA_CfgDescr(DMA_CHANNEL_UART_TX, true, &descrCfg);
}
void DMAInit(void)
{
CMU_ClockEnable(cmuClock_DMA, true);
/* Initializing the DMA */
dmaInit.hprot = 0;
dmaInit.controlBlock = dmaControlBlock;
DMA_Init(&dmaInit);
}
int main(void)
{
/* Initialize chip */
CHIP_Init();
enter_DefaultMode_from_RESET();
GPIO_PinModeSet(gpioPortE, 12, gpioModePushPullDrive, 0); /* TX */
DMAInit();
DMA_for_UART_Tx();
ucComplete = 1;
GPIO_PinOutSet(DE_PORT, DE_PIN);
/* Infinite blink loop */
while(1)
{
if(ucComplete)
{
GPIO_PinOutSet(DE_PORT, DE_PIN);
DMA_ActivateBasic(DMA_CHANNEL_UART_TX,
true,
false,
(void *)&(USART1->TXDATA),
(void *)&Tx_buffer,
sizeof(Tx_buffer) - 1);
ucComplete = 0;
}
}
}
//=========================================================
// inc/InitDevice.h: generated by Hardware Configurator
//
// This file will be regenerated when saving a document.
// leave the sections inside the "$[...]" comment tags alone
// or they will be overwritten!
//=========================================================
#ifndef __INIT_DEVICE_H__
#define __INIT_DEVICE_H__
// USER CONSTANTS
// USER PROTOTYPES
// $[Mode Transition Prototypes]
extern void enter_DefaultMode_from_RESET(void);
// [Mode Transition Prototypes]$
// $[Config(Per-Module Mode)Transition Prototypes]
extern void HFXO_enter_DefaultMode_from_RESET(void);
extern void LFXO_enter_DefaultMode_from_RESET(void);
extern void CMU_enter_DefaultMode_from_RESET(void);
extern void ADC0_enter_DefaultMode_from_RESET(void);
extern void ACMP0_enter_DefaultMode_from_RESET(void);
extern void ACMP1_enter_DefaultMode_from_RESET(void);
extern void DAC0_enter_DefaultMode_from_RESET(void);
extern void BURTC_enter_DefaultMode_from_RESET(void);
extern void RTC_enter_DefaultMode_from_RESET(void);
extern void OPAMP0_enter_DefaultMode_from_RESET(void);
extern void OPAMP1_enter_DefaultMode_from_RESET(void);
extern void OPAMP2_enter_DefaultMode_from_RESET(void);
extern void USART0_enter_DefaultMode_from_RESET(void);
extern void USART1_enter_DefaultMode_from_RESET(void);
extern void USART2_enter_DefaultMode_from_RESET(void);
extern void LEUART0_enter_DefaultMode_from_RESET(void);
extern void LEUART1_enter_DefaultMode_from_RESET(void);
extern void VCMP_enter_DefaultMode_from_RESET(void);
extern void WDOG_enter_DefaultMode_from_RESET(void);
extern void I2C0_enter_DefaultMode_from_RESET(void);
extern void I2C1_enter_DefaultMode_from_RESET(void);
extern void TIMER0_enter_DefaultMode_from_RESET(void);
extern void TIMER1_enter_DefaultMode_from_RESET(void);
extern void TIMER2_enter_DefaultMode_from_RESET(void);
extern void TIMER3_enter_DefaultMode_from_RESET(void);
extern void LETIMER0_enter_DefaultMode_from_RESET(void);
extern void PCNT0_enter_DefaultMode_from_RESET(void);
extern void PCNT1_enter_DefaultMode_from_RESET(void);
extern void PCNT2_enter_DefaultMode_from_RESET(void);
extern void PRS_enter_DefaultMode_from_RESET(void);
extern void ETM_enter_DefaultMode_from_RESET(void);
extern void PORTIO_enter_DefaultMode_from_RESET(void);
// [Config(Per-Module Mode)Transition Prototypes]$
// $[User-defined pin name abstraction]
#define DE_PIN (4)
#define DE_PORT (gpioPortD)
#define LEUART1_RX_PIN (7)
#define LEUART1_RX_PORT (gpioPortC)
#define LEUART1_TX_PIN (6)
#define LEUART1_TX_PORT (gpioPortC)
#define USART0_RX_PIN (11)
#define USART0_RX_PORT (gpioPortE)
#define USART0_TX_PIN (10)
#define USART0_TX_PORT (gpioPortE)
#define USART1_RX_PIN (1)
#define USART1_RX_PORT (gpioPortC)
#define USART1_TX_PIN (0)
#define USART1_TX_PORT (gpioPortC)
// [User-defined pin name abstraction]$
#endif
//=========================================================
// src/InitDevice.c: generated by Hardware Configurator
//
// This file will be regenerated when saving a document.
// leave the sections inside the "$[...]" comment tags alone
// or they will be overwritten!
//=========================================================
// USER INCLUDES
#include "InitDevice.h"
// USER PROTOTYPES
// USER FUNCTIONS
// $[Library includes]
#include "em_system.h"
#include "em_emu.h"
#include "em_cmu.h"
#include "em_device.h"
#include "em_chip.h"
#include "em_assert.h"
#include "em_dma.h"
#include "em_gpio.h"
#include "em_leuart.h"
#include "em_usart.h"
// [Library includes]$
//==============================================================================
// enter_DefaultMode_from_RESET
//==============================================================================
extern void enter_DefaultMode_from_RESET(void) {
// $[Config Calls]
CHIP_Init();
HFXO_enter_DefaultMode_from_RESET();
LFXO_enter_DefaultMode_from_RESET();
CMU_enter_DefaultMode_from_RESET();
USART0_enter_DefaultMode_from_RESET();
USART1_enter_DefaultMode_from_RESET();
LEUART1_enter_DefaultMode_from_RESET();
PORTIO_enter_DefaultMode_from_RESET();
// [Config Calls]$
}
//================================================================================
// HFXO_enter_DefaultMode_from_RESET
//================================================================================
extern void HFXO_enter_DefaultMode_from_RESET(void) {
// $[HFXO]
CMU->CTRL = (CMU->CTRL & ~_CMU_CTRL_HFXOMODE_MASK) | CMU_CTRL_HFXOMODE_XTAL;
CMU->CTRL = (CMU->CTRL & ~_CMU_CTRL_HFXOBOOST_MASK)
| CMU_CTRL_HFXOBOOST_50PCENT;
SystemHFXOClockSet(24000000);
// [HFXO]$
}
//================================================================================
// LFXO_enter_DefaultMode_from_RESET
//================================================================================
extern void LFXO_enter_DefaultMode_from_RESET(void) {
// $[Use oscillator source]
CMU->CTRL = (CMU->CTRL & ~_CMU_CTRL_LFXOMODE_MASK) | CMU_CTRL_LFXOMODE_XTAL;
// [Use oscillator source]$
// $[LFXO Boost Percent]
CMU->CTRL = (CMU->CTRL & ~_CMU_CTRL_LFXOBOOST_MASK)
| CMU_CTRL_LFXOBOOST_100PCENT;
// [LFXO Boost Percent]$
// $[REDLFXO Boost]
// [REDLFXO Boost]$
}
//================================================================================
// CMU_enter_DefaultMode_from_RESET
//================================================================================
extern void CMU_enter_DefaultMode_from_RESET(void) {
// $[LFXO enable]
CMU_OscillatorEnable(cmuOsc_LFXO, true, true);
// [LFXO enable]$
// $[HFXO enable]
CMU_OscillatorEnable(cmuOsc_HFXO, true, true);
// [HFXO enable]$
// $[LFACLK Setup]
// [LFACLK Setup]$
// $[High Frequency Clock select]
/* Using HFXO as high frequency clock, HFCLK */
CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO);
/* Enable peripheral clock */
CMU_ClockEnable(cmuClock_HFPER, true);
// [High Frequency Clock select]$
// $[LF clock tree setup]
/* Enable LF clocks */
CMU_ClockEnable(cmuClock_CORELE, true);
CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO);
// [LF clock tree setup]$
// $[Peripheral Clock enables]
/* Enable clock for DMA */
CMU_ClockEnable(cmuClock_DMA, true);
/* Enable clock for LEUART1 */
CMU_ClockEnable(cmuClock_LEUART1, true);
/* Enable clock for USART0 */
CMU_ClockEnable(cmuClock_USART0, true);
/* Enable clock for USART1 */
CMU_ClockEnable(cmuClock_USART1, true);
/* Enable clock for GPIO by default */
CMU_ClockEnable(cmuClock_GPIO, true);
// [Peripheral Clock enables]$
}
//================================================================================
// ADC0_enter_DefaultMode_from_RESET
//================================================================================
extern void ADC0_enter_DefaultMode_from_RESET(void) {
// $[ADC_Init]
// [ADC_Init]$
// $[ADC_InitSingle]
// [ADC_InitSingle]$
// $[ADC_InitScan]
// [ADC_InitScan]$
}
//================================================================================
// ACMP0_enter_DefaultMode_from_RESET
//================================================================================
extern void ACMP0_enter_DefaultMode_from_RESET(void) {
// $[ACMP Initialization]
// [ACMP Initialization]$
// $[ACMP Channel config]
// [ACMP Channel config]$
}
//================================================================================
// ACMP1_enter_DefaultMode_from_RESET
//================================================================================
extern void ACMP1_enter_DefaultMode_from_RESET(void) {
// $[ACMP Initialization]
// [ACMP Initialization]$
// $[ACMP Channel config]
// [ACMP Channel config]$
}
//================================================================================
// DAC0_enter_DefaultMode_from_RESET
//================================================================================
extern void DAC0_enter_DefaultMode_from_RESET(void) {
// $[DAC Initialization]
// [DAC Initialization]$
// $[DAC Channel 0 config]
// [DAC Channel 0 config]$
// $[DAC Channel 1 config]
// [DAC Channel 1 config]$
}
//================================================================================
// BURTC_enter_DefaultMode_from_RESET
//================================================================================
extern void BURTC_enter_DefaultMode_from_RESET(void) {
// $[CMU_ClockEnable]
// [CMU_ClockEnable]$
// $[CMU_OscillatorEnable]
// [CMU_OscillatorEnable]$
// $[RMU_ResetControl]
// [RMU_ResetControl]$
// $[BURTC_Init]
// [BURTC_Init]$
// $[BURTC_CompareSet]
// [BURTC_CompareSet]$
}
//================================================================================
// RTC_enter_DefaultMode_from_RESET
//================================================================================
extern void RTC_enter_DefaultMode_from_RESET(void) {
// $[RTC_Init]
// [RTC_Init]$
}
//================================================================================
// OPAMP0_enter_DefaultMode_from_RESET
//================================================================================
extern void OPAMP0_enter_DefaultMode_from_RESET(void) {
// $[DAC Output]
// [DAC Output]$
// $[OPAMP_Enable]
// [OPAMP_Enable]$
}
//================================================================================
// OPAMP1_enter_DefaultMode_from_RESET
//================================================================================
extern void OPAMP1_enter_DefaultMode_from_RESET(void) {
// $[DAC Output]
// [DAC Output]$
// $[OPAMP_Enable]
// [OPAMP_Enable]$
}
//================================================================================
// OPAMP2_enter_DefaultMode_from_RESET
//================================================================================
extern void OPAMP2_enter_DefaultMode_from_RESET(void) {
// $[DAC Output]
// [DAC Output]$
// $[OPAMP_Enable]
// [OPAMP_Enable]$
}
//================================================================================
// USART0_enter_DefaultMode_from_RESET
//================================================================================
extern void USART0_enter_DefaultMode_from_RESET(void) {
// $[USART_InitAsync]
USART_InitAsync_TypeDef initasync = USART_INITASYNC_DEFAULT;
initasync.baudrate = 115200;
initasync.databits = usartDatabits8;
initasync.parity = usartNoParity;
initasync.stopbits = usartStopbits1;
initasync.oversampling = usartOVS16;
#if defined( USART_INPUT_RXPRS ) && defined( USART_CTRL_MVDIS )
initasync.mvdis = 0;
initasync.prsRxEnable = 0;
initasync.prsRxCh = 0;
#endif
USART_InitAsync(USART0, &initasync);
// [USART_InitAsync]$
// $[USART_InitSync]
// [USART_InitSync]$
// $[USART_InitPrsTrigger]
USART_PrsTriggerInit_TypeDef initprs = USART_INITPRSTRIGGER_DEFAULT;
initprs.rxTriggerEnable = 0;
initprs.txTriggerEnable = 0;
initprs.prsTriggerChannel = usartPrsTriggerCh0;
USART_InitPrsTrigger(USART0, &initprs);
// [USART_InitPrsTrigger]$
}
//================================================================================
// USART1_enter_DefaultMode_from_RESET
//================================================================================
extern void USART1_enter_DefaultMode_from_RESET(void) {
// $[USART_InitAsync]
USART_InitAsync_TypeDef initasync = USART_INITASYNC_DEFAULT;
initasync.baudrate = 115200;
initasync.databits = usartDatabits8;
initasync.parity = usartNoParity;
initasync.stopbits = usartStopbits1;
initasync.oversampling = usartOVS16;
#if defined( USART_INPUT_RXPRS ) && defined( USART_CTRL_MVDIS )
initasync.mvdis = 0;
initasync.prsRxEnable = 0;
initasync.prsRxCh = 0;
#endif
USART_InitAsync(USART1, &initasync);
// [USART_InitAsync]$
// $[USART_InitSync]
// [USART_InitSync]$
// $[USART_InitPrsTrigger]
USART_PrsTriggerInit_TypeDef initprs = USART_INITPRSTRIGGER_DEFAULT;
initprs.rxTriggerEnable = 0;
initprs.txTriggerEnable = 0;
initprs.prsTriggerChannel = usartPrsTriggerCh0;
USART_InitPrsTrigger(USART1, &initprs);
// [USART_InitPrsTrigger]$
}
//================================================================================
// USART2_enter_DefaultMode_from_RESET
//================================================================================
extern void USART2_enter_DefaultMode_from_RESET(void) {
// $[USART_InitAsync]
// [USART_InitAsync]$
// $[USART_InitSync]
// [USART_InitSync]$
// $[USART_InitPrsTrigger]
// [USART_InitPrsTrigger]$
}
//================================================================================
// LEUART0_enter_DefaultMode_from_RESET
//================================================================================
extern void LEUART0_enter_DefaultMode_from_RESET(void) {
// $[LEUART0 initialization]
// [LEUART0 initialization]$
}
//================================================================================
// LEUART1_enter_DefaultMode_from_RESET
//================================================================================
extern void LEUART1_enter_DefaultMode_from_RESET(void) {
// $[LEUART1 initialization]
LEUART_Init_TypeDef initleuart = LEUART_INIT_DEFAULT;
initleuart.enable = leuartEnable;
initleuart.baudrate = 9600;
initleuart.databits = leuartDatabits8;
initleuart.parity = leuartNoParity;
initleuart.stopbits = leuartStopbits1;
LEUART_Init(LEUART1, &initleuart);
/* Configuring non-standard properties */
LEUART_TxDmaInEM2Enable(LEUART1, 0);
LEUART_RxDmaInEM2Enable(LEUART1, 0);
// [LEUART1 initialization]$
}
//================================================================================
// VCMP_enter_DefaultMode_from_RESET
//================================================================================
extern void VCMP_enter_DefaultMode_from_RESET(void) {
// $[VCMP_Init]
// [VCMP_Init]$
}
//================================================================================
// WDOG_enter_DefaultMode_from_RESET
//================================================================================
extern void WDOG_enter_DefaultMode_from_RESET(void) {
// $[CMU_ClockEnable]
// [CMU_ClockEnable]$
// $[CMU_OscillatorEnable]
// [CMU_OscillatorEnable]$
// $[WDOG_Init]
// [WDOG_Init]$
}
//================================================================================
// I2C0_enter_DefaultMode_from_RESET
//================================================================================
extern void I2C0_enter_DefaultMode_from_RESET(void) {
// $[I2C0 initialization]
// [I2C0 initialization]$
}
//================================================================================
// I2C1_enter_DefaultMode_from_RESET
//================================================================================
extern void I2C1_enter_DefaultMode_from_RESET(void) {
// $[I2C1 initialization]
// [I2C1 initialization]$
}
//================================================================================
// TIMER0_enter_DefaultMode_from_RESET
//================================================================================
extern void TIMER0_enter_DefaultMode_from_RESET(void) {
// $[TIMER0 initialization]
// [TIMER0 initialization]$
// $[TIMER0 CC0 init]
// [TIMER0 CC0 init]$
// $[TIMER0 CC1 init]
// [TIMER0 CC1 init]$
// $[TIMER0 CC2 init]
// [TIMER0 CC2 init]$
// $[TIMER0 DTI init]
// [TIMER0 DTI init]$
}
//================================================================================
// TIMER1_enter_DefaultMode_from_RESET
//================================================================================
extern void TIMER1_enter_DefaultMode_from_RESET(void) {
// $[TIMER1 initialization]
// [TIMER1 initialization]$
// $[TIMER1 CC0 init]
// [TIMER1 CC0 init]$
// $[TIMER1 CC1 init]
// [TIMER1 CC1 init]$
// $[TIMER1 CC2 init]
// [TIMER1 CC2 init]$
}
//================================================================================
// TIMER2_enter_DefaultMode_from_RESET
//================================================================================
extern void TIMER2_enter_DefaultMode_from_RESET(void) {
// $[TIMER2 initialization]
// [TIMER2 initialization]$
// $[TIMER2 CC0 init]
// [TIMER2 CC0 init]$
// $[TIMER2 CC1 init]
// [TIMER2 CC1 init]$
// $[TIMER2 CC2 init]
// [TIMER2 CC2 init]$
}
//================================================================================
// TIMER3_enter_DefaultMode_from_RESET
//================================================================================
extern void TIMER3_enter_DefaultMode_from_RESET(void) {
// $[TIMER3 initialization]
// [TIMER3 initialization]$
// $[TIMER3 CC0 init]
// [TIMER3 CC0 init]$
// $[TIMER3 CC1 init]
// [TIMER3 CC1 init]$
// $[TIMER3 CC2 init]
// [TIMER3 CC2 init]$
}
//================================================================================
// LETIMER0_enter_DefaultMode_from_RESET
//================================================================================
extern void LETIMER0_enter_DefaultMode_from_RESET(void) {
// $[LETIMER0_Init]
// [LETIMER0_Init]$
}
//================================================================================
// PCNT0_enter_DefaultMode_from_RESET
//================================================================================
extern void PCNT0_enter_DefaultMode_from_RESET(void) {
// $[PCNT0 initialization]
// [PCNT0 initialization]$
}
//================================================================================
// PCNT1_enter_DefaultMode_from_RESET
//================================================================================
extern void PCNT1_enter_DefaultMode_from_RESET(void) {
// $[PCNT1 initialization]
// [PCNT1 initialization]$
}
//================================================================================
// PCNT2_enter_DefaultMode_from_RESET
//================================================================================
extern void PCNT2_enter_DefaultMode_from_RESET(void) {
// $[PCNT2 initialization]
// [PCNT2 initialization]$
}
//================================================================================
// PRS_enter_DefaultMode_from_RESET
//================================================================================
extern void PRS_enter_DefaultMode_from_RESET(void) {
// $[PRS initialization]
// [PRS initialization]$
}
//================================================================================
// ETM_enter_DefaultMode_from_RESET
//================================================================================
extern void ETM_enter_DefaultMode_from_RESET(void) {
// $[ETM initialization]
// [ETM initialization]$
}
//================================================================================
// PORTIO_enter_DefaultMode_from_RESET
//================================================================================
extern void PORTIO_enter_DefaultMode_from_RESET(void) {
// $[Port A Configuration]
// [Port A Configuration]$
// $[Port B Configuration]
// [Port B Configuration]$
// $[Port C Configuration]
/* Pin PC0 is configured to Push-pull */
GPIO->P[2].MODEL = (GPIO->P[2].MODEL & ~_GPIO_P_MODEL_MODE0_MASK)
| GPIO_P_MODEL_MODE0_PUSHPULL;
/* Pin PC1 is configured to Input enabled */
GPIO->P[2].MODEL = (GPIO->P[2].MODEL & ~_GPIO_P_MODEL_MODE1_MASK)
| GPIO_P_MODEL_MODE1_INPUT;
/* Pin PC6 is configured to Push-pull */
GPIO->P[2].MODEL = (GPIO->P[2].MODEL & ~_GPIO_P_MODEL_MODE6_MASK)
| GPIO_P_MODEL_MODE6_PUSHPULL;
/* Pin PC7 is configured to Input enabled */
GPIO->P[2].MODEL = (GPIO->P[2].MODEL & ~_GPIO_P_MODEL_MODE7_MASK)
| GPIO_P_MODEL_MODE7_INPUT;
// [Port C Configuration]$
// $[Port D Configuration]
/* Pin PD4 is configured to Push-pull */
GPIO->P[3].MODEL = (GPIO->P[3].MODEL & ~_GPIO_P_MODEL_MODE4_MASK)
| GPIO_P_MODEL_MODE4_PUSHPULL;
// [Port D Configuration]$
// $[Port E Configuration]
/* Pin PE10 is configured to Push-pull */
GPIO->P[4].MODEH = (GPIO->P[4].MODEH & ~_GPIO_P_MODEH_MODE10_MASK)
| GPIO_P_MODEH_MODE10_PUSHPULL;
/* Pin PE11 is configured to Input enabled */
GPIO->P[4].MODEH = (GPIO->P[4].MODEH & ~_GPIO_P_MODEH_MODE11_MASK)
| GPIO_P_MODEH_MODE11_INPUT;
// [Port E Configuration]$
// $[Port F Configuration]
// [Port F Configuration]$
// $[Route Configuration]
/* Enable signals RX, TX */
LEUART1->ROUTE |= LEUART_ROUTE_RXPEN | LEUART_ROUTE_TXPEN;
/* Enable signals RX, TX */
USART0->ROUTE |= USART_ROUTE_RXPEN | USART_ROUTE_TXPEN;
/* Enable signals RX, TX */
USART1->ROUTE |= USART_ROUTE_RXPEN | USART_ROUTE_TXPEN;
// [Route Configuration]$
}
Комментариев нет:
Отправить комментарий