Ejemplo n.º 1
0
int
console_printf(const char *fmt, ...)
{
    va_list args;
    int chars_written;

    va_start(args, fmt);

    chars_written = stream_vprintf(_get_stream(), fmt, args);
    va_end(args);

    return chars_written;
}
Ejemplo n.º 2
0
int
console_vprintf(const char *fmt, va_list args)
{
    return stream_vprintf(_get_stream(), fmt, args);
}
Ejemplo n.º 3
0
int
console_write_integer(int radix, int n)
{
    return stream_write_integer(_get_stream(), radix, n);
}
Ejemplo n.º 4
0
int
console_write_string(const char *s)
{
    return stream_write_string(_get_stream(), s);
}
Ejemplo n.º 5
0
int
console_write_char(char c)
{
    return stream_write_char(_get_stream(), c);
}
Ejemplo n.º 6
0
void laser_dma_rx_isr(u8 uartx)
{
	//rt_uint32_t level;
    uart_dma_t *p_uart_dma = _get_uart_dma(uartx);
    u8 f_size = p_uart_dma->recv_size;  //frame size
    
    /* 保存的数据的地址,由dma通道数据结构获得 */
    DMA_Stream_TypeDef *rx = _get_stream(p_uart_dma->rx_dmax, p_uart_dma->rx_streamx);
    
    char *addr = (char *)rx->M0AR;
    DMA_Cmd(rx, DISABLE);
    
    /* 判断数据有没有对齐 ,对齐且长度为帧长度时写入缓冲区,否则下次刷掉 */
    if(*addr==p_uart_dma->recv_head && rx->NDTR==f_size)   
    {   
        int i=0;
        char *rbuf = (char *)p_uart_dma->recv_addr;
        
        assert_param(rbuf != RT_NULL);
        
				/** @receive @correctly */
				LED_Toggle(2);
        
				for(i=0; i<p_uart_dma->recv_size; i++)
            *(rbuf+i) = *((char *)(rx->M0AR) + i);
		
		/* 接收数据计数值累加 */
		p_uart_dma->rx_cnt ++;
    }
    else if(rx->NDTR == (uint32_t)f_size)
    {/* 长度为帧长,说明是第一次出现数据传输错误 */  
        
        /* 重新设置dma接收的长度,达到对齐的目的 */
        /* 找帧头 */
        int i=0;
        //int fh_pos=0; /* frame head position */
        for(i=0; i<f_size; i++)
        {
            if(*(addr+i)==p_uart_dma->recv_head)
                break;
        }
        
        if(i==f_size)
        {/* 该帧中无帧头,不做改动继续接受下一帧*/
        }
        else
        {/* 帧头在该帧的中间*/
            rx->NDTR += i;
        }
        
    }
    else
    {   /* 长度不为帧长,应该是传输错误的第二次 */
        /* 找帧头 */
        int i=0;
        //int fh_pos=0; /* frame head position */
        for(i=0; i<f_size; i++)
        {
            if(*(addr+i)==p_uart_dma->recv_head)
                break;
        }
        if(i==f_size)
        {/* 该帧中无帧头, 表示出错*/
        }
        else
        {/* 帧头在该帧的中间 */
            if((rx->NDTR -i)==f_size)
            {/* 确认是出错后的第二次中断 */
                rx->NDTR = f_size;
            }
        }
    }
    DMA_Cmd(rx, ENABLE);
}