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

网络

开发平台:

Others

  1. // $Id: HPLCC1000M.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: Jaein Jeong, Philip Buonadonna
  33.  * Date last modified:  $Revision: 1.1.1.1 $
  34.  *
  35.  */
  36. /**
  37.  * Low level hardware access to the CC1000
  38.  * @author Jaein Jeong
  39.  * @author Philip Buonadonna
  40.  */
  41. module HPLCC1000M {
  42.   provides {
  43.     interface HPLCC1000;
  44.   }
  45. }
  46. implementation
  47. {
  48.   command result_t HPLCC1000.init() {
  49.     TOSH_MAKE_CC_CHP_OUT_INPUT();
  50.     TOSH_MAKE_CC_PALE_OUTPUT();  // PALE
  51.     TOSH_MAKE_CC_PCLK_OUTPUT();    // PCLK
  52.     TOSH_MAKE_CC_PDATA_OUTPUT();    // PDATA
  53.     TOSH_SET_CC_PALE_PIN();      // set PALE high
  54.     TOSH_SET_CC_PDATA_PIN();        // set PCLK high
  55.     TOSH_SET_CC_PCLK_PIN();        // set PDATA high
  56.     return SUCCESS;
  57.   }
  58.   //********************************************************/
  59.   // function: write                                       */
  60.   // description: accepts a 7 bit address and 8 bit data,  */
  61.   //    creates an array of ones and zeros for each, and   */
  62.   //    uses a loop counting thru the arrays to get        */
  63.   //    consistent timing for the chipcon radio control    */
  64.   //    interface.  PALE active low, followed by 7 bits    */
  65.   //    msb first of address, then lsb high for write      */
  66.   //    cycle, followed by 8 bits of data msb first.  data */
  67.   //    is clocked out on the falling edge of PCLK.        */
  68.   // Input:  7 bit address, 8 bit data                     */
  69.   //********************************************************/
  70.   async command result_t HPLCC1000.write(uint8_t addr, uint8_t data) {
  71.     char cnt = 0;
  72.     // address cycle starts here
  73.     addr <<= 1;
  74.     TOSH_CLR_CC_PALE_PIN();  // enable PALE
  75.     for (cnt=0;cnt<7;cnt++)  // send addr PDATA msb first
  76.     {
  77.       if (addr&0x80)
  78.         TOSH_SET_CC_PDATA_PIN();
  79.       else
  80.         TOSH_CLR_CC_PDATA_PIN();
  81.       TOSH_CLR_CC_PCLK_PIN();   // toggle the PCLK
  82.       TOSH_SET_CC_PCLK_PIN();
  83.       addr <<= 1;
  84.     }
  85.     TOSH_SET_CC_PDATA_PIN();
  86.     TOSH_CLR_CC_PCLK_PIN();   // toggle the PCLK
  87.     TOSH_SET_CC_PCLK_PIN();
  88.     TOSH_SET_CC_PALE_PIN();  // disable PALE
  89.     // data cycle starts here
  90.     for (cnt=0;cnt<8;cnt++)  // send data PDATA msb first
  91.     {
  92.       if (data&0x80)
  93.         TOSH_SET_CC_PDATA_PIN();
  94.       else
  95.         TOSH_CLR_CC_PDATA_PIN();
  96.       TOSH_CLR_CC_PCLK_PIN();   // toggle the PCLK
  97.       TOSH_SET_CC_PCLK_PIN();
  98.       data <<= 1;
  99.     }
  100.     TOSH_SET_CC_PALE_PIN();
  101.     TOSH_SET_CC_PDATA_PIN();
  102.     TOSH_SET_CC_PCLK_PIN();
  103.     return SUCCESS;
  104.   }
  105.   //********************************************************/
  106.   // function: read                                        */
  107.   // description: accepts a 7 bit address,                 */
  108.   //    creates an array of ones and zeros for each, and   */
  109.   //    uses a loop counting thru the arrays to get        */
  110.   //    consistent timing for the chipcon radio control    */
  111.   //    interface.  PALE active low, followed by 7 bits    */
  112.   //    msb first of address, then lsb low for read        */
  113.   //    cycle, followed by 8 bits of data msb first.  data */
  114.   //    is clocked in on the falling edge of PCLK.         */
  115.   // Input:  7 bit address                                 */
  116.   // Output:  8 bit data                                   */
  117.   //********************************************************/
  118.   async command uint8_t HPLCC1000.read(uint8_t addr) {
  119.     int cnt;
  120.     uint8_t din;
  121.     uint8_t data = 0;
  122.     // address cycle starts here
  123.     addr <<= 1;
  124.     TOSH_CLR_CC_PALE_PIN();  // enable PALE
  125.     for (cnt=0;cnt<7;cnt++)  // send addr PDATA msb first
  126.     {
  127.       if (addr&0x80)
  128.         TOSH_SET_CC_PDATA_PIN();
  129.       else
  130.         TOSH_CLR_CC_PDATA_PIN();
  131.       TOSH_CLR_CC_PCLK_PIN();   // toggle the PCLK
  132.       TOSH_SET_CC_PCLK_PIN();
  133.       addr <<= 1;
  134.     }
  135.     TOSH_CLR_CC_PDATA_PIN();
  136.     TOSH_CLR_CC_PCLK_PIN();   // toggle the PCLK
  137.     TOSH_SET_CC_PCLK_PIN();
  138.     TOSH_MAKE_CC_PDATA_INPUT();  // read data from chipcon
  139.     TOSH_SET_CC_PALE_PIN();  // disable PALE
  140.     // data cycle starts here
  141.     for (cnt=7;cnt>=0;cnt--)  // send data PDATA msb first
  142.     {
  143.       TOSH_CLR_CC_PCLK_PIN();  // toggle the PCLK
  144.       din = TOSH_READ_CC_PDATA_PIN();
  145.       if(din)
  146.         data = (data<<1)|0x01;
  147.       else
  148.         data = (data<<1)&0xfe;
  149.       TOSH_SET_CC_PCLK_PIN();
  150.     }
  151.     TOSH_SET_CC_PALE_PIN();
  152.     TOSH_MAKE_CC_PDATA_OUTPUT();
  153.     TOSH_SET_CC_PDATA_PIN();
  154.     return data;
  155.   }
  156.   async command bool HPLCC1000.GetLOCK() {
  157.     char cVal;
  158.     cVal = TOSH_READ_CC_CHP_OUT_PIN();
  159.     return cVal;
  160.   }
  161. }
  162.