hplatm128uartp.nc
来自「tinyos-2.0源代码!转载而已!要的尽管拿!」· NC 代码 · 共 218 行
NC
218 行
/// $Id: HplAtm128UartP.nc,v 1.1.2.3 2006/06/21 16:59:18 idgay Exp $/* * 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. */#include <Atm128Uart.h>/** * Private component of the Atmega128 serial port HPL. * * @author Martin Turon <mturon@xbow.com> * @author David Gay */module HplAtm128UartP{ provides { interface Init as Uart0Init; interface StdControl as Uart0TxControl; interface StdControl as Uart0RxControl; interface SerialByteComm as Uart0; interface Init as Uart1Init; interface StdControl as Uart1TxControl; interface StdControl as Uart1RxControl; interface SerialByteComm as Uart1; } uses interface Atm128Calibrate;}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() { Atm128UartControl_t ctrl; ctrl.flat = UCSR0B; ctrl.bits.txcie = 1; ctrl.bits.txen = 1; UCSR0B = ctrl.flat; return SUCCESS; } command error_t Uart0TxControl.stop() { Atm128UartControl_t ctrl; ctrl.flat = UCSR0B; ctrl.bits.txcie = 0; ctrl.bits.txen = 0; UCSR0B = ctrl.flat; return SUCCESS; } command error_t Uart0RxControl.start() { Atm128UartControl_t ctrl; ctrl.flat = UCSR0B; ctrl.bits.rxcie = 1; ctrl.bits.rxen = 1; UCSR0B = ctrl.flat; return SUCCESS; } command error_t Uart0RxControl.stop() { Atm128UartControl_t ctrl; ctrl.flat = UCSR0B; ctrl.bits.rxcie = 0; ctrl.bits.rxen = 0; UCSR0B = ctrl.flat; return SUCCESS; } 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() { Atm128UartControl_t ctrl; ctrl.flat = UCSR1B; ctrl.bits.txcie = 1; ctrl.bits.txen = 1; UCSR1B = ctrl.flat; return SUCCESS; } command error_t Uart1TxControl.stop() { Atm128UartControl_t ctrl; ctrl.flat = UCSR1B; ctrl.bits.txcie = 0; ctrl.bits.txen = 0; UCSR1B = ctrl.flat; return SUCCESS; } command error_t Uart1RxControl.start() { Atm128UartControl_t ctrl; ctrl.flat = UCSR1B; ctrl.bits.rxcie = 1; ctrl.bits.rxen = 1; UCSR1B = ctrl.flat; return SUCCESS; } command error_t Uart1RxControl.stop() { Atm128UartControl_t ctrl; ctrl.flat = UCSR1B; ctrl.bits.rxcie = 0; ctrl.bits.rxen = 0; UCSR1B = ctrl.flat; return SUCCESS; } /* //=== Uart Stop Commands. ==================================== */ /* async command error_t Uart0.stop() { */ /* UCSR0A = 0; */ /* UCSR0B = 0; */ /* UCSR0C = 0; */ /* return SUCCESS; */ /* } */ /* async command error_t Uart1.stop() { */ /* UCSR0A = 0; */ /* UCSR0B = 0; */ /* UCSR0C = 0; */ /* return SUCCESS; */ /* } */ //=== Uart Put Commands. ==================================== async command error_t Uart0.put(uint8_t data) { atomic{ UDR0 = data; SET_BIT(UCSR0A, TXC); } return SUCCESS; } async command error_t Uart1.put(uint8_t data) { atomic{ UDR1 = data; SET_BIT(UCSR1A, TXC); } return SUCCESS; } //=== Uart Get Events. ====================================== default async event void Uart0.get(uint8_t data) { return; } AVR_ATOMIC_HANDLER(SIG_UART0_RECV) { if (READ_BIT(UCSR0A, RXC)) signal Uart0.get(UDR0); } default async event void Uart1.get(uint8_t data) { return; } AVR_ATOMIC_HANDLER(SIG_UART1_RECV) { if (READ_BIT(UCSR1A, RXC)) signal Uart1.get(UDR1); } //=== Uart Put Done Events. ================================= default async event void Uart0.putDone() { return; } AVR_NONATOMIC_HANDLER(SIG_UART0_TRANS) { signal Uart0.putDone(); } default async event void Uart1.putDone() { return; } AVR_NONATOMIC_HANDLER(SIG_UART1_TRANS) { signal Uart1.putDone(); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?