HPLUART0M.nc
上传用户:joranyuan
上传日期:2022-06-23
资源大小:3306k
文件大小:3k
源码类别:

网络

开发平台:

Others

  1. // $Id: HPLUART0M.nc,v 1.1.1.1 2005/04/22 04:26:45 acwarrie Exp $
  2. /* tab:4
  3.  * "Copyright (c) 2000-2003 The Regents of the University  of California.  
  4.  * All rights reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software and its
  7.  * documentation for any purpose, without fee, and without written agreement is
  8.  * hereby granted, provided that the above copyright notice, the following
  9.  * two paragraphs and the author appear in all copies of this software.
  10.  * 
  11.  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
  12.  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  13.  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
  14.  * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  15.  * 
  16.  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  17.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  18.  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  19.  * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
  20.  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
  21.  *
  22.  * Copyright (c) 2002-2003 Intel Corporation
  23.  * All rights reserved.
  24.  *
  25.  * This file is distributed under the terms in the attached INTEL-LICENSE     
  26.  * file. If you do not find these files, copies can be found by writing to
  27.  * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
  28.  * 94704.  Attention:  Intel License Inquiry.
  29.  */
  30. /*
  31.  *
  32.  * Authors: Jason Hill, David Gay, Philip Levis, Phil Buonadonna, Joe Polastre
  33.  * Date last modified:  $Revision: 1.1.1.1 $
  34.  *
  35.  */
  36. // The hardware presentation layer. See hpl.h for the C side.
  37. // Note: there's a separate C side (hpl.h) to get access to the avr macros
  38. // The model is that HPL is stateless. If the desired interface is as stateless
  39. // it can be implemented here (Clock, FlashBitSPI). Otherwise you should
  40. // create a separate component
  41. /**
  42.  * @author Jason Hill
  43.  * @author David Gay
  44.  * @author Philip Levis
  45.  * @author Phil Buonadonna
  46.  * @author Joe Polastre
  47.  */
  48. module HPLUART0M {
  49.   provides interface HPLUART as UART;
  50. }
  51. implementation
  52. {
  53.   async command result_t UART.init() {
  54.     // UART will run at:
  55.     // 115kbps, N-8-1
  56.     // Set 57.6 KBps
  57.     outp(0,UBRR0H); 
  58.     outp(15, UBRR0L);
  59.     // Set UART double speed
  60.     outp((1<<U2X),UCSR0A);
  61.     // Set frame format: 8 data-bits, 1 stop-bit
  62.     outp(((1 << UCSZ1) | (1 << UCSZ0)) , UCSR0C);
  63.     // Enable reciever and transmitter and their interrupts
  64.     outp(((1 << RXCIE) | (1 << TXCIE) | (1 << RXEN) | (1 << TXEN)) ,UCSR0B);
  65.     return SUCCESS;
  66.   }
  67.   async command result_t UART.stop() {
  68.     outp(0x00, UCSR0A);
  69.     outp(0x00, UCSR0B);
  70.     outp(0x00, UCSR0C);
  71.     return SUCCESS;
  72.   }
  73.   default async event result_t UART.get(uint8_t data) { return SUCCESS; }
  74.   TOSH_SIGNAL(SIG_UART0_RECV) {
  75.     if (inp(UCSR0A) & (1 << RXC))
  76.       signal UART.get(inp(UDR0));
  77.   }
  78.   default async event result_t UART.putDone() { return SUCCESS; }
  79. #ifdef ENABLE_UART_DEBUG
  80. #warning "UART Interrups Redirected"
  81. #else
  82.   TOSH_INTERRUPT(SIG_UART0_TRANS) {
  83.     signal UART.putDone();
  84.   }
  85. #endif
  86.   command async result_t UART.put(uint8_t data) {
  87.    atomic{
  88.     outp(data, UDR0); 
  89.     sbi(UCSR0A, TXC);
  90.    }
  91.     return SUCCESS;
  92.   }
  93. }