亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ser_esci.c

?? 開放源碼實時操作系統源碼.
?? C
?? 第 1 頁 / 共 2 頁
字號:
                                CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_FREESCALE_ESCI_D_BAUD),
                                CYG_SERIAL_STOP_DEFAULT,
                                CYG_SERIAL_PARITY_DEFAULT,
                                CYG_SERIAL_WORD_LENGTH_DEFAULT,
                                CYG_SERIAL_FLAGS_DEFAULT,
                                &esci_serial_out_buf3[0],
                                sizeof(esci_serial_out_buf3),
                                &esci_serial_in_buf3[0],
                                sizeof(esci_serial_in_buf3));
#else 
static 
SERIAL_CHANNEL(esci_serial_channel3,
               esci_serial_funs,
               esci_serial_info3,
               CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_FREESCALE_ESCI_D_BAUD),
               CYG_SERIAL_STOP_DEFAULT,
               CYG_SERIAL_PARITY_DEFAULT,
               CYG_SERIAL_WORD_LENGTH_DEFAULT,
               CYG_SERIAL_FLAGS_DEFAULT);
#endif
DEVTAB_ENTRY(esci_serial_io3,
             CYGDAT_IO_SERIAL_FREESCALE_ESCI_D_NAME,
             0, // does not depend on a lower level device driver
             &cyg_io_serial_devio,
             esci_serial_init,
             esci_serial_lookup,
             &esci_serial_channel3);
#endif // ifdef CYGPKG_IO_SERIAL_FREESCALE_ESCI_D

//----------------------------------------------------------------------------
// Internal function to actually configure the hardware to desired
// baud rate, etc.
//----------------------------------------------------------------------------
static bool
esci_serial_config_port(serial_channel * chan, cyg_serial_info_t * new_config,
                        bool init)
{
    esci_serial_info * esci_chan = (esci_serial_info *)(chan->dev_priv);
    cyg_addrword_t esci_base = esci_chan->esci_base;
    cyg_uint16 baud_rate = ((new_config->baud >= 0) && 
                            (new_config->baud < (sizeof(select_baud)/
                                                 sizeof(select_baud[0]))))
      ? select_baud[new_config->baud] : 0;
    
    cyg_uint16 esci_cr12=0, esci_cr12_old;
    
    HAL_WRITE_UINT8(FREESCALE_ESCI_CR3(esci_base), 0);
    HAL_WRITE_UINT16(FREESCALE_ESCI_LINCTRL(esci_base), 0);
    HAL_WRITE_UINT16(FREESCALE_ESCI_CR12(esci_base), 0);
    
    if(!baud_rate) return false;    // Invalid baud rate selected
    
    switch(new_config->word_length){
    case 8: break;
    default: return false;
    }
    
    switch(new_config->parity){
    case CYGNUM_SERIAL_PARITY_ODD:
        esci_cr12 |= FREESCALE_ESCI_CR12_PT;
    case CYGNUM_SERIAL_PARITY_EVEN:
        esci_cr12 |= FREESCALE_ESCI_CR12_PE;        
    case CYGNUM_SERIAL_PARITY_NONE:
        break;
    default: return false;
    }
    
    if(new_config->stop!=CYGNUM_SERIAL_STOP_1) return false;
    
    // Enable the device
    esci_cr12 |= FREESCALE_ESCI_CR12_TE | FREESCALE_ESCI_CR12_RE;
    
    if(init){ // Enable the receiver interrupt
        esci_cr12 |= FREESCALE_ESCI_CR12_RIE;
    }else{    // Restore the old interrupt state
        HAL_READ_UINT16(FREESCALE_ESCI_CR12(esci_base), esci_cr12_old);
        esci_cr12 |= (esci_cr12_old & FREESCALE_ESCI_CR12_RIE);
    }
    HAL_WRITE_UINT16(FREESCALE_ESCI_CR12(esci_base), esci_cr12);
    
    if(new_config != &chan->config)
        chan->config = *new_config;

    return true;
}

//--------------------------------------------------------------
// Function to initialize the device.  Called at bootstrap time.
//--------------------------------------------------------------
static bool
esci_serial_init(struct cyg_devtab_entry * tab)
{
    serial_channel * chan = (serial_channel *)tab->priv;
    esci_serial_info * esci_chan = (esci_serial_info *)chan->dev_priv;

    // Really only required for interrupt driven devices
    (chan->callbacks->serial_init)(chan);  
    if(chan->out_cbuf.len != 0){ 
        cyg_drv_interrupt_create(esci_chan->interrupt_num,
                                 esci_chan->interrupt_priority,
                                 // Data item passed to interrupt handler
                                 (cyg_addrword_t)chan,   
                                 esci_serial_ISR,
                                 esci_serial_DSR,
                                 &esci_chan->interrupt_handle,
                                 &esci_chan->interrupt_obj);
        
        cyg_drv_interrupt_attach(esci_chan->interrupt_handle);
        cyg_drv_interrupt_unmask(esci_chan->interrupt_num);
    }
    return esci_serial_config_port(chan, &chan->config, true);
}

//----------------------------------------------------------------------
// This routine is called when the device is "looked" up (i.e. attached)
//----------------------------------------------------------------------
static Cyg_ErrNo
esci_serial_lookup(struct cyg_devtab_entry ** tab, 
                   struct cyg_devtab_entry * sub_tab, const char * name)
{
    serial_channel * chan = (serial_channel *)(*tab)->priv;
    // Really only required for interrupt driven devices
    (chan->callbacks->serial_init)(chan);  

    return ENOERR;
}

//-----------------------------------------------------------------
// Send a character to Tx
//-----------------------------------------------------------------
static bool
esci_serial_putc(serial_channel * chan, unsigned char ch_out)
{
    esci_serial_info * esci_chan = (esci_serial_info *)chan->dev_priv;
    cyg_addrword_t esci_base = esci_chan->esci_base;
    cyg_uint16 esci_sr;
    
    HAL_READ_UINT16(FREESCALE_ESCI_SR(esci_base), esci_sr);
    if(esci_sr & FREESCALE_ESCI_SR_TDRE){
        HAL_WRITE_UINT16(FREESCALE_ESCI_SR(esci_base), FREESCALE_ESCI_SR_TDRE);
        HAL_WRITE_UINT8(FREESCALE_ESCI_DRL(esci_base), ch_out);
        return true;
    }else
        return false;
}

//---------------------------------------------------------------------
// Fetch a character Rx (for polled operation only)
//---------------------------------------------------------------------
static unsigned char
esci_serial_getc(serial_channel * chan)
{
    cyg_uint8 ch_in;
    esci_serial_info * esci_chan = (esci_serial_info *)chan->dev_priv;
    cyg_addrword_t esci_base = esci_chan->esci_base;
    
    cyg_uint16 esci_sr;
    
    do{
        HAL_READ_UINT16(FREESCALE_ESCI_SR(esci_base), esci_sr);
    }while(esci_sr & FREESCALE_ESCI_SR_RDRF);
    
    HAL_READ_UINT8(FREESCALE_ESCI_DRL(esci_base), ch_in);
    HAL_WRITE_UINT16(FREESCALE_ESCI_SR(esci_base), FREESCALE_ESCI_SR_RDRF);
    
    return ch_in;
}

//---------------------------------------------------
// Set up the device characteristics; baud rate, etc.
//---------------------------------------------------
static bool
esci_serial_set_config(serial_channel * chan, cyg_uint32 key, 
                       const void *xbuf, cyg_uint32 * len)
{
    switch(key) {
    case CYG_IO_SET_CONFIG_SERIAL_INFO:{
            cyg_serial_info_t *config = (cyg_serial_info_t *)xbuf;
            if(*len < sizeof(cyg_serial_info_t)) {
                return -EINVAL;
            }
            *len = sizeof(cyg_serial_info_t);
            if(true != esci_serial_config_port(chan, config, false))
            return -EINVAL;
        }
        break;
    default:
        return -EINVAL;
    }
    return ENOERR;
}

//-------------------------------------
// Enable the transmitter on the device
//-------------------------------------
static void esci_serial_start_xmit(serial_channel * chan)
{
    esci_serial_info * esci_chan = (esci_serial_info *)chan->dev_priv;
    cyg_addrword_t esci_base = esci_chan->esci_base;
    cyg_uint16 esci_cr12;
    
    HAL_READ_UINT16(FREESCALE_ESCI_CR12(esci_base), esci_cr12);
    esci_cr12 |= FREESCALE_ESCI_CR12_TIE;
    HAL_WRITE_UINT16(FREESCALE_ESCI_CR12(esci_base), esci_cr12);
}

//--------------------------------------
// Disable the transmitter on the device
//--------------------------------------
static void esci_serial_stop_xmit(serial_channel * chan)
{
    esci_serial_info * esci_chan = (esci_serial_info *)chan->dev_priv;

    cyg_addrword_t esci_base = esci_chan->esci_base;
    cyg_uint16 esci_cr12;
    
    HAL_READ_UINT16(FREESCALE_ESCI_CR12(esci_base), esci_cr12);
    esci_cr12 &= ~FREESCALE_ESCI_CR12_TIE;
    HAL_WRITE_UINT16(FREESCALE_ESCI_CR12(esci_base), esci_cr12);
}

//-----------------------------------------
// The low level interrupt handler
//-----------------------------------------
static
cyg_uint32 esci_serial_ISR(cyg_vector_t vector, cyg_addrword_t data)
{
    serial_channel * chan = (serial_channel *)data;
    esci_serial_info * esci_chan = (esci_serial_info *)chan->dev_priv;

    cyg_drv_interrupt_mask(esci_chan->interrupt_num);
    cyg_drv_interrupt_acknowledge(esci_chan->interrupt_num);

    return CYG_ISR_CALL_DSR; // cause the DSR to run
}


//------------------------------------------
// The high level interrupt handler
//------------------------------------------

#define FREESCALE_ESCI_SR_ERRORS (FREESCALE_ESCI_SR_OR | \
                                  FREESCALE_ESCI_SR_NF | \
                                  FREESCALE_ESCI_SR_FE | \
                                  FREESCALE_ESCI_SR_PF)

static void
esci_serial_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
{
    serial_channel * chan = (serial_channel *)data;
    esci_serial_info * esci_chan = (esci_serial_info *)chan->dev_priv;
    cyg_addrword_t esci_base = esci_chan->esci_base;
    cyg_uint16 esci_sr;
    cyg_uint8 esci_dr;

    HAL_READ_UINT16(FREESCALE_ESCI_SR(esci_base), esci_sr);
    if(esci_sr & FREESCALE_ESCI_SR_RDRF){ // Receiver full
        HAL_READ_UINT8(FREESCALE_ESCI_DRL(esci_base), esci_dr);
        HAL_WRITE_UINT16(FREESCALE_ESCI_SR(esci_base), FREESCALE_ESCI_SR_RDRF);
        if(esci_sr &= (cyg_uint16)FREESCALE_ESCI_SR_ERRORS){
            HAL_WRITE_UINT16(FREESCALE_ESCI_SR(esci_base), esci_sr);
        }else{
            (chan->callbacks->rcv_char)(chan, (cyg_uint8)esci_dr);
        }
    }else if(esci_sr & FREESCALE_ESCI_SR_TDRE){ //Transmitter empty
        (chan->callbacks->xmt_char)(chan);
    }
    
    cyg_drv_interrupt_unmask(esci_chan->interrupt_num);
}

#endif // CYGPKG_IO_SERIAL_FREESCALE_ESCI_[ABCD]
// EOF ser_esci.c

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃免费网站一区二区三区| 亚洲精品高清在线观看| 精品视频在线免费观看| 色综合天天做天天爱| 成人免费毛片a| www.日韩大片| 91福利国产精品| 欧美日韩一级视频| 8x福利精品第一导航| 69p69国产精品| 欧美一级艳片视频免费观看| 日韩欧美一二区| 久久久精品tv| 亚洲日本在线天堂| 亚洲成av人片在线观看| 日韩成人一区二区三区在线观看| 首页国产欧美久久| 精品一区二区av| 成人高清免费观看| 欧美亚洲一区二区在线| 日韩视频永久免费| 国产色婷婷亚洲99精品小说| 国产精品久久久久久久久久免费看 | 国产精品护士白丝一区av| 中文字幕在线播放不卡一区| 亚洲一二三级电影| 久久se精品一区精品二区| 成人va在线观看| 欧美日韩国产高清一区二区三区 | 538在线一区二区精品国产| 精品蜜桃在线看| 日韩毛片视频在线看| 亚洲综合在线观看视频| 青青青伊人色综合久久| 成人午夜视频免费看| 欧美三级三级三级爽爽爽| 日韩女优毛片在线| 亚洲裸体xxx| 国产尤物一区二区在线| 精品视频在线看| 欧美激情一区二区在线| 日本女优在线视频一区二区| 粉嫩蜜臀av国产精品网站| 欧美高清视频在线高清观看mv色露露十八| 欧美电影免费观看高清完整版在线| ...xxx性欧美| 精品一区二区免费看| 欧美天堂亚洲电影院在线播放| 国产清纯白嫩初高生在线观看91| 肉色丝袜一区二区| 99久久免费视频.com| 精品处破学生在线二十三| 伊人色综合久久天天人手人婷| 国产福利视频一区二区三区| 欧美日韩国产大片| 亚洲欧美另类图片小说| 国产激情一区二区三区| 欧美一激情一区二区三区| 亚洲靠逼com| 91在线视频官网| 亚洲国产精华液网站w| 九九精品视频在线看| 欧美福利一区二区| 亚洲一区二区三区自拍| 色爱区综合激月婷婷| 国产欧美日韩综合精品一区二区| 麻豆国产欧美日韩综合精品二区 | 色综合久久88色综合天天免费| 久久婷婷一区二区三区| 全国精品久久少妇| 欧美一区二区三区在线观看视频| 洋洋av久久久久久久一区| 色综合久久精品| 一区二区三区四区中文字幕| www.欧美.com| 亚洲色图欧洲色图婷婷| 91小宝寻花一区二区三区| 国产精品国产三级国产a| 成人成人成人在线视频| 综合色中文字幕| 91蜜桃在线免费视频| 亚洲欧美日韩一区| 欧美在线免费观看亚洲| 亚洲超丰满肉感bbw| 欧美久久一二三四区| 老司机免费视频一区二区| 欧美一区二区三区成人| 国产一区二区女| 国产精品国产三级国产三级人妇 | 亚洲另类色综合网站| 色噜噜狠狠成人网p站| 亚洲国产综合在线| 欧美剧在线免费观看网站| 六月丁香婷婷久久| 久久综合久久综合九色| www.成人网.com| 性做久久久久久免费观看欧美| 51精品久久久久久久蜜臀| 国产一区二区电影| 亚洲女同ⅹxx女同tv| 欧美一区二区在线不卡| 国产乱码精品一品二品| 1024国产精品| 制服丝袜成人动漫| 国产一区999| 亚洲国产精品综合小说图片区| 欧美一级二级三级蜜桃| www.亚洲在线| 日本欧美肥老太交大片| 综合网在线视频| 精品少妇一区二区三区日产乱码 | 欧美区在线观看| 国产老肥熟一区二区三区| 亚洲人精品午夜| 精品蜜桃在线看| 欧美三级视频在线观看 | 国产精品天天看| 91精品国产一区二区人妖| 成人福利在线看| 蜜桃久久久久久| 亚洲福利一二三区| 国产精品久久久久久户外露出 | 精品盗摄一区二区三区| 91视频www| 国产盗摄精品一区二区三区在线 | 一本久久综合亚洲鲁鲁五月天 | 亚洲一区在线电影| 国产日韩精品一区二区三区| 欧美日韩视频在线观看一区二区三区 | 日韩女优av电影在线观看| 97se狠狠狠综合亚洲狠狠| 国内精品视频一区二区三区八戒| 亚洲激情图片小说视频| 国产精品无码永久免费888| 日韩欧美精品三级| 欧美久久久久中文字幕| 色婷婷综合激情| 国v精品久久久网| 国产呦萝稀缺另类资源| 青青草成人在线观看| 亚洲最大的成人av| 亚洲女性喷水在线观看一区| 国产精品日韩成人| 国产亚洲欧美日韩俺去了| 日韩欧美视频在线| 欧美一级二级三级蜜桃| 欧美一区二区三区免费视频| 欧美视频在线不卡| 色菇凉天天综合网| 色综合天天综合网天天看片| 99r国产精品| 色www精品视频在线观看| 波多野结衣一区二区三区| 国产成人免费在线| 丁香桃色午夜亚洲一区二区三区| 国产盗摄精品一区二区三区在线| 国产一区二区三区免费在线观看| 久久99久久精品| 国产成人精品影视| 成人av高清在线| 91网站最新网址| 欧美日韩一区二区电影| 欧美日韩和欧美的一区二区| 在线不卡欧美精品一区二区三区| 欧美日韩精品免费| 精品国产乱码久久久久久闺蜜| 久久久久国产精品免费免费搜索| 国产性天天综合网| 国产精品亲子伦对白| 亚洲天堂网中文字| 石原莉奈在线亚洲二区| 蜜桃视频在线观看一区| 国产精品一区二区在线观看网站| 成人综合激情网| 在线日韩av片| 亚洲精品在线免费观看视频| 日本一区二区三区在线不卡| 国产精品超碰97尤物18| 亚洲动漫第一页| 国产在线日韩欧美| 91首页免费视频| 欧美一区二区三区在线电影| 国产欧美精品在线观看| 亚洲乱码日产精品bd| 久久国产精品99久久人人澡| 大桥未久av一区二区三区中文| 91成人在线精品| 2023国产精品| 夜夜嗨av一区二区三区网页 | 经典三级在线一区| caoporn国产一区二区| 在线综合+亚洲+欧美中文字幕| 久久久99免费| 天堂资源在线中文精品| 国产精品一二一区| 日韩一区二区三区视频在线观看 | 欧美视频在线一区二区三区 | 国产精品久久一级| 亚洲bdsm女犯bdsm网站| 国产精品99久久不卡二区|