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

📄 hplatm128uartp.nc

📁 tinyos2.0版本驱动
💻 NC
字号:
/* * Copyright (c) 2006 Arch Rock Corporation * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * - Redistributions of source code must retain the above copyright *   notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright *   notice, this list of conditions and the following disclaimer in the *   documentation and/or other materials provided with the *   distribution. * - Neither the name of the Arch Rock Corporation nor the names of *   its contributors may be used to endorse or promote products derived *   from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE * ARCH ROCK OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE *//** * @author Alec Woo <awoo@archrock.com> * @author Jonathan Hui <jhui@archrock.com> * @version $Revision: 1.1 $ $Date: 2008/06/12 14:02:24 $ *//* * Copyright (c) 2004-2005 Crossbow Technology, Inc.  All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. *  * IN NO EVENT SHALL CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS BE LIABLE TO  * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL  * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN * IF CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH  * DAMAGE.  * * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY  * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS  * ON AN "AS IS" BASIS, AND NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY  * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR  * MODIFICATIONS. *//* * Copyright (c) 2007, Vanderbilt University * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. *  * IN NO EVENT SHALL THE VANDERBILT UNIVERSITY BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE VANDERBILT * UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  * THE VANDERBILT UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE VANDERBILT UNIVERSITY HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * *//**  * Private component of the Atmega1281 serial port HPL. * * @author Martin Turon <mturon@xbow.com> * @author David Gay * @author Janos Sallai <janos.sallai@vanderbilt.edu> */#include <Atm128Uart.h>module HplAtm128UartP {    provides interface Init as Uart0Init;  provides interface StdControl as Uart0TxControl;  provides interface StdControl as Uart0RxControl;  provides interface HplAtm128Uart as HplUart0;      provides interface Init as Uart1Init;  provides interface StdControl as Uart1TxControl;  provides interface StdControl as Uart1RxControl;  provides interface HplAtm128Uart as HplUart1;    uses interface Atm128Calibrate;  uses interface McuPowerState;    uses interface PlatformInterrupt;}implementation {    //=== Uart Init Commands. ====================================  command error_t Uart0Init.init() {    Atm128UartMode_t    mode;    Atm128UartStatus_t  stts;    Atm128UartControl_t ctrl;    uint16_t ubrr0;    ctrl.bits = (struct Atm128_UCSRB_t) {rxcie:0, txcie:0, rxen:0, txen:0};    stts.bits = (struct Atm128_UCSRA_t) {u2x:1};    mode.bits = (struct Atm128_UCSRC_t) {ucsz:ATM128_UART_DATA_SIZE_8_BITS};    ubrr0 = call Atm128Calibrate.baudrateRegister(PLATFORM_BAUDRATE);    UBRR0L = ubrr0;    UBRR0H = ubrr0 >> 8;    UCSR0A = stts.flat;    UCSR0C = mode.flat;    UCSR0B = ctrl.flat;    return SUCCESS;  }  command error_t Uart0TxControl.start() {    SET_BIT(UCSR0B, TXEN0);    call McuPowerState.update();    return SUCCESS;  }  command error_t Uart0TxControl.stop() {    CLR_BIT(UCSR0B, TXEN0);    call McuPowerState.update();    return SUCCESS;  }  command error_t Uart0RxControl.start() {    SET_BIT(UCSR0B, RXEN0);    call McuPowerState.update();    return SUCCESS;  }  command error_t Uart0RxControl.stop() {    CLR_BIT(UCSR0B, RXEN0);    call McuPowerState.update();    return SUCCESS;  }    async command error_t HplUart0.enableTxIntr() {    SET_BIT(UCSR0A, TXC0);    SET_BIT(UCSR0B, TXCIE0);    return SUCCESS;  }    async command error_t HplUart0.disableTxIntr(){    CLR_BIT(UCSR0B, TXCIE0);    return SUCCESS;  }    async command error_t HplUart0.enableRxIntr(){    SET_BIT(UCSR0B, RXCIE0);    return SUCCESS;  }  async command error_t HplUart0.disableRxIntr(){    CLR_BIT(UCSR0B, RXCIE0);    return SUCCESS;  }    async command bool HplUart0.isTxEmpty(){    return READ_BIT(UCSR0A, TXC0);  }  async command bool HplUart0.isRxEmpty(){    return !READ_BIT(UCSR0A, RXC0);  }    async command uint8_t HplUart0.rx(){    return UDR0;  }  async command void HplUart0.tx(uint8_t data) {    atomic{      UDR0 = data;       SET_BIT(UCSR0A, TXC0);    }  }    AVR_ATOMIC_HANDLER(SIG_USART0_RECV) {    if (READ_BIT(UCSR0A, RXC0)) {      signal HplUart0.rxDone(UDR0);    }    call PlatformInterrupt.postAmble();  }    AVR_NONATOMIC_HANDLER(SIG_USART0_TRANS) {    signal HplUart0.txDone();    call PlatformInterrupt.postAmble();  }    command error_t Uart1Init.init() {    Atm128UartMode_t    mode;    Atm128UartStatus_t  stts;    Atm128UartControl_t ctrl;    uint16_t ubrr1;        ctrl.bits = (struct Atm128_UCSRB_t) {rxcie:0, txcie:0, rxen:0, txen:0};    stts.bits = (struct Atm128_UCSRA_t) {u2x:1};    mode.bits = (struct Atm128_UCSRC_t) {ucsz:ATM128_UART_DATA_SIZE_8_BITS};    ubrr1 = call Atm128Calibrate.baudrateRegister(PLATFORM_BAUDRATE);    UBRR1L = ubrr1;    UBRR1H = ubrr1 >> 8;    UCSR1A = stts.flat;    UCSR1C = mode.flat;    UCSR1B = ctrl.flat;    return SUCCESS;  }  command error_t Uart1TxControl.start() {    SET_BIT(UCSR1B, TXEN1);    call McuPowerState.update();    return SUCCESS;  }  command error_t Uart1TxControl.stop() {    CLR_BIT(UCSR1B, TXEN1);    call McuPowerState.update();    return SUCCESS;  }  command error_t Uart1RxControl.start() {    SET_BIT(UCSR1B, RXEN1);    call McuPowerState.update();    return SUCCESS;  }  command error_t Uart1RxControl.stop() {    CLR_BIT(UCSR1B, RXEN1);    call McuPowerState.update();    return SUCCESS;  }    async command error_t HplUart1.enableTxIntr() {    SET_BIT(UCSR1A, TXC1);    SET_BIT(UCSR1B, TXCIE1);    return SUCCESS;  }    async command error_t HplUart1.disableTxIntr(){    CLR_BIT(UCSR1B, TXCIE1);    return SUCCESS;  }    async command error_t HplUart1.enableRxIntr(){    SET_BIT(UCSR1B, RXCIE1);    return SUCCESS;  }  async command error_t HplUart1.disableRxIntr(){    CLR_BIT(UCSR1B, RXCIE1);    return SUCCESS;  }    async command bool HplUart1.isTxEmpty() {    return READ_BIT(UCSR1A, TXC1);  }  async command bool HplUart1.isRxEmpty() {    return !READ_BIT(UCSR1A, RXC1);  }    async command uint8_t HplUart1.rx(){    return UDR1;  }  async command void HplUart1.tx(uint8_t data) {    atomic{      UDR1 = data;       SET_BIT(UCSR1A, TXC1);    }  }    AVR_ATOMIC_HANDLER(SIG_USART1_RECV) {    if (READ_BIT(UCSR1A, RXC1))      signal HplUart1.rxDone(UDR1);    call PlatformInterrupt.postAmble();  }    AVR_NONATOMIC_HANDLER(SIG_USART1_TRANS) {    signal HplUart1.txDone();    call PlatformInterrupt.postAmble();  }    default async event void HplUart0.txDone() {}   default async event void HplUart0.rxDone(uint8_t data) {}  default async event void HplUart1.txDone() {}  default async event void HplUart1.rxDone(uint8_t data) {}  }

⌨️ 快捷键说明

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