char hello[] = { 'H', 'E', 'L', 'L', 'O', ' ', 'H', 'A', 'B', 'R', '!', 0, '\r' };
//.... while (1) { rx_char = LEUART_Rx(LEUART0); if(rx_char == '\r') { rxbuf[i] = rx_char; i = 0; BSP_LedToggle(1); for (j = 0; j < 1000; j++); BSP_LedToggle(1); } else { rxbuf[i] = rx_char; i++; } } }
#include "em_chip.h" #include "em_device.h" #include "em_cmu.h" #include "em_emu.h" #include "em_leuart.h" #include "em_gpio.h" #include "bsp.h" char rx_char; int i, j; char rxbuf[13]; LEUART_Init_TypeDef LEUART0Init = { .enable = leuartEnableRx, .refFreq = 0, .baudrate = 9600, .databits = leuartDatabits8, .parity = leuartNoParity, .stopbits = leuartStopbits2, }; void initLeuart(void) { LEUART_Reset(LEUART0); LEUART_Init(LEUART0, &LEUART0Init); LEUART0->ROUTE = LEUART_ROUTE_RXPEN | LEUART_ROUTE_LOCATION_LOC0; GPIO_PinModeSet(gpioPortD, 5, gpioModeInputPull, 1); } int main(void) { CHIP_Init(); CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFXO); CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO); CMU_ClockEnable(cmuClock_CORELE, true); CMU_ClockEnable(cmuClock_GPIO, true); CMU_ClockEnable(cmuClock_LEUART0, true); initLeuart(); BSP_LedsInit(); while (1) { rx_char = LEUART_Rx(LEUART0); if(rx_char == '\r') { rxbuf[i] = rx_char; i = 0; BSP_LedToggle(1); for (j = 0; j < 1000; j++); BSP_LedToggle(1); } else { rxbuf[i] = rx_char; i++; } } }
int main(void) { CHIP_Init(); i = 0; ... while (1) { EMU_EnterEM2(true); } }
void setupLeuart(void) { LEUART_IntEnable(LEUART0, LEUART_IEN_RXDATAV); NVIC_EnableIRQ(LEUART0_IRQn); LEUART0->CTRL = LEUART_CTRL_RXDMAWU; }
void LEUART0_IRQHandler(void) { leuartif = LEUART_IntGet(LEUART0); LEUART_IntClear(LEUART0, leuartif); rx_char = LEUART0->RXDATA; if (rx_char == '\r') { rxbuf[i] = rx_char; i = 0; BSP_LedToggle(1); for (j=0; j<1000; j++); BSP_LedToggle(1); } else { rxbuf[i] = rx_char; i++; } }
#include "em_chip.h" #include "em_device.h" #include "em_cmu.h" #include "em_emu.h" #include "em_leuart.h" #include "em_dma.h" char rx_char; int i, j; char rxbuf[12]; uint32_t leuartif; uint32_t len; LEUART_Init_TypeDef LEUART0Init = { .enable = leuartEnableRx, .refFreq = 0, .baudrate = 9600, .databits = leuartDatabits8, .parity = leuartNoParity, .stopbits = leuartStopbits2, }; void LEUART0_IRQHandler(void) { leuartif = LEUART_IntGet(LEUART0); LEUART_IntClear(LEUART0, leuartif); rx_char = LEUART0->RXDATA; if (rx_char == '\r') { rxbuf[i] = rx_char; i = 0; BSP_LedToggle(1); for (j=0; j<1000; j++); BSP_LedToggle(1); } else { rxbuf[i] = rx_char; i++; } } void initLeuart(void) { LEUART_Reset(LEUART0); LEUART_Init(LEUART0, &LEUART0Init); LEUART0->ROUTE = LEUART_ROUTE_RXPEN | LEUART_ROUTE_LOCATION_LOC0; GPIO_PinModeSet(gpioPortD, 5, gpioModeInputPull, 1); } void setupLeuart(void) { LEUART_IntEnable(LEUART0, LEUART_IEN_RXDATAV); NVIC_EnableIRQ(LEUART0_IRQn); } int main(void) { CHIP_Init(); i = 0; CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFXO); CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO); CMU_ClockEnable(cmuClock_CORELE, true); /* Enable CORELE clock */ CMU_ClockEnable(cmuClock_GPIO, true); /* Enable GPIO clock */ CMU_ClockEnable(cmuClock_LEUART0, true); /* Enable LEUART0 clock */ initLeuart(); setupLeuartDma(); BSP_LedsInit(); while (1) { EMU_EnterEM2(true); } }
void setupLeuartDma(void) { DMA_Init(&dmaInit); DMA_CfgChannel(DMA_CHANNEL, &chnlCfg); DMA_CfgDescr(DMA_CHANNEL, true, &descrCfg); DMA_ActivateBasic(DMA_CHANNEL, true, false, (void *) &rxbuf, (void *) &LEUART0->RXDATA, BUF_MAX-1); //------------------------------- '\r' --------------------------------// LEUART0->SIGFRAME = '\r'; LEUART_IntEnable(LEUART0, LEUART_IEN_SIGF); //-----------------------------------------------------------------------------------------------------------// NVIC_EnableIRQ(LEUART0_IRQn); LEUART0->CTRL = LEUART_CTRL_RXDMAWU; }
void LEUART0_IRQHandler(void) { leuartif = LEUART_IntGet(LEUART0); LEUART_IntClear(LEUART0, leuartif); if (leuartif & LEUART_IF_SIGF) { DMA_ActivateBasic(DMA_CHANNEL, true, false, NULL, NULL, BUF_MAX-1); BSP_LedToggle(1); for (j = 0; j < 1000; j++); BSP_LedToggle(1); } }
#include "em_chip.h" #include "em_device.h" #include "em_cmu.h" #include "em_emu.h" #include "em_leuart.h" #include "em_dma.h" #include "em_gpio.h" #define DMA_CHANNEL 0 #define BUF_MAX 1023 char rx_char; int i, j; /* DMA control block, must be aligned to 256. */ #if defined (__ICCARM__) #pragma data_alignment=256 DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2]; #elif defined (__CC_ARM) DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] __attribute__ ((aligned(256))); #elif defined (__GNUC__) DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] __attribute__ ((aligned(256))); #else #error Undefined toolkit, need to define alignment #endif uint32_t leuartif; uint32_t len; /* Defining the LEUART0 initialization data */ LEUART_Init_TypeDef LEUART0Init = { .enable = leuartEnableRx, /* Activate data reception on LEUn_RX pin. */ .refFreq = 0, /* Inherit the clock frequenzy from the LEUART clock source */ .baudrate = 9600, /* Baudrate = 9600 bps */ .databits = leuartDatabits8, /* Each LEUART frame containes 8 databits */ .parity = leuartNoParity, /* No parity bits in use */ .stopbits = leuartStopbits2, /* Setting the number of stop bits in a frame to 2 bitperiods */ }; /* DMA init structure */ DMA_Init_TypeDef dmaInit = { .hprot = 0, /* No descriptor protection */ .controlBlock = dmaControlBlock, /* DMA control block alligned to 256 */ }; /* Setting up channel */ DMA_CfgChannel_TypeDef chnlCfg = { .highPri = false, /* Normal priority */ .enableInt = false, /* No interupt enabled for callback functions */ .select = DMAREQ_LEUART0_RXDATAV, /* Set LEUART0 RX data avalible as source of DMA signals */ .cb = NULL, /* No callback funtion */ }; /* Setting up channel descriptor */ DMA_CfgDescr_TypeDef descrCfg = { .dstInc = dmaDataInc1, /* Increment destination address by one byte */ .srcInc = dmaDataIncNone, /* Do no increment source address */ .size = dmaDataSize1, /* Data size is one byte */ .arbRate = dmaArbitrate1, /* Rearbitrate for each byte recieved*/ .hprot = 0, /* No read/write source protection */ }; void LEUART0_IRQHandler(void) { leuartif = LEUART_IntGet(LEUART0); LEUART_IntClear(LEUART0, leuartif); if (leuartif & LEUART_IF_SIGF) { DMA_ActivateBasic(DMA_CHANNEL, true, false, NULL, NULL, BUF_MAX-1); BSP_LedToggle(1); for (j = 0; j < 1000; j++); BSP_LedToggle(1); } } void initLeuart(void) { LEUART_Reset(LEUART0); LEUART_Init(LEUART0, &LEUART0Init); LEUART0->ROUTE = LEUART_ROUTE_RXPEN | LEUART_ROUTE_LOCATION_LOC0; GPIO_PinModeSet(gpioPortD, 5, gpioModeInputPull, 1); } void setupLeuartDma(void) { DMA_Init(&dmaInit); DMA_CfgChannel(DMA_CHANNEL, &chnlCfg); DMA_CfgDescr(DMA_CHANNEL, true, &descrCfg); DMA_ActivateBasic(DMA_CHANNEL, true, false, (void *) &rxbuf, (void *) &LEUART0->RXDATA, BUF_MAX-1); LEUART0->SIGFRAME = '\r'; LEUART_IntEnable(LEUART0, LEUART_IEN_SIGF); NVIC_EnableIRQ(LEUART0_IRQn); LEUART0->CTRL = LEUART_CTRL_RXDMAWU; } int main(void) { CHIP_Init(); i = 0; CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFXO); CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO); CMU_ClockEnable(cmuClock_CORELE, true); CMU_ClockEnable(cmuClock_DMA, true); CMU_ClockEnable(cmuClock_GPIO, true); CMU_ClockEnable(cmuClock_LEUART0, true); initLeuart(); setupLeuartDma(); BSP_LedsInit(); while (1) { EMU_EnterEM2(true); } }
extern void enter_DefaultMode_from_RESET(void) { CMU_enter_DefaultMode_from_RESET(); PCNT0_enter_DefaultMode_from_RESET(); PORTIO_enter_DefaultMode_from_RESET(); } extern void CMU_enter_DefaultMode_from_RESET(void) { CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFRCO); CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFRCO); CMU_ClockEnable(cmuClock_CORELE, true); CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFRCO); CMU_ClockEnable(cmuClock_PCNT0, true); CMU_ClockEnable(cmuClock_GPIO, true); } extern void PCNT0_enter_DefaultMode_from_RESET(void) { PCNT_Init_TypeDef init = PCNT_INIT_DEFAULT; init.counter = 0; init.top = 5; init.negEdge = 0; init.countDown = 0; init.filter = 1; init.hyst = 0; init.s1CntDir = 0; init.cntEvent = pcntCntEventUp; init.auxCntEvent = pcntCntEventNone; init.s0PRS = pcntPRSCh0; init.s1PRS = pcntPRSCh0; PCNT_Init(PCNT0, &init); PCNT_Enable(PCNT0, pcntModeOvsSingle); } extern void PORTIO_enter_DefaultMode_from_RESET(void) { /* Pin PC0 is configured to Input enabled */ GPIO->P[2].MODEL = (GPIO->P[2].MODEL & ~_GPIO_P_MODEL_MODE0_MASK) | GPIO_P_MODEL_MODE0_INPUT; /* Module PCNT0 is configured to location 2 */ PCNT0->ROUTE = (PCNT0->ROUTE & ~_PCNT_ROUTE_LOCATION_MASK) | PCNT_ROUTE_LOCATION_LOC2; }
/**************************************************************************//** * @file * @brief Empty Project * @author Energy Micro AS * @version 3.20.2 ****************************************************************************** * @section License * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b> ******************************************************************************* * * This file is licensed under the Silicon Labs Software License Agreement. See * "http://developer.silabs.com/legal/version/v11/Silicon_Labs_Software_License_Agreement.txt" * for details. Before using this software for any purpose, you must agree to the * terms of that agreement. * ******************************************************************************/ #include "em_device.h" #include "em_chip.h" /**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { /* Chip errata */ CHIP_Init(); /* Infinite loop */ while (1) { } }
//========================================================= // 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_pcnt.h" // [Library includes]$ //============================================================================== // enter_DefaultMode_from_RESET //============================================================================== extern void enter_DefaultMode_from_RESET(void) { // $[Config Calls] CMU_enter_DefaultMode_from_RESET(); PCNT0_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] // [HFXO]$ } //================================================================================ // LFXO_enter_DefaultMode_from_RESET //================================================================================ extern void LFXO_enter_DefaultMode_from_RESET(void) { // $[Use oscillator source] // [Use oscillator source]$ // $[LFXO Boost Percent] // [LFXO Boost Percent]$ // $[REDLFXO Boost] // [REDLFXO Boost]$ } //================================================================================ // CMU_enter_DefaultMode_from_RESET //================================================================================ extern void CMU_enter_DefaultMode_from_RESET(void) { // $[LFXO enable] // [LFXO enable]$ // $[HFXO enable] // [HFXO enable]$ // $[LFACLK Setup] /* Enable LFRCO oscillator */ CMU_OscillatorEnable(cmuOsc_LFRCO, true, true); /* Select LFRCO as clock source for LFACLK */ CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFRCO); // [LFACLK Setup]$ // $[High Frequency Clock select] /* Using HFRCO at 14MHz as high frequency clock, HFCLK */ CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFRCO); // [High Frequency Clock select]$ // $[LF clock tree setup] /* Enable LF clocks */ CMU_ClockEnable(cmuClock_CORELE, true); CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFRCO); // [LF clock tree setup]$ // $[Peripheral Clock enables] /* Enable clock for PCNT0 */ CMU_ClockEnable(cmuClock_PCNT0, 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]$ } //================================================================================ // IDAC0_enter_DefaultMode_from_RESET //================================================================================ extern void IDAC0_enter_DefaultMode_from_RESET(void) { // $[IDAC Initialization] // [IDAC Initialization]$ // $[IDAC optional configurations] // [IDAC optional configurations]$ // $[IDAC enable] // [IDAC enable]$ } //================================================================================ // RTC_enter_DefaultMode_from_RESET //================================================================================ extern void RTC_enter_DefaultMode_from_RESET(void) { // $[RTC_Init] // [RTC_Init]$ } //================================================================================ // USART1_enter_DefaultMode_from_RESET //================================================================================ extern void USART1_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]$ } //================================================================================ // 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]$ } //================================================================================ // 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]$ } //================================================================================ // 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]$ } //================================================================================ // PCNT0_enter_DefaultMode_from_RESET //================================================================================ extern void PCNT0_enter_DefaultMode_from_RESET(void) { // $[PCNT0 initialization] PCNT_Init_TypeDef init = PCNT_INIT_DEFAULT; init.counter = 0; init.top = 5; init.negEdge = 0; init.countDown = 0; init.filter = 1; init.hyst = 0; init.s1CntDir = 0; init.cntEvent = pcntCntEventUp; init.auxCntEvent = pcntCntEventNone; init.s0PRS = pcntPRSCh0; init.s1PRS = pcntPRSCh0; PCNT_Init(PCNT0, &init); /* Activating PCNT0 */ PCNT_Enable(PCNT0, pcntModeOvsSingle); // [PCNT0 initialization]$ } //================================================================================ // PRS_enter_DefaultMode_from_RESET //================================================================================ extern void PRS_enter_DefaultMode_from_RESET(void) { // $[PRS initialization] // [PRS initialization]$ } 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 Input enabled */ GPIO->P[2].MODEL = (GPIO->P[2].MODEL & ~_GPIO_P_MODEL_MODE0_MASK) | GPIO_P_MODEL_MODE0_INPUT; // [Port C Configuration]$ // $[Port D Configuration] // [Port D Configuration]$ // $[Port E Configuration] // [Port E Configuration]$ // $[Port F Configuration] // [Port F Configuration]$ // $[Route Configuration] /* Module PCNT0 is configured to location 2 */ PCNT0->ROUTE = (PCNT0->ROUTE & ~_PCNT_ROUTE_LOCATION_MASK) | PCNT_ROUTE_LOCATION_LOC2; // [Route Configuration]$ }
#include "mbed.h" DigitalOut myled(LED1); LowPowerTicker toggleTicker; void ledToggler(void) { myled = !myled; } int main() { toggleTicker.attach(&ledToggler, 0.2f); while(1) { sleep(); } }
Source: https://habr.com/ru/post/277899/
All Articles