tag 标签: leuart

相关博文
  • 热度 16
    2015-1-22 12:32
    2216 次阅读|
    0 个评论
    EFM32 的 DMA 的 DMA 回调的使用。 当我们需要从串口接收大量的数据时, 1 )如果我们接收的数据具有固定的帧格式,则可以把 LEUART 配置成特殊帧触发中断的方式。当收到某个具体的帧后,触发中断,程序可以在 LEUART 中断中对数据进行分析。 设置成: Void LEUART_Init(void) {        LEUART_Init_TypeDef tLeuartInit =        {               .enable   = leuartEnable,               .refFreq  = 0,               .baudrate = 115200,               .databits = leuartDatabits8,               .parity   = leuartNoParity,               .stopbits = leuartStopbits1        };        CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_CORELEDIV2);// 用内核时钟的一半          CMU_ClockEnable(cmuClock_CORELE,true);        CMU_ClockEnable(cmuClock_LEUART0,true);        CMU_ClockEnable(cmuClock_GPIO,true);          LEUART_Reset(LEUART0);        LEUART_Init(LEUART0, tLeuartInit);            LEUART0-ROUTE = LEUART_ROUTE_TXPEN |                         LEUART_ROUTE_RXPEN |                         LEUART_ROUTE_LOCATION_LOC4;          GPIO_PinModeSet(BLE_TX_PORT,BLE_TX_PIN, gpioModePushPull,  1);        GPIO_PinModeSet(BLE_RX_PORT,BLE_RX_PIN, gpioModeInputPull, 1);          LEUART0-STARTFRAME = UART_DATA_START;        LEUART0-SIGFRAME = UART_DATA_STOP;        LEUART_IntEnable(LEUART0, LEUART_IEN_SIGF); // only the stop char int        NVIC_SetPriority(LEUART0_IRQn, LEUART0_INT_LEVEL);        NVIC_EnableIRQ(LEUART0_IRQn); } 2 )如果预知每次从串口来多少数据的话,则可以把串口配置成缓存区溢出中断,则当溢出时触发中断,在中断里对缓存区中的数据进行处理。 Void LEUART_Init(void) {        LEUART_Init_TypeDef tLeuartInit =        {               .enable   = leuartEnable,               .refFreq  = 0,               .baudrate = 115200,               .databits = leuartDatabits8,               .parity   = leuartNoParity,               .stopbits = leuartStopbits1        };        CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_CORELEDIV2);// 用内核时钟的一半          CMU_ClockEnable(cmuClock_CORELE,true);        CMU_ClockEnable(cmuClock_LEUART0,true);        CMU_ClockEnable(cmuClock_GPIO,true);        LEUART_Reset(LEUART0);        LEUART_Init(LEUART0, tLeuartInit);        LEUART0-ROUTE = LEUART_ROUTE_TXPEN |                         LEUART_ROUTE_RXPEN |                     LEUART_ROUTE_LOCATION_LOC4;          GPIO_PinModeSet(BLE_TX_PORT,BLE_TX_PIN, gpioModePushPull,  1);        GPIO_PinModeSet(BLE_RX_PORT,BLE_RX_PIN, gpioModeInputPull, 1);        LEUART_IntEnable(LEUART0, LEUART_IEN_RXOF); // 缓存溢出时产生中断。        NVIC_SetPriority(LEUART0_IRQn, LEUART0_INT_LEVEL);        NVIC_EnableIRQ(LEUART0_IRQn); }   还需要对 DMA 进行初始化,然后配置成        DMA_ActivateBasic(DMA_CH_RX,   /* Activate channel selected */                          true,        /* Use primary descriptor */                          false,        /* No DMA burst */                          (void *)LEUARTRXBUFF,  /* Destination address */                          (void *) LEUART0-RXDATA,  /* Source address*/                          RX_BUF_SIZE-1);     /* Size of buffer minus1 */ 这里需要配置 DMA 接收数据长度,要和实际想要接收的字节长度一致,这样当接收满了就会产生 LEUART 中断。(这种方式不好),例如到接收到 RX_BUF_SIZE 个字节就会产生溢出中断(针对 efm32mcu )。
  • 热度 14
    2014-5-12 17:42
    1229 次阅读|
    0 个评论
    使用leuart外设通过蓝牙进行双机收发,两个板子分别设置为主从机,直接上视频