⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sw-uart.c

📁 m8 usb to rs232
💻 C
字号:
/* Name: sw-uart.c * Project: AVR USB driver for CDC interface on Low-Speed USB * Author: Osamu Tamura * Creation Date: 2006-06-22 * Tabsize: 4 * Copyright: (c) 2006 by Recursion Co., Ltd. * License: Proprietary, free under certain conditions. See Documentation. *//*General Description:*/#include <avr/io.h>#include <avr/interrupt.h>#include "oddebug.h"#include "uart.h"#if !UART_CFG_HAVE_USART/* UART buffer */uchar    urptr, uwptr, irptr, iwptr;uchar    rx_buf[RX_SIZE], tx_buf[TX_SIZE];uchar    tx_stage, bit_start;
void uartInit(int baudrate, uchar parity, uchar stopbits, uchar databits){
#if UART_CFG_INVERT
    UART_CFG_PORT   &= ~(1<<UART_CFG_TXD);#else
    UART_CFG_PORT   |= (1<<UART_CFG_TXD);#endif
    UART_DDR    |= (1<<UART_CFG_TXD);
    UART_DDR    &= ~(1<<UART_CFG_RXD);
    
    GIMSK    &= ~(1<<PCIE);    TCCR0A   = 0;    TCCR0B   = 0;    OCR0A    =    OCR1A    = (F_CPU/64L) / baudrate - 1;    bit_start = 6 - (OCR1A>>1);    TCCR0A   = 2;            /* CTC */    TCCR1    = 0;    TIMSK    = (1<<OCIE1A)|(1<<OCIE0A);    PCMSK    = 1<<UART_CFG_RXD;   /*  PCINTn  */    GIMSK    |= (1<<PCIE);    tx_stage = 0;}void uartPoll(void){    if( tx_stage==0 && OCR1C==0 && irptr!=uwptr ) {        tx_stage = 10;        OCR0B    = tx_buf[irptr];        irptr    = (irptr+1) & TX_MASK;        TCNT0    = 0;        cli();#if UART_CFG_INVERT
        UART_CFG_PORT   |= (1<<UART_CFG_TXD);       /* start bit */#else
        UART_CFG_PORT   &= ~(1<<UART_CFG_TXD);       /* start bit */#endif
        TCCR0B   = 3;         /* start timer0: 1/64 clk */        sei();    }}void uartStartTransmission(void){    /* nothing to do -- we handle transmitter entirely in uartPoll() */}uchar uartRxIsBusy(void){    return OCR1C;}#endif      /* UART_CFG_HAVE_USART */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -