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

网络

开发平台:

Others

  1. // $Id: HPLSpiM.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.  * Authors: Jaein Jeong, Philip buonadonna
  32.  * Date last modified: $Revision: 1.1.1.1 $
  33.  *
  34.  */
  35. /**
  36.  * @author Jaein Jeong
  37.  * @author Philip buonadonna
  38.  */
  39. module HPLSpiM
  40. {
  41.   provides interface SpiByteFifo;
  42.   uses interface PowerManagement;
  43. }
  44. implementation
  45. {
  46.   norace uint8_t OutgoingByte; // Define norace to prevent nesC 1.1 warnings
  47.   TOSH_SIGNAL(SIG_SPI) {
  48.     register uint8_t temp = inp(SPDR);
  49.     outp(OutgoingByte,SPDR);
  50.     signal SpiByteFifo.dataReady(temp);
  51.   }
  52.   async command result_t SpiByteFifo.writeByte(uint8_t data) {
  53.     //while(bit_is_clear(SPSR,SPIF));
  54.     //outp(data, SPDR);
  55.     atomic OutgoingByte = data;
  56.     return SUCCESS;
  57.   }
  58.   async command result_t SpiByteFifo.isBufBusy() {
  59.     return bit_is_clear(SPSR,SPIF);
  60.   }
  61.   async command uint8_t SpiByteFifo.readByte() {
  62.     return inp(SPDR);
  63.   }
  64.   async command result_t SpiByteFifo.enableIntr() {
  65.     //sbi(SPCR,SPIE);
  66.     outp(0xC0, SPCR);
  67.     cbi(DDRB, 0);
  68.     call PowerManagement.adjustPower();
  69.     return SUCCESS;
  70.   }
  71.   async command result_t SpiByteFifo.disableIntr() {
  72.     cbi(SPCR, SPIE);
  73.     sbi(DDRB, 0);
  74.     cbi(PORTB, 0);
  75.     call PowerManagement.adjustPower();
  76.     return SUCCESS;
  77.   }
  78.   async command result_t SpiByteFifo.initSlave() {
  79.     atomic {
  80.       TOSH_MAKE_SPI_SCK_INPUT();
  81.       TOSH_MAKE_MISO_INPUT(); // miso
  82.       TOSH_MAKE_MOSI_INPUT(); // mosi
  83.       cbi(SPCR, CPOL); // Set proper polarity...
  84.       cbi(SPCR, CPHA); // ...and phase
  85.       sbi(SPCR, SPIE); // enable spi port
  86.       sbi(SPCR, SPE);
  87.     } 
  88.     return SUCCESS;
  89.   }
  90.   async command result_t SpiByteFifo.txMode() {
  91.     TOSH_MAKE_MISO_OUTPUT();
  92.     TOSH_MAKE_MOSI_OUTPUT();
  93.     return SUCCESS;
  94.   }
  95.   async command result_t SpiByteFifo.rxMode() {
  96.     TOSH_MAKE_MISO_INPUT();
  97.     TOSH_MAKE_MOSI_INPUT();
  98.     return SUCCESS;
  99.   }
  100. }